verse.lua

Sun, 30 Dec 2018 09:43:36 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Sun, 30 Dec 2018 09:43:36 +0000
changeset 164
14500a149b31
parent 103
9e0e56393978
child 177
3c19b67a1f0f
permissions
-rw-r--r--

client: Ignore timeout timer if we received a stanza

12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 package.preload['util.encodings']=(function(...)
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2 local _ENV=_ENV;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3 local function a(t,...)
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
4 local e=package.loaded[t]or _ENV[t]or{_NAME=t};
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
5 package.loaded[t]=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
6 for t=1,select("#",...)do
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7 (select(t,...))(e);
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8 end
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
9 _ENV=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
10 _M=e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
11 return e;
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
12 end
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 error("Function not implemented");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 end
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
16 local e=require"mime";
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
17 a"encodings"
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 if t then e.attr.sessionid=t;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 if a then e.attr.action=a;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
181 local t,e=pcall(require,"util.termcolours");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195 return m(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
198 function e:query(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 return self:tag("query",{xmlns=e});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 function e:body(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 return self:tag("body",e):text(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
207 if not e then e={};self.last_add=e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208 (e[#e]or self):add_direct_child(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 t(e,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
210 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
211 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
212 function e:text(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
213 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
214 (e and e[#e]or self):add_direct_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
215 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
216 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
217 function e:up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
220 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
221 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
222 function e:reset()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
223 self.last_add=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
224 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
225 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
228 t(self.tags,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
229 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
230 t(self,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
231 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
232 function e:add_child(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
233 local e=self.last_add;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
234 (e and e[#e]or self):add_direct_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
235 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
242 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
243 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
244 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
248 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
249 return e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
250 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
251 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
252 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
255 if e.name==t then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
256 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
257 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
260 if e.attr.xmlns==t then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
261 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
262 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
263 function e:children()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
264 local e=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
265 return function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
266 e=e+1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
267 return t[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
268 end,self,e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
281 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
282 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
283 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
284 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
304 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
307 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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={["'"]="&apos;",["\""]="&quot;",["<"]="&lt;",[">"]="&gt;",["&"]="&amp;"};
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
339 local s=o.name
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
348 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
349 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 local i=#o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351 if i==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
352 t(e,"/>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
353 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
354 t(e,">");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
355 for i=1,i do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
356 local i=o[i];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
357 if i.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
358 h(i,e,h,a,o.attr.xmlns);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
359 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
360 t(e,a(i));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
361 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
362 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
363 t(e,"</"..s..">");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
364 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
365 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
366 function e.__tostring(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
377 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
378 function e.get_text(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
387 return nil,nil,nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
398 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
399 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
400 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
423 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
424 local s=a.attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
425 for e=1,#s do s[e]=nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
431 s[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
432 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
436 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
441 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
442 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
451 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
452 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
453 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
459 for e=1,#a do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
460 local e=a[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
463 t(o,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
513 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
514 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
527 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
528 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
529 e.pretty_print=e.__tostring;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
530 e.pretty_top_tag=e.top_tag;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
531 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
532 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
533 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
534 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
575 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
576 e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
590 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
591 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
592 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
593 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
613 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
638 reset=0;bright=1,dim=2,underscore=4,blink=5,reverse=7,hidden=8;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
639 black=30;red=31;green=32;yellow=33;blue=34;magenta=35;cyan=36;white=37;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
641 bold=1,dark=2,underline=4,underlined=4,normal=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
645 ["1"]=7+8,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
646 ["1;33"]=2+4+8,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
647 ["1;31"]=4+8
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
661 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
662 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
663 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
674 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
675 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
707 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
753 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
774 local e={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
775 get=function(t,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
776 local a=e('#',...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
777 for a=1,a do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
778 t=t[e(a,...)];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
779 if t==nil then break;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
780 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
781 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
782 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
790 if o==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
791 if e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
797 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
798 elseif e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
801 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
802 a=e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
803 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
808 return o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
809 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
810 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
818 return(e-(e%256))/256;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
821 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
822 for o,e in o(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
823 t[o]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
824 t[e]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
825 t[a.lower(e)]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
826 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
827 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
830 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
833 e[o]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
834 e[i]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
835 e[a.lower(i)]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
836 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
837 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
838 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
839 t.types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
840 'A','NS','MD','MF','CNAME','SOA','MB','MG','MR','NULL','WKS',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
841 'PTR','HINFO','MINFO','MX','TXT',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
842 [28]='AAAA',[29]='LOC',[33]='SRV',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
843 [252]='AXFR',[253]='MAILB',[254]='MAILA',[255]='*'};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
850 if a.byte(e,-1)~=46 then e=e..'.';end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
868 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
869 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
870 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
871 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
877 return"<UNKNOWN RDATA TYPE>";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
878 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
879 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
880 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
881 local w={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
882 LOC=e.LOC_tostring;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
883 MX=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
884 return a.format('%2i %s',e.pref,e.mx);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
885 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
886 SRV=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
887 local e=e.srv;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
888 return a.format('%5d %5d %5d %s',e.priority,e.weight,e.port,e.target);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
889 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
894 return a.format('%2s %-5s %6i %-28s %s',e.class,e.type,e.ttl,e.name,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
924 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
928 return t.random(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
931 e=e or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
932 e.id=e.id or t.random(0,65535);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
933 e.rd=e.rd or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
934 e.tc=e.tc or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
935 e.aa=e.aa or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
936 e.opcode=e.opcode or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
937 e.qr=e.qr or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
938 e.rcode=e.rcode or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
939 e.z=e.z or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
940 e.ra=e.ra or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
941 e.qdcount=e.qdcount or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
942 e.ancount=e.ancount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
943 e.nscount=e.nscount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
944 e.arcount=e.arcount or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
947 e.rd+2*e.tc+4*e.aa+8*e.opcode+128*e.qr,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
953 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
954 return t,e.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
957 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
970 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
971 function e:byte(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
972 e=e or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
973 local t=self.offset;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
974 local o=t+e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
977 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
978 self.offset=t+e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
979 return a.byte(self.packet,t,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
980 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
984 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
988 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
989 function e:sub(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
990 e=e or 1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
991 local t=a.sub(self.packet,self.offset,self.offset+e-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
992 self.offset=self.offset+e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
993 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
994 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
995 function e:header(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
996 local e=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
997 if not self.active[e]and not t then return nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
998 local e={id=e};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
999 local t,a=self:byte(2);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1000 e.rd=t%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1001 e.tc=t/2%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1002 e.aa=t/4%2;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1003 e.opcode=t/8%16;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1004 e.qr=t/128;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1005 e.rcode=a%16;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1006 e.z=a/16%8;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1007 e.ra=a/128;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1008 e.qdcount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1009 e.ancount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1010 e.nscount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1011 e.arcount=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1012 for a,t in o(e)do e[a]=t-t%1;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1013 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1014 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1017 local e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1020 while e>0 do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1026 self.offset=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1029 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1030 e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1034 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1035 function e:question()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1036 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1037 e.name=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1038 e.type=t.type[self:word()];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1039 e.class=t.class[self:word()];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1040 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1045 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1046 function e:AAAA(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1047 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1053 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1056 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1057 if#t==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1058 a.aaaa=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1059 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1062 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1063 a.aaaa=e:gsub(t[1],"::",1):gsub("^0::","::"):gsub("::0$","::");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1064 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1065 function e:CNAME(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1066 e.cname=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1067 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1068 function e:MX(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1069 e.pref=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1070 e.mx=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1071 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1072 function e:LOC_nibble_power()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1073 local e=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1074 return((e-(e%16))/16)*(10^(e%16));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1075 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1076 function e:LOC(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1077 e.version=self:byte();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1078 if e.version==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1079 e.loc=e.loc or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1080 e.loc.size=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1081 e.loc.horiz_pre=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1082 e.loc.vert_pre=self:LOC_nibble_power();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1083 e.loc.latitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1084 e.loc.longitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1085 e.loc.altitude=self:dword();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1086 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1089 e=e-2147483648;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1097 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1098 function e.LOC_tostring(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1104 (e.loc.altitude-1e7)/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1105 e.loc.size/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1106 e.loc.horiz_pre/100,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1107 e.loc.vert_pre/100
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1110 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1111 function e:NS(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1112 e.ns=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1113 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1114 function e:SOA(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1115 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1116 function e:SRV(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1117 e.srv={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1118 e.srv.priority=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1119 e.srv.weight=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1120 e.srv.port=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1121 e.srv.target=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1122 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1123 function e:PTR(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1124 e.ptr=self:name();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1125 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1126 function e:TXT(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1127 e.txt=self:sub(self:byte());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1128 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1129 function e:rr()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1132 e.name=self:name(self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1133 e.type=t.type[self:word()]or e.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1134 e.class=t.class[self:word()]or e.class;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1135 e.ttl=65536*self:word()+self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1136 e.rdlength=self:word();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1137 if e.ttl<=0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1138 e.tod=self.time+30;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1139 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1140 e.tod=self.time+e.ttl;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1141 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1142 local a=self.offset;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1143 local t=self[t.type[e.type]];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1144 if t then t(self,e);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1145 self.offset=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1146 e.rdata=self:sub(e.rdlength);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1147 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1148 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1149 function e:rrs(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1152 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1153 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1154 function e:decode(t,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1155 self.packet,self.offset=t,1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1156 local t=self:header(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1157 if not t then return nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1158 local t={header=t};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1165 if not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1168 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1169 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1170 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1171 t.answer=self:rrs(t.header.ancount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1172 t.authority=self:rrs(t.header.nscount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1173 t.additional=self:rrs(t.header.arcount);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1174 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1175 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1176 e.delays={1,3};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1177 function e:addnameserver(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1180 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1181 function e:setnameserver(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1182 self.server={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1183 self:addnameserver(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1184 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1189 self:addnameserver(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1190 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1191 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1192 if not self.server or#self.server==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1193 self:addnameserver("208.67.222.222");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1194 self:addnameserver("208.67.220.220");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1195 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1198 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1199 for e in e:lines()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1206 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1207 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1208 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1209 if not self.server or#self.server==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1210 self:addnameserver("127.0.0.1");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1211 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1212 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1215 self.socket=self.socket or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1232 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1233 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1234 function e:voidsocket(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1235 if self.socket[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1236 self.socketset[self.socket[e]]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1237 self.socket[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1238 elseif self.socketset[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1239 self.socket[self.socketset[e]]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1240 self.socketset[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1243 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1244 function e:socket_wrapper_set(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1245 self.socket_wrapper=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1246 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1249 self.socket[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1250 self.socketset[e]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1251 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1252 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1253 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1268 if t=='MX'then self.unsorted[a]=true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1284 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1287 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1288 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1289 function e:purge(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1292 for t,e in o(self.cache or{})do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1293 for t,e in o(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1316 server=self.best_server,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1327 return nil,h;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1342 return self.timeout;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1343 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1346 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1347 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1348 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1349 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1358 e.server=e.server+1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1359 if e.server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1360 e.server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1361 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1362 e.retries=(e.retries or 0)+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1363 if e.retries>=#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1364 a[o]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1367 if t then t:send(e.packet);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1368 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1369 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1370 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1376 self.best_server=self.best_server+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1377 if self.best_server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1378 self.best_server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1379 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1382 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1383 function e:settimeout(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1384 self.timeout=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1385 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1388 t=t or self.socket;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1389 local e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1390 for a,t in o(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1391 if self.socketset[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1392 local t=t:receive();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1393 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1394 e=self:decode(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1395 if e and self.active[e.header.id]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1396 and self.active[e.header.id][e.question.raw]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1397 for a,t in o(e.answer)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1398 self:remember(t,e.question[1].type)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1399 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1400 local t=self.active[e.header.id];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1421 if e and self.active[e.header.id]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1422 and self.active[e.header.id][e.question.raw]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1423 for a,t in o(e.answer)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1424 self:remember(t,e.question[1].type);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1425 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1426 local t=self.active[e.header.id];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1430 local e=e.question[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1438 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1439 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1440 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1441 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1450 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1451 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1452 function e:pulse()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1458 if self.time>=e.retry then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1459 e.server=e.server+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1460 if e.server>#self.server then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1461 e.server=1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1462 e.delay=e.delay+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1463 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1464 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1468 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1469 local t=self.socket[e.server];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1470 if t then t:send(e.packet);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1471 e.retry=self.time+self.delays[e.delay];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1472 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1473 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1474 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1477 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1481 while self:pulse()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1492 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1493 function e:tohostname(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1494 return t.lookup(e:gsub("(%d+)%.(%d+)%.(%d+)%.(%d+)","%4.%3.%2.%1.in-addr.arpa."),"PTR");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1495 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1496 local i={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1497 qr={[0]='query','response'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1498 opcode={[0]='query','inverse query','server status request'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1499 aa={[0]='non-authoritative','authoritative'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1500 tc={[0]='complete','truncated'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1501 rd={[0]='recursion not desired','recursion desired'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1502 ra={[0]='recursion not available','recursion available'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1503 z={[0]='(reserved)'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1504 rcode={[0]='no error','format error','server failure','name error','not implemented'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1505 type=t.type,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1506 class=t.class
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1509 return(i[e]and i[e][t[e]])or'';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1533 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1534 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1535 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1536 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1537 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1543 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1544 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1545 local e=t.resolver();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1546 t._resolver=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1547 function t.lookup(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1548 return e:lookup(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1549 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1550 function t.tohostname(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1551 return e:tohostname(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1552 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1553 function t.purge(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1554 return e:purge(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1555 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1556 function t.peek(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1557 return e:peek(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1558 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1559 function t.query(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1560 return e:query(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1561 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1562 function t.feed(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1563 return e:feed(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1564 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1565 function t.cancel(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1566 return e:cancel(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1567 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1568 function t.settimeout(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1569 return e:settimeout(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1574 function t.socket_wrapper_set(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1575 return e:socket_wrapper_set(...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1576 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1577 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1578 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1579 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1603 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1662 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1676 return _G[e]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1730 local a
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1757 a=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1783 local e={}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1784 e.shutdown=function()end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1787 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1790 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1796 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1797 e.close=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1803 e=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1834 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1837 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1838 e.socket=function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1839 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1840 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1846 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1849 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1853 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1859 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1865 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1866 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1867 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1868 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1904 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1905 e.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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1919 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1922 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1925 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1931 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1934 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1935 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1937 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1938 e.setoption=function(i,a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1939 if t.setoption then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1940 return t:setoption(a,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1941 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1942 return false,"setoption not implemented";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1958 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1959 e.write=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1960 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
1961 B=true
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1962 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1963 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1964 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1970 t=nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1973 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1988 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1995 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1998 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2017 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2018 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2023 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2024 e.socket=function(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2025 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2026 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2030 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2041 if o==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2047 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2056 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2057 e.pause=function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2058 return t:lock_read(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2059 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2060 e.resume=function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2061 return t:lock_read(false);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2062 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2063 e.lock=function(i,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2064 e.lock_read(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2072 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2089 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2099 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2100 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2115 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2116 if f then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2133 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2137 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2138 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2163 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2164 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2171 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2172 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2173 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2182 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2183 )
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2193 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2201 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2234 return e,t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2239 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2258 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2259 return t-1
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2260 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2261 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2267 e:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2271 local i=t.sendbuffer;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2272 function t.sendbuffer()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2301 o="luasec not found"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2302 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2305 return nil,o
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2316 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2317 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2331 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2334 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2340 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2341 a=0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2367 return nil,"invalid settings table"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2388 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2499 return"quitting"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2505 return"select";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2554 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2610 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2611 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2612 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2613 return{
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2632 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2633 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2634 package.preload['util.xmppstream']=(function(...)
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2711 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2712 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2729 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2730 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2788 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2803 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2804 e=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2812 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2813 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2848 return{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2866 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2867 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
2868 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2869 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2887 [" "]="\\20";['"']="\\22";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2888 ["&"]="\\26";["'"]="\\27";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2889 ["/"]="\\2f";[":"]="\\3a";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2890 ["<"]="\\3c";[">"]="\\3e";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2891 ["@"]="\\40";["\\"]="\\5c";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2908 if t and e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2909 return t.."@"..e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2910 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2911 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2920 if not e then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2963 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2964 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2965 return false
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2970 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3001 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3021 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3022 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3023 end;
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3027 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3039 if e~=nil then return e;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3040 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3041 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3042 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3054 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3081 local o={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3082 title=e:get_child_text("title");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3083 instructions=e:get_child_text("instructions");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3092 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3093 o[#o+1]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3102 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3106 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3111 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3112 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3113 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3114 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3115 return new(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3119 if t.title then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3120 e:tag("title"):text(t.title):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3121 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3122 if t.instructions then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3123 e:tag("instructions"):text(t.instructions):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3124 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3134 :up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3151 e:tag("value"):text(t):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3169 e:tag("option",{label=t.label}):tag("value"):text(t.value):up():up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3170 if t.default then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3171 e:tag("value"):text(t.value):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3172 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3173 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3175 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3176 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3177 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3178 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3179 if o.required then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3180 e:tag("required"):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3181 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3182 e:up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3183 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3184 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3185 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3195 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3196 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3199 if t.required then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3200 a[t.name]="Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3201 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3202 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3203 local e=e[t.type];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3213 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3214 e["text-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3215 function(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3216 local t=t:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3217 if t and#t>0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3218 return t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3219 elseif a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3220 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3221 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3222 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3223 e["text-private"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3224 e["text-single"];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3225 e["jid-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3233 elseif o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3234 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3235 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3236 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3237 e["jid-multi"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3238 function(o,i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3239 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3240 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3241 for e in o:childtags("value")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3244 a[#a+1]=o;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3245 if e and not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3246 t[#t+1]=("Invalid JID: "..e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3247 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3248 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3251 elseif i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3252 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3253 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3254 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3259 t[#t+1]=e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3262 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3263 e["text-multi"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3264 function(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3265 local t,a=e["list-multi"](t,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3268 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3269 return t,a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3270 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3271 e["list-single"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3272 e["text-single"];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3273 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3274 ["1"]=true,["true"]=true,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3275 ["0"]=false,["false"]=false,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3276 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3277 e["boolean"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3278 function(t,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3279 local t=t:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3280 local a=a[t~=nil and t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3281 if a~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3282 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3283 elseif t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3284 return nil,"Invalid boolean representation";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3285 elseif o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3286 return nil,"Required value missing";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3287 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3288 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3289 e["hidden"]=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3290 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3291 return e:get_child_text("value");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3292 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3293 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3294 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3314 for t,e in r(e)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3315 if e.name=="identity"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3316 n(a,(e.attr.category or"").."\0"..(e.attr.type or"").."\0"..(e.attr["xml:lang"]or"").."\0"..(e.attr.name or""));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3319 elseif e.name=="x"and e.attr.xmlns=="jabber:x:data"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3322 for a,e in r(e.tags)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3323 if e.name=="field"and e.attr.var then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3324 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3325 for t,e in r(e.tags)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3326 e=#e.tags==0 and e:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3327 if e then n(a,e);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3334 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3335 n(t,e.attr.var);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3336 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3337 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3354 return t,e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3355 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
3356 return _M;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3357 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3377 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3378 error"Not implemented"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3379 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3380 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3381 error"Not implemented"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3384 return e:gsub("[,:;\\]","\\%1"):gsub("\n","\\n");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3387 return e:gsub("\\?[\\nt:;,]",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3388 ["\\\\"]="\\",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3389 ["\\n"]="\n",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3390 ["\\r"]="\r",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3391 ["\\t"]="\t",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3392 ["\\:"]=":",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3393 ["\\;"]=";",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3394 ["\\,"]=",",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3395 [":"]="\29",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3396 [";"]="\30",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3397 [","]="\31",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3398 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3412 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3413 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3414 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3415 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3434 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3435 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3436 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3437 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3453 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3454 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3458 t=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3459 :gsub("\r\n","\n")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3460 :gsub("\n ","")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3463 local e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3498 local a=a:lower();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3499 if(t.TYPE and t.TYPE[a]==true)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3500 or t[a]==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3501 e.TYPE=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3502 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3503 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3504 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3507 if t[a]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3508 if t[a]==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3509 e[a]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3512 e[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3513 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3514 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3515 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3516 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3517 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3522 for t in t:gmatch("\30([^\30]*)")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3523 a(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3524 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3525 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3526 e=s;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3527 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3546 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3550 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3590 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3591 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3592 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3619 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3620 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3621 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3622 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3623 return nil
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3636 if e.attr.xmlns~="vcard-temp"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3637 return nil,"wrong-xmlns";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3638 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3651 VERSION="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3652 FN="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3653 N={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3654 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3655 "FAMILY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3656 "GIVEN",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3657 "MIDDLE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3658 "PREFIX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3659 "SUFFIX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3660 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3661 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3662 NICKNAME="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3663 PHOTO={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3664 props_verbatim={ENCODING={"b"}},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3665 props={"TYPE"},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3666 value="BINVAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3667 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3668 BDAY="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3669 ADR={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3670 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3671 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3672 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3673 "POSTAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3674 "PARCEL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3675 "DOM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3676 "INTL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3677 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3678 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3679 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3680 "POBOX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3681 "EXTADD",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3682 "STREET",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3683 "LOCALITY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3684 "REGION",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3685 "PCODE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3686 "CTRY",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3687 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3688 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3689 LABEL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3690 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3691 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3692 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3693 "POSTAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3694 "PARCEL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3695 "DOM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3696 "INTL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3697 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3698 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3699 value="LINE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3700 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3701 TEL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3702 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3703 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3704 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3705 "VOICE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3706 "FAX",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3707 "PAGER",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3708 "MSG",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3709 "CELL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3710 "VIDEO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3711 "BBS",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3712 "MODEM",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3713 "ISDN",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3714 "PCS",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3715 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3716 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3717 value="NUMBER",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3718 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3719 EMAIL={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3720 types={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3721 "HOME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3722 "WORK",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3723 "INTERNET",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3724 "PREF",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3725 "X400",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3726 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3727 value="USERID",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3728 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3729 JABBERID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3730 MAILER="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3731 TZ="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3732 GEO={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3733 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3734 "LAT",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3735 "LON",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3736 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3737 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3738 TITLE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3739 ROLE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3740 LOGO="copy of PHOTO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3741 AGENT="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3742 ORG={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3743 values={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3744 behaviour="repeat-last",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3745 "ORGNAME",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3746 "ORGUNIT",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3747 }
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3748 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3749 CATEGORIES={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3750 values="KEYWORD",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3751 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3752 NOTE="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3753 PRODID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3754 REV="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3755 SORTSTRING="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3756 SOUND="copy of PHOTO",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3757 UID="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3758 URL="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3759 CLASS={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3760 names={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3761 "PUBLIC",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3762 "PRIVATE",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3763 "CONFIDENTIAL",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3764 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3765 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3766 KEY={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3767 props={"TYPE"},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3768 value="CRED",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3769 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3770 DESC="text",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3785 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3786 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3810 return function(t,e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3837 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3838 e[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3839 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3851 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3864 local e=os.date;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3871 return e("!%Y-%m-%d",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3874 return e("!%Y-%m-%dT%H:%M:%SZ",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3877 return e("!%H:%M:%S",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3880 return e("!%Y%m%dT%H:%M:%S",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4733 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4746 return function(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4747 if t=="PLAIN"and e.username and e.password then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4748 return function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4749 return"success"==coroutine.yield("\0"..e.username.."\0"..e.password);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4750 end,5;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4751 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4752 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4786 local a=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4787 local t="urn:ietf:params:xml:ns:xmpp-tls";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4790 if e.authenticated then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4791 if o:get_child("starttls",t)and e.conn.starttls then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4792 e:debug("Negotiating TLS...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4793 e:send(a.stanza("starttls",{xmlns=t}));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4794 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4795 elseif not e.conn.starttls and not e.secure then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4796 e:warn("SSL libary (LuaSec) not loaded, so TLS not available");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4797 elseif not e.secure then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4798 e:debug("Server doesn't offer TLS :(");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4799 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4802 if t.name=="proceed"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4805 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4806 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4807 local function a(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4808 if t=="ssl-handshake-complete"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4809 e.secure=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4810 e:debug("Re-opening stream...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4811 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4812 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4816 e:hook("status",a,400);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4817 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4818 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4819 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4837 if e.authenticated then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4843 for t in t:childtags("mechanism")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4844 t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4854 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4855 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4859 table.insert(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4860 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4861 if not t[1]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4862 e:event("authentication-failure",{condition="no-supported-sasl-mechanisms"});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4863 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4864 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4874 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4875 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4876 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4879 if t.name=="failure"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4880 local a=t.tags[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4881 local t=t:get_child_text("text");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4882 e:event("authentication-failure",{condition=a.name,text=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4883 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4884 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4889 e:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4890 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4891 elseif t==true then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4892 e:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4893 e.authenticated=true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4894 e:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4897 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4898 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4902 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4903 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4904 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4919 local a="urn:ietf:params:xml:ns:xmpp-bind";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4922 if e.bound then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4923 e:debug("Binding resource...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4924 e:send_iq(t.iq({type="set"}):tag("bind",{xmlns=a}):tag("resource"):text(e.resource),
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4925 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4926 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4927 local t=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4928 :get_child("bind",a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4931 e.jid,e.bound=t,true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4932 e:event("bind-success",{jid=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4933 elseif t.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4937 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4938 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4941 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4942 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4943 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4965 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4966 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4967 e:event("session-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4971 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4972 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4973 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4979 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4980 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4981 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5003 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5004 local t={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5005 username=e.username;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5008 digest=false,sequence=false,token=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5018 elseif i==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5019 local t="feature-not-implemented";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5020 e:event("authentication-failure",{condition=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5021 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5022 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5023 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5024 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5025 for t,e in pairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5032 if a.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5033 e.resource=t.resource;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5034 e.jid=t.username.."@"..e.host.."/"..t.resource;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5035 e:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5036 e:event("bind-success",e.jid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5037 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5038 local a,t,a=a:get_error();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5039 e:event("authentication-failure",{condition=t});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5040 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5041 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5046 :tag("query",{xmlns="jabber:iq:auth"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5052 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5053 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5076 o:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5077 o:error("Failed to create zlib.deflate filter: %s",tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5078 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5079 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5080 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5086 o:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5087 o:error("Failed to create zlib.inflate filter: %s",tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5088 return
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5089 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5090 return e
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5093 function e:send(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5094 local i,o,n=pcall(o,tostring(i),'sync');
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5095 if i==false then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5096 e:close({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5097 condition="undefined-condition";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5100 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5101 e:warn("Compressed send failed: %s",tostring(o));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5102 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5103 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5104 e.conn:write(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5105 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5106 end
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5113 e:close({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5114 condition="undefined-condition";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5117 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5118 stream:warn("%s",tostring(o));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5119 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5122 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5126 if not e.compressed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5127 local o=o:child_with_name("compression");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5128 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5129 for o in o:children()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5130 local o=o[1]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5133 e:debug("Enabled compression using zlib.")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5134 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5135 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5136 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5137 session:debug("Remote server supports no compression algorithm we support.")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5138 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5139 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5150 e.compressed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5153 e:warn("Failed to establish compression");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5154 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5158 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5159 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5197 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5202 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5206 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5207 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5208 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5209 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5210 local function h()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5211 e:debug("smacks: connection lost");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5212 e.stream_management_supported=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5213 if e.resumption_token then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5214 e:debug("smacks: have resumption token, reconnecting in 1s...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5217 e:connect(e.connect_host or e.host,e.connect_port or 5222);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5218 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5219 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5220 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5223 e.resumption_token=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5224 e:unhook("disconnected",h);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5235 table.remove(t,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5246 e:hook("disconnected",h,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5253 table.remove(t,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5257 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5258 for a=1,#t do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5259 e:send(t[a]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5260 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5261 t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5262 e:debug("Resumed successfully");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5263 e:event("resumed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5269 if not e.smacks then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5279 e.stream_management_supported=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5284 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5287 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5288 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5289 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5292 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5293 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5306 local t=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5307 function t.plugins.keepalive(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5308 e.keepalive_timeout=e.keepalive_timeout or 300;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5309 t.add_task(e.keepalive_timeout,function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5310 e.conn:write(" ");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5311 return e.keepalive_timeout;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5312 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5313 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5314 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5335 function a.plugins.disco(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5345 end,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5346 };
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5351 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5352 end,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5353 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5354 e.disco={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5355 cache={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5356 info=setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5357 [false]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5358 identities={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5359 {category='client',type='pc',name='Verse'},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5360 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5364 [o]=true,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5365 },
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5369 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5370 e.caps={}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5389 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5390 setmetatable(e.caps,{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5393 e.caps.hash=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5396 hash='sha-1',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5397 node=e.caps.node,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5398 ver=t
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5399 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5400 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5404 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5405 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5406 function e:add_identity(a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5407 local t=self.disco.info[t or false].identities;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5408 t[#t+1]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5409 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5410 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5411 function e:add_disco_feature(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5412 local t=t.var or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5413 self.disco.info[a or false].features[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5414 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5415 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5416 function e:remove_disco_feature(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5417 local t=t.var or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5418 self.disco.info[a or false].features[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5419 e:resend_presence();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5420 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5421 function e:add_disco_item(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5422 local e=self.disco.items[e or false];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5423 e[#e+1]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5424 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5425 function e:remove_disco_item(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5426 local e=self.disco.items[e or false];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5427 for t=#e,1,-1 do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5428 if e[t]==a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5429 table.remove(e,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5430 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5431 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5435 if not o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5436 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5444 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5445 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5446 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5447 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5448 function e:jid_supports(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5449 local e=self.disco.cache[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5450 if not e or not e.features then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5451 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5452 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5453 return e.features[t]or false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5456 local e=self.disco.cache[self.host];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5457 if not(e)or not(e.items)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5458 return nil,"no-cache";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5459 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5460 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5463 table.insert(t,e.jid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5464 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5465 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5466 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5467 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5468 function e:disco_local_services(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5469 self:disco_items(self.host,nil,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5470 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5471 return a({});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5472 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5473 local e=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5474 local function o()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5475 e=e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5476 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5477 return a(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5478 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5479 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5480 for a,t in ipairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5481 if t.jid then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5482 e=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5483 self:disco_info(t.jid,nil,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5484 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5485 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5486 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5487 return a(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5488 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5489 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5490 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5491 function e:disco_info(e,t,s)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5502 elseif e.name=="feature"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5503 a[e.attr.var]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5504 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5505 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5506 if not self.disco.cache[e]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5507 self.disco.cache[e]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5508 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5509 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5510 if not self.disco.cache[e].nodes[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5511 self.disco.cache[e].nodes[t]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5514 self.disco.cache[e].nodes[t].features=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5517 self.disco.cache[e].features=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5518 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5519 return s(self.disco.cache[e]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5520 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5521 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5536 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5537 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5538 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5539 if not self.disco.cache[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5540 self.disco.cache[t]={nodes={}};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5551 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5558 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5559 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5560 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5568 node=t.attr.node
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5569 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5570 for a=1,#n do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5571 t:tag('item',n[a]):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5572 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5573 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5574 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5575 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5576 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5577 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5578 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5579 if t then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5599 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5600 e:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5601 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5602 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5603 end,50);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5606 t:reset():add_child(e:caps()):reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5607 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5608 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5609 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5610 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5623 local o=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5624 local a="jabber:iq:version";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5625 local function i(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5626 e.name=t.name;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5627 e.version=t.version;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5628 e.platform=t.platform;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5629 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5630 function o.plugins.version(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5631 e.version={set=i};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5632 e:hook("iq/"..a,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5633 if t.attr.type~="get"then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5634 local t=o.reply(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5635 :tag("query",{xmlns=a});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5636 if e.version.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5637 t:tag("name"):text(tostring(e.version.name)):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5638 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5639 if e.version.version then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5640 t:tag("version"):text(tostring(e.version.version)):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5641 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5642 if e.version.platform then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5643 t:tag("os"):text(e.version.platform);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5644 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5645 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5646 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5651 :tag("query",{xmlns=a}),
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5652 function(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5653 if o.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5657 local e=e and e:get_child_text("os");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5661 platform=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5662 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5665 t({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5670 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5671 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5672 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5673 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5674 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5675 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5676 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5696 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5701 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5702 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5705 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5709 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5710 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5711 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5712 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5729 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5736 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5737 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5738 end);
88
98b4cf14960b verse.lua: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 12
diff changeset
5739 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5748 seconds=e or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5749 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5757 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5758 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5759 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5760 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5761 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5762 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5763 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5779 e.blocking={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5783 :tag("item",{jid=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5784 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5785 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5786 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5787 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5791 :tag("item",{jid=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5792 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5793 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5794 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5795 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5799 ,function()return t and t(true);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5800 ,function()return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5801 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5802 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5808 if not a then return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5809 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5810 for t in a:childtags()do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5811 e[#e+1]=t.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5812 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5813 return t and t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5814 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5815 ,function(e)return t and t(false);end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5816 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5817 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5818 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5819 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5837 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5838 t.__index=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5839 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5842 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5843 e:add_disco_feature(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5850 stream=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5851 },t));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5852 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5853 function e:register_jingle_transport(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5854 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5855 function e:register_jingle_content_type(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5864 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5869 e:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5870 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5874 role="receiver";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5875 peer=n.attr.from;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5876 sid=l;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5877 stream=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5897 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5898 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5899 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5907 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5914 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5917 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5918 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5923 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5924 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5925 function t:handle_command(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5926 local t=a.attr.action;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5927 e:debug("Handling Jingle command: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5928 if t=="session-terminate"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5929 self:destroy();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5930 elseif t=="session-accept"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5931 self:handle_accepted(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5932 elseif t=="transport-info"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5933 e:debug("Handling transport-info");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5934 self.transport:info_received(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5935 elseif t=="transport-replace"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5936 e:error("Peer wanted to swap transport, not implemented");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5937 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5938 e:warn("Unhandled Jingle command: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5939 return nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5940 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5941 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5945 :tag("jingle",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5946 xmlns=i,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5949 initiator=self.role=="initiator"and self.stream.jid or nil,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5960 :tag("jingle",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5961 xmlns=i,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5962 sid=self.sid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5963 action="session-accept",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5964 responder=e.jid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5965 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5975 e:error("session-accept rejected: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5976 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5982 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5983 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5984 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5985 e:hook("iq/"..i,u);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5986 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5990 :tag("jingle",{xmlns=i,action="session-initiate",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5991 initiator=self.stream.jid,sid=self.sid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5994 if not t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5995 return false,"Unknown content type";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5996 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5997 e:add_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5998 local t=self.stream:event("jingle/transport/".."urn:xmpp:jingle:transports:s5b:1",self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5999 self.transport=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6000 e:add_child(t:generate_initiate());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6001 self.stream:debug("Hooking %s","jingle/"..self.sid);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6002 self.stream:hook("jingle/"..self.sid,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6003 if e.attr.from~=self.peer then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6004 return false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6005 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6006 local e=e:get_child("jingle",i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6007 return self:handle_command(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6008 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6009 self.stream:send_iq(e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6010 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6014 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6015 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6016 self.state="pending";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6017 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6020 self:send_command("session-terminate",e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6021 self.state="terminated";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6022 self.transport:disconnect();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6023 self:destroy();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6024 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6025 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6026 function t:destroy()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6027 self:event("terminated");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6028 self.stream:unhook("jingle/"..self.sid,self.handle_command);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6029 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6030 function t:handle_accepted(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6031 local e=e:child_with_name("transport");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6032 self.transport:handle_accepted(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6033 self.transport:connect(function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6034 self.stream:debug("CONNECTED (initiator)!")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6035 self.state="active";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6036 self:event("connected",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6037 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6038 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6039 function t:set_source(a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6040 local function t()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6041 local e,i=a();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6042 if e and e~=""then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6043 self.transport.conn:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6044 elseif e==""then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6045 return t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6046 elseif e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6047 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6048 self:terminate();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6049 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6050 self.transport.conn:unhook("drained",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6051 a=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6052 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6053 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6054 self.transport.conn:hook("drained",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6055 t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6056 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6057 function t:set_sink(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6058 self.transport.conn:hook("incoming-raw",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6059 self.transport.conn:hook("disconnected",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6060 self.stream:debug("Closing sink...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6061 local e=e.reason;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6062 if e=="closed"then e=nil;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6063 t(nil,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6064 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6065 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6066 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6089 if e and e.save_file then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6092 self.jingle:set_sink(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6093 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6094 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6095 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6122 local e,a=io.open(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6131 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6134 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6135 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6136 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6137 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6138 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6157 local function a()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6158 e:unhook("connected",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6159 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6163 if t:sub(1,2)~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6164 return e:event("error","connection-failure");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6165 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6166 e:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6167 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6171 if a~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6172 local t="version-mismatch";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6173 if a:sub(1,1)=="\005"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6174 t="authentication-failure";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6175 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6176 return e:event("error",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6177 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6180 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6181 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6182 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6184 e:send("\005\001\000");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6188 streamhosts=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6189 current_host=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6190 });
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6194 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6195 if e.current_host<#e.streamhosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6196 e.current_host=e.current_host+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6199 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6200 e.streamhosts[e.current_host].port
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6203 e:debug("Error connecting to proxy (%s:%s): %s",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6204 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6207 );
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6208 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6209 e:debug("Connecting...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6212 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6213 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6216 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6217 e:hook("disconnected",t,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6218 e:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6221 end,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6222 t();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6223 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6226 e:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6227 e:add_disco_feature(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6233 mode="tcp",sid=self.s5b_sid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6239 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6246 self.s5b_mode=e.attr.mode or"tcp";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6247 self.s5b_sid=e.attr.sid or self.jingle.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6250 type=e.attr.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6251 jid=e.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6252 host=e.attr.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6253 port=tonumber(e.attr.port)or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6254 priority=tonumber(e.attr.priority)or 0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6255 cid=e.attr.cid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6256 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6278 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6279 e:warn("Actually, I'm going to wait for my peer to tell me its streamhost...");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6280 self.onconnect_callback=i;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6281 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6294 :tag("activate"):text(self.jingle.peer),function(i)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6299 self.conn=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6300 self.onconnect_callback(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6301 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6302 self.jingle.stream:error("Failed to activate bytestream");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6303 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6304 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6305 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6313 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6314 elseif i:get_child("activated")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6315 self.onconnect_callback(self.conn);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6316 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6319 if self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6320 self.conn:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6321 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6326 e:hook("jingle/transport/"..o,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6327 return setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6328 role=e.role,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6329 peer=e.peer,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6330 stream=e.stream,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6331 jingle=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6332 },t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6333 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6334 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6335 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6357 t.proxy65.available_streamhosts={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6364 e=e-1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6367 :get_child("streamhost").attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6368 t.proxy65.available_streamhosts[e.jid]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6369 jid=e.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6370 host=e.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6371 port=tonumber(e.port);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6372 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6373 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6374 if e==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6375 t:event("proxy65/discovered-proxies",t.proxy65.available_streamhosts);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6376 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6377 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6378 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6383 streamhosts={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6384 current_host=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6387 if t.name=="streamhost"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6388 table.insert(e.streamhosts,t.attr);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6389 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6392 if e.current_host<#e.streamhosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6393 e.current_host=e.current_host+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6394 e:connect(
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6395 e.streamhosts[e.current_host].host,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6396 e.streamhosts[e.current_host].port
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6399 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6400 end
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6403 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6410 :tag("streamhost-used",{jid=e.streamhosts[e.current_host].jid});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6411 t:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6414 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6415 function e:refuse()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6416 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6417 t:event("proxy65/request",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6418 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6441 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6442 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6443 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6449 :tag("activate"):text(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6450 self.stream:send_iq(t,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6451 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6452 e:event("connected",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6453 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6454 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6455 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6459 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6460 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6461 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6467 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6468 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6469 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6470 e:unhook("incoming-raw",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6471 if t:sub(1,2)~="\005\000"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6472 return e:event("error","connection-failure");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6473 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6474 e:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6475 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6487 e:hook("incoming-raw",o,100);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6488 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6492 e:send("\005\001\000");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6493 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6494 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6507 local e=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6510 local n="urn:xmpp:jingle:transports:ibb:1";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6511 local o="http://jabber.org/protocol/ibb";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6512 assert(i.encode("This is a test.")=="VGhpcyBpcyBhIHRlc3Qu","Base64 encoding failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6513 assert(i.decode("VGhpcyBpcyBhIHRlc3Qu")=="This is a test.","Base64 decoding failed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6514 local t=table.concat
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6519 t=e.eventable(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6520 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6527 self.iseq=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6528 self.oseq=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6529 local e=function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6530 return self:feed(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6531 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6532 self.feeder=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6538 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6539 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6540 function a:open(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6541 self.stream:send_iq(e.iq{to=self.peer,type="set"}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6542 :tag("open",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6543 xmlns=o,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6544 ["block-size"]=self.block,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6545 sid=self.sid,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6546 stanza=self.stanza
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6547 })
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6548 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6549 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6550 if e.attr.type~="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6551 t(true)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6552 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6553 t(false,e:get_error())
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6554 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6555 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6556 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6557 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6558 function a:send(n)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6559 local a=self.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6560 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6561 if a=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6562 t=e.iq{type="set",to=self.peer}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6563 elseif a=="message"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6564 t=e.message{to=self.peer}
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6565 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6566 local e=self.oseq;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6567 self.oseq=e+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6568 t:tag("data",{xmlns=o,sid=self.sid,seq=e})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6569 :text(i.encode(n));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6570 if a=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6571 self.stream:send_iq(t,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6572 self:event(e.attr.type=="result"and"drained"or"error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6573 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6574 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6575 stream:send(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6576 self:event("drained");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6577 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6578 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6579 function a:feed(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6580 if t.attr.from~=self.peer then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6581 local a=t[1];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6582 if a.attr.sid~=self.sid then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6583 local n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6584 if a.name=="open"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6585 self:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6586 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6587 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6588 elseif a.name=="data"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6589 local o=t:get_child_text("data",o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6590 local a=tonumber(a.attr.seq);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6591 local n=self.iseq;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6592 if o and a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6593 if a~=n then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6594 self.stream:send(e.error_reply(t,"cancel","not-acceptable","Wrong sequence. Packet lost?"))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6595 self:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6596 self:event("error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6597 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6598 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6599 self.iseq=a+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6600 local a=i.decode(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6601 if self.stanza=="iq"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6602 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6603 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6604 self:event("incoming-raw",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6605 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6606 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6607 elseif a.name=="close"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6608 self.stream:send(e.reply(t))
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6609 self:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6610 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6611 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6612 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6613 function a:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6614 self.stream:unhook("iq/"..o,self.feeder)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6615 self:event("disconnected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6616 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6617 function e.plugins.jingle_ibb(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6618 a:hook("ready",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6619 a:add_disco_feature(n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6620 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6621 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6624 e.sid=self.sid or e.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6625 e.stanza=self.stanza or e.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6626 e.block=self.block or e.block;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6627 e:initiate(self.peer,self.sid,self.stanza);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6628 self.conn=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6629 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6630 function t:generate_initiate()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6633 self.sid=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6634 self.stanza='iq';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6635 self.block=2048;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6636 local e=e.stanza("transport",{xmlns=n,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6637 sid=self.sid,stanza=self.stanza,["block-size"]=self.block});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6638 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6639 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6640 function t:generate_accept(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6641 print("ibb:generate_accept() as "..self.role);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6642 local e=t.attr;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6643 self.sid=e.sid or self.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6644 self.stanza=e.stanza or self.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6645 self.block=e["block-size"]or self.block;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6646 self:_setup();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6647 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6648 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6649 function t:connect(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6650 if not self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6651 self:_setup();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6652 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6653 local e=self.conn;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6654 print("ibb:connect() as "..self.role);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6655 if self.role=="initiator"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6656 e:open(function(a,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6657 assert(a,table.concat({...},", "));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6658 t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6659 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6660 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6661 t(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6662 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6663 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6664 function t:info_received(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6665 print("ibb:info_received()");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6666 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6667 function t:disconnect()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6668 if self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6669 self.conn:close()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6670 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6671 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6672 function t:handle_accepted(e)end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6673 local t={__index=t};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6674 a:hook("jingle/transport/"..n,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6675 return setmetatable({
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6676 role=e.role,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6677 peer=e.peer,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6678 stream=e.stream,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6679 jingle=e,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6680 },t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6681 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6682 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6683 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6684 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6708 local t=t:get_child("items");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6711 for t in t:childtags("item")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6715 item=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6716 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6717 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6718 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6719 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6720 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6721 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6731 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6732 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6733 local t={__index=a};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6734 function e:service(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6735 return setmetatable({stream=self.stream,service=e},t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6743 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6744 function a:subscriptions(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6749 local e=e and e:get_child("subscriptions");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6750 local o={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6751 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6752 for t in e:childtags("subscription")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6753 local e=self:node(t.attr.node)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6754 e.subscription=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6757 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6758 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6759 a(o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6762 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6763 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6782 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6783 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6784 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6785 function a:nodes(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6786 self.stream:disco_items(self.service,nil,function(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6787 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6788 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6789 e[t]=self:node(e[t].node);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6790 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6791 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6792 a(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6793 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6794 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6795 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6796 local o={__index=e};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6797 function a:node(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6798 return setmetatable({stream=self.stream,service=self.service,node=e},o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6801 local t=self:service(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6802 return e and t:node(e)or t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6803 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6804 function e:hook(a,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6805 self._hooks=self._hooks or setmetatable({},{__mode='kv'});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6806 local function t(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6807 if(not e.service or e.from==self.service)and e.node==self.node then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6808 return a(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6809 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6810 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6811 self._hooks[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6812 self.stream:hook("pubsub/event",t,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6813 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6814 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6815 function e:unhook(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6816 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6817 local e=self._hooks[e];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6818 self.stream:unhook("pubsub/event",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6819 elseif self._hooks then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6820 for e in pairs(self._hooks)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6821 self.stream:unhook("pubsub/event",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6822 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6823 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6827 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6830 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6831 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6832 function e:configure(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6833 if e~=nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6834 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6835 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6836 self.stream:send_iq(t("set",self.service,nil,e==nil and"default"or"configure",self.node),a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6840 error("Node configuration is not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6849 error("Subscription configuration is not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6853 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6854 function e:subscription(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6855 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6857 function e:affiliation(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6858 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6859 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6860 function e:unsubscribe(e,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6861 e=e or self.subscribed_jid or self.stream.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6862 self.stream:send_iq(t("set",self.service,nil,"unsubscribe",self.node,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6863 ,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6864 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6865 function e:configure_subscription(e,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6866 error("Not implemented yet.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6867 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6868 function e:items(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6869 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6870 self.stream:send_iq(t("get",self.service,nil,"items",self.node)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6871 ,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6872 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6873 self.stream:disco_items(self.service,self.node,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6874 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6888 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6889 function e:delete(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6892 ,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6893 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6894 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6907 local e=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6908 local t="http://jabber.org/protocol/pubsub";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6909 local t=t.."#event";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6910 function e.plugins.pep(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6911 e:add_plugin("disco");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6912 e:add_plugin("pubsub");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6913 e.pep={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6914 e:hook("pubsub/event",function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6915 return e:event("pep/"..t.node,{from=t.from,item=t.item.tags[1]});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6916 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6917 function e:hook_pep(t,i,o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6918 local a=e.events._handlers["pep/"..t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6919 if not(a)or#a==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6920 e:add_disco_feature(t.."+notify");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6921 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6922 e:hook("pep/"..t,i,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6923 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6924 function e:unhook_pep(t,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6925 e:unhook("pep/"..t,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6926 local a=e.events._handlers["pep/"..t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6927 if not(a)or#a==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6928 e:remove_disco_feature(t.."+notify");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6929 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6930 end
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6933 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6934 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6935 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6948 local o=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6949 local n=require"lib.adhoc";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6950 local t="http://jabber.org/protocol/commands";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6951 local s="jabber:x:data";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6952 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6953 a.__index=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6954 local i={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6955 function o.plugins.adhoc(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6956 e:add_plugin("disco");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6957 e:add_disco_feature(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6964 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6967 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6973 },a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6974 return e:execute();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6977 if not(e)or e=="user"then return true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6978 if type(e)=="function"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6979 return e(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6980 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6981 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6982 function e:add_adhoc_command(o,a,h,s)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6983 i[a]=n.new(o,a,h,s);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6984 e:add_disco_item({jid=e.jid,node=a,name=o},t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6985 return i[a];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6995 :tag("note",{type="error"}):text("You don't have permission to execute this command")));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6996 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6999 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7000 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7005 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7006 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7007 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7008 function a:_process_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7009 if e.attr.type=="error"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7010 self.status="canceled";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7011 self.callback(self,{});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7012 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7013 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7014 local e=e:get_child("command",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7015 self.status=e.attr.status;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7016 self.sessionid=e.attr.sessionid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7017 self.form=e:get_child("x",s);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7018 self.note=e:get_child("note");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7019 self.callback(self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7020 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7021 function a:execute()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7022 local e=o.iq({to=self.jid,type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7023 :tag("command",{xmlns=t,node=self.command});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7024 self.stream:send_iq(e,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7025 self:_process_response(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7026 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7027 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7030 :tag("command",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7031 xmlns=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7032 node=self.command,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7033 sessionid=self.sessionid
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7037 self:_process_response(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7038 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7039 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7040 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7059 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7082 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7083 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7084 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7105 t:add_child(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7108 :add_child(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7109 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7110 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7111 self:send_iq(t,n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7121 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7122 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7123 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7124 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7125 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7126 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7146 local e={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7147 items={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7148 ver="";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7149 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7150 t.roster=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7154 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7155 end);
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7158 for a,t in pairs(t)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7159 if a~="groups"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7160 e.attr[a]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7161 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7162 for a=1,#t do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7163 e:tag("group"):text(t[a]):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7164 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7165 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7166 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7167 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7174 if t~="xmlns"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7175 e[t]=a
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7176 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7180 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7181 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7182 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7183 function e:load(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7184 e.ver,e.items=t.ver,t.items;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7185 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7186 function e:dump()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7187 return{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7188 ver=e.ver,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7189 items=e.items,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7190 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7197 t:send_iq(a,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7198 if not e then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7199 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7200 e(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7203 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7204 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7213 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7214 if not n then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7215 if e.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7216 n(true);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7219 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7220 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7224 e.items[t.jid]=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7227 local a=e.items[t];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7228 e.items[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7229 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7233 function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7234 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7235 local t=t:get_child("query",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7236 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7237 e.items={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7240 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7241 e.ver=t.attr.ver or"";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7246 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7247 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7271 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7272 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7273 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7274 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7275 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7295 :tag("username"):text(e.username):up()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7296 :tag("password"):text(e.password):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7297 if e.register_email then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7298 t:tag("email"):text(e.register_email):up();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7299 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7300 e:send_iq(t,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7301 if t.attr.type=="result"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7302 e:event("registration-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7307 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7308 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7309 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7310 e:debug("In-band registration not offered by server");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7311 e:event("registration-failure",{condition="service-unavailable"});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7312 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7313 e:unhook("stream-features",a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7314 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7315 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7316 e:hook("stream-features",a,310);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7317 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7318 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7319 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7333 local n=require"util.jid";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7334 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7335 a.__index=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7336 local h="urn:xmpp:delay";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7337 local s="http://jabber.org/protocol/muc";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7338 function i.plugins.groupchat(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7339 o:add_plugin("presence")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7340 o.rooms={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7341 o:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7342 local a=n.bare(e.attr.from);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7343 if not a then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7344 local t=o.rooms[a]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7345 if not t and e.attr.to and a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7346 t=o.rooms[e.attr.to.." "..a]
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7347 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7348 if t and t.opts.source and e.attr.to~=t.opts.source then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7353 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7354 room_jid=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7358 body=n;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7361 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7362 local t=t:event(e.name,a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7363 return t or(e.name=="message")or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7364 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7365 end,500);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7366 function o:join_room(n,h,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7367 if not h then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7368 return false,"no nickname supplied"
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7369 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7370 t=t or{};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7371 local e=setmetatable(i.eventable{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7372 stream=o,jid=n,nick=h,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7373 subject=nil,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7374 occupants={},
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7375 opts=t,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7376 },a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7377 if t.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7378 self.rooms[t.source.." "..n]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7379 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7380 self.rooms[n]=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7381 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7382 local a=e.occupants;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7383 e:hook("presence",function(o)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7384 local t=o.nick or h;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7385 if not a[t]and o.stanza.attr.type~="unavailable"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7386 a[t]={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7387 nick=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7388 jid=o.stanza.attr.from;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7389 presence=o.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7390 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7391 local o=o.stanza:get_child("x",s.."#user");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7392 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7393 local e=o:get_child("item");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7394 if e and e.attr then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7395 a[t].real_jid=e.attr.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7396 a[t].affiliation=e.attr.affiliation;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7397 a[t].role=e.attr.role;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7398 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7399 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7400 if t==e.nick then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7401 e.stream:event("groupchat/joined",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7402 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7403 e:event("occupant-joined",a[t]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7404 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7405 elseif a[t]and o.stanza.attr.type=="unavailable"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7406 if t==e.nick then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7407 e.stream:event("groupchat/left",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7408 if e.opts.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7409 self.rooms[e.opts.source.." "..n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7410 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7411 self.rooms[n]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7412 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7413 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7414 a[t].presence=o.stanza;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7415 e:event("occupant-left",a[t]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7416 a[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7417 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7418 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7419 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7420 e:hook("message",function(a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7421 local t=a.stanza:get_child_text("subject");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7422 if not t then return end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7423 t=#t>0 and t or nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7424 if t~=e.subject then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7425 local o=e.subject;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7426 e.subject=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7427 return e:event("subject-changed",{from=o,to=t,by=a.sender,event=a});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7428 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7429 end,2e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7430 local t=i.presence():tag("x",{xmlns=s}):reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7431 self:event("pre-groupchat/joining",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7432 e:send(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7433 self:event("groupchat/joining",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7434 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7435 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7436 o:hook("presence-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7437 if not e.attr.to then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7438 for a,t in pairs(o.rooms)do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7439 t:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7440 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7441 e.attr.to=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7442 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7443 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7444 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7445 function a:send(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7446 if e.name=="message"and not e.attr.type then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7447 e.attr.type="groupchat";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7448 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7449 if e.name=="presence"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7450 e.attr.to=self.jid.."/"..self.nick;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7451 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7452 if e.attr.type=="groupchat"or not e.attr.to then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7453 e.attr.to=self.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7454 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7455 if self.opts.source then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7456 e.attr.from=self.opts.source
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7457 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7458 self.stream:send(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7459 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7460 function a:send_message(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7461 self:send(i.message():tag("body"):text(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7462 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7463 function a:set_subject(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7464 self:send(i.message():tag("subject"):text(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7475 self:send(i.iq({type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7485 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7486 function a:kick(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7487 self:set_role(e,"none",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7491 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7492 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7505 local i=require"verse";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7518 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7519 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7520 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7521 function a:set_vcard(e,n)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7522 local t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7523 if type(e)=="table"and e.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7524 t=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7525 elseif type(e)=="string"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7526 t=o.to_xep54(o.from_text(e)[1]);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7527 elseif type(e)=="table"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7528 t=o.to_xep54(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7529 error("Converting a table to vCard not implemented")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7530 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7531 if not t then return false end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7532 a:debug("setting vcard to %s",tostring(t));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7533 a:send_iq(i.iq({type="set"})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7534 :add_child(t),n);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7535 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7536 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7537 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7553 local e,t=pcall(function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7554 local e=require("util.encodings").base64.decode;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7555 assert(e("SGVsbG8=")=="Hello")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7556 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7557 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7558 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7559 e,t=pcall(function()return require("mime").unb64;end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7560 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7561 error("Could not find a base64 decoder")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7562 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7563 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7564 local h=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7565 function n.plugins.vcard_update(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7566 e:add_plugin("vcard");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7567 e:add_plugin("presence");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7574 break
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7575 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7579 t=n.stanza("x",{xmlns=i})
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7580 :tag("photo"):text(a);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7581 e:resend_presence()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7582 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7583 t=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7584 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7585 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7588 if a then return;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7589 a=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7590 e:get_vcard(nil,function(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7593 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7594 e:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7595 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7596 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7597 end,3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7598 e:hook("presence-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7599 if t and not e:get_child("x",i)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7600 e:add_child(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7601 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7602 end,10);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7603 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7604 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7624 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7625 t.enabled=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7626 e.carbons=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7630 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7631 local e=e.attr.type=="result";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7632 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7633 t.enabled=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7634 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7635 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7636 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7637 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7638 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7639 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7643 ,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7644 local e=e.attr.type=="result";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7645 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7646 t.enabled=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7647 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7648 if i then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7649 i(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7650 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7651 end or nil);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7652 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7653 local i;
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7662 local a=t and t:get_child("message","jabber:client");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7663 local t=t:get_child("delay","urn:xmpp:delay");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7666 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7667 return e:event("carbon",{
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7668 dir=o,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7671 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7672 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7673 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7674 end,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7675 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7676 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7702 {name="with";type="jid-single";};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7703 {name="start";type="text-single"};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7704 {name="end";type="text-single";};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7744 return true
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7745 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7746 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
7747 local n={
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7748 always=true,[true]="always",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7749 never=false,[false]="never",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7750 roster="roster",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7753 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7754 local a=t.attr.default;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7757 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7758 local a=t:get_child("always");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7759 if a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7760 for t in a:childtags("jid")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7761 local t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7762 e[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7763 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7764 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7765 local t=t:get_child("never");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7766 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7767 for t in t:childtags("jid")do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7768 local t=t:get_text();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7769 e[t]=false;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7770 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7771 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7772 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7790 function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7796 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7797 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7801 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7802 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7825 local function e(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7826 return e and(e:gsub("%W",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7827 if e~=" "then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7828 return t("%%%02x",e:byte());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7829 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7830 return"+";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7831 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7832 end));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7835 local a={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7843 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8106 if e.callback then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8107 e.callback(t or"connection-closed",0,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8108 e.callback=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8122 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8123 local function t()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8124 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8135 return nil,"invalid-url";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8136 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8137 if not e.path then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8138 e.path="/";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8151 ["User-Agent"]="Prosody XMPP Server";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8152 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8155 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8156 if t then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8207 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8224 local e=setmetatable({},{__index=verse.stream_mt});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8229 function verse.new_bosh(a,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8230 local t={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8231 bosh_conn_pool={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8232 bosh_waiting_requests={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8233 bosh_rid=math.random(1,999999);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8234 bosh_outgoing_buffer={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8235 bosh_url=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8236 conn={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8237 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8238 function t:reopen()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8239 self.bosh_need_restart=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8240 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8241 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8242 local t=verse.new(a,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8243 return setmetatable(t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8244 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8245 function e:connect()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8246 self:_send_session_request();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8247 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8248 function e:send(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8251 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8252 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8253 function e:flush()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8254 if self.connected
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8255 and#self.bosh_waiting_requests<self.bosh_max_requests
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8256 and(#self.bosh_waiting_requests==0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8257 or#self.bosh_outgoing_buffer>0
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8258 or self.bosh_need_restart)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8267 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8268 self:debug("Decided not to flush.");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8269 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8273 if e~=0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8276 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8277 local e=os.time();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8278 if not self.inactive_since then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8279 self.inactive_since=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8280 elseif e-self.inactive_since>self.bosh_max_inactivity then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8281 return self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8282 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8291 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8292 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8293 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8294 self:_make_request(i);
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8295 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8296 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8297 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8298 table.insert(self.bosh_waiting_requests,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8299 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8300 self:warn("Request failed instantly: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8301 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8302 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8303 function e:_disconnected()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8304 self.connected=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8305 self:event("disconnected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8306 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8307 function e:_send_session_request()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8308 local e=self:_make_body();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8309 e.attr.hold="1";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8310 e.attr.wait="60";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8311 e.attr["xml:lang"]="en";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8312 e.attr.ver="1.6";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8313 e.attr.from=self.jid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8314 e.attr.to=self.host;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8317 if t==0 then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8318 return self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8319 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8320 local e=self:_parse_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8321 if not e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8322 self:warn("Invalid session creation response");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8323 self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8324 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8325 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8326 self.bosh_sid=e.attr.sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8327 self.bosh_wait=tonumber(e.attr.wait);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8328 self.bosh_hold=tonumber(e.attr.hold);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8329 self.bosh_max_inactivity=tonumber(e.attr.inactivity);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8330 self.bosh_max_requests=tonumber(e.attr.requests)or self.bosh_hold;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8331 self.connected=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8332 self:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8333 self:_handle_response_payload(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8334 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8337 if self.bosh_waiting_requests[1]~=e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8342 break;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8343 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8344 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8345 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8346 table.remove(self.bosh_waiting_requests,1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8349 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8350 self:_handle_response_payload(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8351 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8352 self:flush();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8353 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8354 function e:_handle_response_payload(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8355 local e=t.tags;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8356 for t=1,#e do
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8359 self:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8360 elseif e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8361 self:event("stream/"..e.attr.xmlns,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8362 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8363 self:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8364 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8365 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8366 if t.attr.type=="terminate"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8367 self:_disconnected({reason=t.attr.condition});
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8368 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8369 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8370 local a={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8371 stream_ns="http://jabber.org/protocol/httpbind",stream_tag="body",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8372 default_ns="jabber:client",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8375 };
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8376 function e:_parse_response(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8377 self:debug("Parsing response: %s",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8378 if e==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8379 self:debug("%s",debug.traceback());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8380 self:_disconnected();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8381 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8382 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8385 a:feed(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8386 return t.payload;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8387 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8388 function e:_make_body()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8389 self.bosh_rid=self.bosh_rid+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8392 content="text/xml; charset=utf-8";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8393 sid=self.bosh_sid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8394 rid=self.bosh_rid;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8395 });
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8396 if self.bosh_need_restart then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8397 self.bosh_need_restart=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8398 e.attr.restart='true';
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8399 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8400 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8401 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8402 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8419 local e=require"lxp";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8420 local a=require"util.stanza";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8421 t.message,t.presence,t.iq,t.stanza,t.reply,t.error_reply=
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8426 return t.priority<e.priority or(t.priority==e.priority and t.weight>e.weight);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8429 stream_ns=n,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8430 stream_tag="stream",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8433 e.stream_id=t.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8434 if not e:event("opened",t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8435 e.notopen=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8436 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8437 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8440 e.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8441 if not e.closed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8442 e:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8443 e.closed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8444 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8445 e:event("closed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8446 return e:close("stream closed")
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8449 if e.attr.xmlns==n then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8450 return t:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8451 elseif e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8452 return t:event("stream/"..e.attr.xmlns,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8453 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8454 return t:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8457 if a:event(t,e)==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8458 if e then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8459 local t=e:get_child(nil,"urn:ietf:params:xml:ns:xmpp-streams");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8460 local e=e:get_child_text("text","urn:ietf:params:xml:ns:xmpp-streams");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8461 error(t.name..(e and": "..e or""));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8462 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8463 error(e and e.name or t or"unknown-error");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8464 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8465 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8466 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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8468 if self.stream then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8469 self.stream:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8472 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8473 self.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8474 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8479 self:add_plugin("tls");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8480 self:add_plugin("sasl");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8481 self:add_plugin("bind");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8482 self:add_plugin("session");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8487 self:close("xml-not-well-formed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8488 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8489 self:hook("connected",function()self:reopen();end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8490 self:hook("incoming-raw",function(e)return self.data(self.conn,e);end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8491 self.curr_id=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8498 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8499 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8500 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8501 self:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8502 local a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8503 if e.attr.xmlns==nil or e.attr.xmlns=="jabber:client"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8504 if e.name=="iq"and(e.attr.type=="get"or e.attr.type=="set")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8505 local o=e.tags[1]and e.tags[1].attr.xmlns;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8506 if o then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8507 a=self:event("iq/"..o,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8508 if not a then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8509 a=self:event("iq",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8510 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8511 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8512 if a==nil then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8513 self:send(t.error_reply(e,"cancel","service-unavailable"));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8514 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8515 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8516 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8517 a=self:event(e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8518 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8519 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8520 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8521 end,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8522 self:hook("outgoing",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8523 if e.name then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8524 self:event("stanza-out",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8525 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8526 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8527 self:hook("stanza-out",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8528 if not e.attr.xmlns then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8529 self:event(e.name.."-out",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8530 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8531 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8532 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8533 self:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8534 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8535 self:hook("session-success",e,-1)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8536 self:hook("bind-success",e,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8537 local t=self.close;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8538 function self:close(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8539 self.close=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8540 if not self.closed then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8541 self:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8542 self.closed=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8543 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8544 return self:close(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8545 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8548 self:connect(self.connect_host or self.host,self.connect_port or 5222);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8549 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8553 local e={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8556 table.insert(e,t.srv);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8563 self:debug("Best record found, will connect to %s:%d",self.connect_host or self.host,self.connect_port or 5222);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8564 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8565 self:hook("disconnected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8566 if self.srv_hosts and self.srv_choice<#self.srv_hosts then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8567 self.srv_choice=self.srv_choice+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8568 local e=e[self.srv_choice];
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8571 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8572 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8573 end,1e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8574 self:hook("connected",function()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8575 self.srv_hosts=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8576 end,1e3);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8577 end
103
9e0e56393978 verse: Update to 5.2-compatible version
Matthew Wild <mwild1@gmail.com>
parents: 88
diff changeset
8578 a();
12
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8579 end,"_xmpp-client._tcp."..(self.host)..".","SRV");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8585 self:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8586 self:send(a.stanza("stream:stream",{to=self.host,["xmlns:stream"]='http://etherx.jabber.org/streams',
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8587 xmlns="jabber:client",version="1.0"}):top_tag());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8596 self.curr_id=self.curr_id+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8597 return tostring(self.curr_id);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8598 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8599 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8621 local s="http://etherx.jabber.org/streams";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8622 local i="jabber:component:accept";
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8623 local n={
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8624 stream_ns=s,
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8625 stream_tag="stream",
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8626 default_ns=i};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8627 function n.streamopened(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8628 e.stream_id=t.id;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8629 if not e:event("opened",t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8630 e.notopen=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8631 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8632 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8633 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8634 function n.streamclosed(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8635 return e:event("closed");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8636 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8637 function n.handlestanza(t,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8638 if e.attr.xmlns==s then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8639 return t:event("stream-"..e.name,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8640 elseif e.attr.xmlns or e.name=="handshake"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8641 return t:event("stream/"..(e.attr.xmlns or i),e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8642 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8643 return t:event("stanza",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8646 if self.stream then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8647 self.stream:reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8650 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8651 self.notopen=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8652 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8662 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8663 self:hook("incoming-raw",function(e)return self.data(self.conn,e);end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8664 self.curr_id=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8665 self.tracked_iqs={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8666 self:hook("stanza",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8667 local t,a=e.attr.id,e.attr.type;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8668 if t and e.name=="iq"and(a=="result"or a=="error")and self.tracked_iqs[t]then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8669 self.tracked_iqs[t](e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8670 self.tracked_iqs[t]=nil;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8671 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8672 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8673 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8676 if e.attr.xmlns==nil or e.attr.xmlns=="jabber:client"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8677 if e.name=="iq"and(e.attr.type=="get"or e.attr.type=="set")then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8678 local o=e.tags[1]and e.tags[1].attr.xmlns;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8687 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8688 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8694 end,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8695 self:hook("opened",function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8699 self:hook("stream/"..i,function(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8700 if e.name=="handshake"then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8701 self:event("authentication-success");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8702 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8703 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8704 end);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8705 local function e()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8706 self:event("ready");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8707 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8708 self:hook("authentication-success",e,-1);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8709 self:connect(self.connect_host or self.host,self.connect_port or 5347);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8710 self:reopen();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8715 xmlns=i,version="1.0"}):top_tag());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8718 if not self.notopen then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8719 self:send("</stream:stream>");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8726 local e=self:new_id();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8727 self.tracked_iqs[e]=a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8728 t.attr.id=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8729 self:send(t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8732 self.curr_id=self.curr_id+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8733 return tostring(self.curr_id);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8734 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8735 end)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8738 pcall(require,"ssl");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8744 local t={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8747 e.plugins={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8748 function e.init(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8753 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8754 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8755 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8756 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8757 local i=0;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8758 function e.new(o,a)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8759 local t=setmetatable(a or{},t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8760 i=i+1;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8761 t.id=tostring(i);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8764 t.plugins={};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8765 t.verse=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8766 return t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8767 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8768 e.add_task=require"util.timer".add_task;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8769 e.logger=o.init;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8770 e.new_logger=o.init;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8775 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8776 function e.set_log_handler(e,t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8777 t=t or{"debug","info","warn","error"};
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8778 o.reset();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8783 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8784 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8788 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8798 local function o(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8799 e.log("error","Error: %s",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8800 e.log("error","Traceback: %s",debug.traceback());
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8801 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8802 function e.set_error_handler(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8803 o=e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8804 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8805 function e.loop()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8806 return xpcall(a.loop,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8807 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8808 function e.step()
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8809 return xpcall(a.step,o);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8810 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8841 return true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8842 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8843 function t:set_conn(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8844 self.conn=t;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8845 self.send=function(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8846 self:event("outgoing",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8847 e=tostring(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8848 self:event("outgoing-raw",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8849 return t:write(e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8850 end;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8851 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8852 function t:close(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8853 if not self.conn then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8854 e.log("error","Attempt to close disconnected connection - possibly a bug");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8855 return;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8856 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8857 local e=self.conn.disconnect();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8858 self.conn:close();
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8859 e(self.conn,t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8860 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8861 function t:debug(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8862 return self.logger("debug",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8863 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8864 function t:info(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8865 return self.logger("info",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8866 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8867 function t:warn(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8868 return self.logger("warn",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8869 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8870 function t:error(...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8871 return self.logger("error",...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8872 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8873 function t:event(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8874 self:debug("Firing event: "..tostring(e));
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8875 return self.events.fire_event(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8876 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8877 function t:hook(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8878 return self.events.add_handler(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8882 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8885 e.hook,e.unhook=t.hook,t.unhook;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8886 local t=e.events.fire_event;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8887 function e:event(e,...)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8888 return t(e,...);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8889 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8890 return e;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8891 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8892 function t:add_plugin(t)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8893 if self.plugins[t]then return true;end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8894 if require("verse.plugins."..t)then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8895 local a,e=e.plugins[t](self);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8896 if a~=false then
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8897 self:debug("Loaded %s plugin",t);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8898 self.plugins[t]=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8899 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8900 self:warn("Failed to load %s plugin: %s",t,e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8901 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8902 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8903 return self;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8913 else
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8914 t.connected=true;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8915 t:event("connected");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8916 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8917 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8918 function a.onincoming(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8919 t:event("incoming-raw",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
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
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8925 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8926 function a.ondrain(e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8927 t:event("drained");
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8928 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8929 function a.onstatus(a,e)
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8930 t:event("status",e);
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8931 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8932 return a;
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8933 end
fc435d567896 Add verse for convenience
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8934 return e;

mercurial