Mercurial > prosody-modules
annotate mod_ircd/mod_ircd_broke.lua @ 460:9bb9343f3c7a
mod_component_guard: made module global, refactored init.
author | Marco Cirillo <maranda@lightwitch.org> |
---|---|
date | Mon, 24 Oct 2011 00:20:51 +0000 |
parents | 52f2188ec47d |
children | bbea8081c865 |
rev | line source |
---|---|
455
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1 package.preload['verse'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2 package.preload['util.encodings'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3 local function not_impl() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4 error("Function not implemented"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
6 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
7 local mime = require "mime"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
8 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
9 module "encodings" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
10 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
11 stringprep = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
12 base64 = { encode = mime.b64, decode = not_impl }; --mime.unb64 is buggy with \0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
13 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
14 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
15 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
16 package.preload['util.hashes'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
17 local sha1 = require "util.sha1"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
18 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
19 return { sha1 = sha1.sha1 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
20 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
21 package.preload['util.logger'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
22 local select, tostring = select, tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
23 local io_write = function(...) return io.stderr:write(...) end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
24 module "logger" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
25 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
26 local function format(format, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
27 local n, maxn = 0, #arg; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
28 return (format:gsub("%%(.)", function (c) if c ~= "%" and n <= maxn then n = n + 1; return tostring(arg[n]); end end)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
29 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
30 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
31 local function format(format, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
32 local n, maxn = 0, select('#', ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
33 local arg = { ... }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
34 return (format:gsub("%%(.)", function (c) if n <= maxn then n = n + 1; return tostring(arg[n]); end end)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
35 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
36 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
37 function init(name) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
38 return function (level, message, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
39 io_write(level, "\t", format(message, ...), "\n"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
40 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
41 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
42 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
43 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
44 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
45 package.preload['util.sha1'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
46 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
47 --- *** SHA-1 algorithm for Lua *** --- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
48 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
49 --- Author: Martin Huesser --- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
50 --- Date: 2008-06-16 --- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
51 --- License: You may use this code in your --- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
52 --- projects as long as this header --- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
53 --- stays intact. --- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
54 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
55 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
56 local strlen = string.len |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
57 local strchar = string.char |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
58 local strbyte = string.byte |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
59 local strsub = string.sub |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
60 local floor = math.floor |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
61 local bit = require "bit" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
62 local bnot = bit.bnot |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
63 local band = bit.band |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
64 local bor = bit.bor |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
65 local bxor = bit.bxor |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
66 local shl = bit.lshift |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
67 local shr = bit.rshift |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
68 local h0, h1, h2, h3, h4 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
69 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
70 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
71 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
72 local function LeftRotate(val, nr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
73 return shl(val, nr) + shr(val, 32 - nr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
74 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
75 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
76 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
77 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
78 local function ToHex(num) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
79 local i, d |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
80 local str = "" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
81 for i = 1, 8 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
82 d = band(num, 15) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
83 if (d < 10) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
84 str = strchar(d + 48) .. str |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
85 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
86 str = strchar(d + 87) .. str |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
87 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
88 num = floor(num / 16) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
89 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
90 return str |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
91 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
92 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
93 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
94 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
95 local function PreProcess(str) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
96 local bitlen, i |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
97 local str2 = "" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
98 bitlen = strlen(str) * 8 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
99 str = str .. strchar(128) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
100 i = 56 - band(strlen(str), 63) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
101 if (i < 0) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
102 i = i + 64 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
103 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
104 for i = 1, i do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
105 str = str .. strchar(0) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
106 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
107 for i = 1, 8 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
108 str2 = strchar(band(bitlen, 255)) .. str2 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
109 bitlen = floor(bitlen / 256) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
110 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
111 return str .. str2 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
112 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
113 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
114 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
115 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
116 local function MainLoop(str) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
117 local a, b, c, d, e, f, k, t |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
118 local i, j |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
119 local w = {} |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
120 while (str ~= "") do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
121 for i = 0, 15 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
122 w[i] = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
123 for j = 1, 4 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
124 w[i] = w[i] * 256 + strbyte(str, i * 4 + j) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
125 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
126 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
127 for i = 16, 79 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
128 w[i] = LeftRotate(bxor(bxor(w[i - 3], w[i - 8]), bxor(w[i - 14], w[i - 16])), 1) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
129 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
130 a = h0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
131 b = h1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
132 c = h2 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
133 d = h3 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
134 e = h4 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
135 for i = 0, 79 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
136 if (i < 20) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
137 f = bor(band(b, c), band(bnot(b), d)) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
138 k = 1518500249 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
139 elseif (i < 40) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
140 f = bxor(bxor(b, c), d) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
141 k = 1859775393 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
142 elseif (i < 60) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
143 f = bor(bor(band(b, c), band(b, d)), band(c, d)) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
144 k = 2400959708 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
145 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
146 f = bxor(bxor(b, c), d) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
147 k = 3395469782 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
148 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
149 t = LeftRotate(a, 5) + f + e + k + w[i] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
150 e = d |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
151 d = c |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
152 c = LeftRotate(b, 30) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
153 b = a |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
154 a = t |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
155 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
156 h0 = band(h0 + a, 4294967295) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
157 h1 = band(h1 + b, 4294967295) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
158 h2 = band(h2 + c, 4294967295) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
159 h3 = band(h3 + d, 4294967295) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
160 h4 = band(h4 + e, 4294967295) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
161 str = strsub(str, 65) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
162 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
163 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
164 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
165 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
166 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
167 local function sha1(str, hexres) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
168 str = PreProcess(str) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
169 h0 = 1732584193 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
170 h1 = 4023233417 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
171 h2 = 2562383102 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
172 h3 = 0271733878 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
173 h4 = 3285377520 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
174 MainLoop(str) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
175 local hex = ToHex(h0)..ToHex(h1)..ToHex(h2) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
176 ..ToHex(h3)..ToHex(h4); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
177 if hexres then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
178 return hex; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
179 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
180 return (hex:gsub("..", function (byte) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
181 return string.char(tonumber(byte, 16)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
182 end)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
183 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
184 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
185 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
186 _G.sha1 = {sha1 = sha1}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
187 return _G.sha1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
188 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
189 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
190 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
191 ------------------------------------------------- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
192 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
193 package.preload['lib.adhoc'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
194 -- Copyright (C) 2009-2010 Florian Zeitz |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
195 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
196 -- This file is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
197 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
198 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
199 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
200 local st, uuid = require "util.stanza", require "util.uuid"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
201 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
202 local xmlns_cmd = "http://jabber.org/protocol/commands"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
203 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
204 local states = {} |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
205 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
206 local _M = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
207 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
208 function _cmdtag(desc, status, sessionid, action) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
209 local cmd = st.stanza("command", { xmlns = xmlns_cmd, node = desc.node, status = status }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
210 if sessionid then cmd.attr.sessionid = sessionid; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
211 if action then cmd.attr.action = action; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
212 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
213 return cmd; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
214 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
215 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
216 function _M.new(name, node, handler, permission) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
217 return { name = name, node = node, handler = handler, cmdtag = _cmdtag, permission = (permission or "user") }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
218 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
219 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
220 function _M.handle_cmd(command, origin, stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
221 local sessionid = stanza.tags[1].attr.sessionid or uuid.generate(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
222 local dataIn = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
223 dataIn.to = stanza.attr.to; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
224 dataIn.from = stanza.attr.from; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
225 dataIn.action = stanza.tags[1].attr.action or "execute"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
226 dataIn.form = stanza.tags[1]:child_with_ns("jabber:x:data"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
227 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
228 local data, state = command:handler(dataIn, states[sessionid]); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
229 states[sessionid] = state; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
230 local stanza = st.reply(stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
231 if data.status == "completed" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
232 states[sessionid] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
233 cmdtag = command:cmdtag("completed", sessionid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
234 elseif data.status == "canceled" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
235 states[sessionid] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
236 cmdtag = command:cmdtag("canceled", sessionid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
237 elseif data.status == "error" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
238 states[sessionid] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
239 stanza = st.error_reply(stanza, data.error.type, data.error.condition, data.error.message); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
240 origin.send(stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
241 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
242 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
243 cmdtag = command:cmdtag("executing", sessionid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
244 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
245 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
246 for name, content in pairs(data) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
247 if name == "info" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
248 cmdtag:tag("note", {type="info"}):text(content):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
249 elseif name == "warn" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
250 cmdtag:tag("note", {type="warn"}):text(content):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
251 elseif name == "error" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
252 cmdtag:tag("note", {type="error"}):text(content.message):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
253 elseif name =="actions" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
254 local actions = st.stanza("actions"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
255 for _, action in ipairs(content) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
256 if (action == "prev") or (action == "next") or (action == "complete") then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
257 actions:tag(action):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
258 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
259 module:log("error", 'Command "'..command.name.. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
260 '" at node "'..command.node..'" provided an invalid action "'..action..'"'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
261 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
262 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
263 cmdtag:add_child(actions); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
264 elseif name == "form" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
265 cmdtag:add_child((content.layout or content):form(content.values)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
266 elseif name == "result" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
267 cmdtag:add_child((content.layout or content):form(content.values, "result")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
268 elseif name == "other" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
269 cmdtag:add_child(content); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
270 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
271 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
272 stanza:add_child(cmdtag); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
273 origin.send(stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
274 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
275 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
276 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
277 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
278 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
279 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
280 package.preload['util.stanza'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
281 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
282 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
283 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
284 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
285 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
286 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
287 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
288 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
289 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
290 local t_insert = table.insert; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
291 local t_concat = table.concat; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
292 local t_remove = table.remove; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
293 local t_concat = table.concat; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
294 local s_format = string.format; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
295 local s_match = string.match; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
296 local tostring = tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
297 local setmetatable = setmetatable; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
298 local getmetatable = getmetatable; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
299 local pairs = pairs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
300 local ipairs = ipairs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
301 local type = type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
302 local next = next; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
303 local print = print; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
304 local unpack = unpack; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
305 local s_gsub = string.gsub; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
306 local s_char = string.char; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
307 local s_find = string.find; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
308 local os = os; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
309 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
310 local do_pretty_printing = not os.getenv("WINDIR"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
311 local getstyle, getstring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
312 if do_pretty_printing then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
313 local ok, termcolours = pcall(require, "util.termcolours"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
314 if ok then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
315 getstyle, getstring = termcolours.getstyle, termcolours.getstring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
316 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
317 do_pretty_printing = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
318 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
319 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
320 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
321 local xmlns_stanzas = "urn:ietf:params:xml:ns:xmpp-stanzas"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
322 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
323 module "stanza" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
324 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
325 stanza_mt = { __type = "stanza" }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
326 stanza_mt.__index = stanza_mt; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
327 local stanza_mt = stanza_mt; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
328 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
329 function stanza(name, attr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
330 local stanza = { name = name, attr = attr or {}, tags = {} }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
331 return setmetatable(stanza, stanza_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
332 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
333 local stanza = stanza; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
334 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
335 function stanza_mt:query(xmlns) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
336 return self:tag("query", { xmlns = xmlns }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
337 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
338 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
339 function stanza_mt:body(text, attr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
340 return self:tag("body", attr):text(text); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
341 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
342 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
343 function stanza_mt:tag(name, attrs) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
344 local s = stanza(name, attrs); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
345 local last_add = self.last_add; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
346 if not last_add then last_add = {}; self.last_add = last_add; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
347 (last_add[#last_add] or self):add_direct_child(s); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
348 t_insert(last_add, s); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
349 return self; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
350 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
351 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
352 function stanza_mt:text(text) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
353 local last_add = self.last_add; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
354 (last_add and last_add[#last_add] or self):add_direct_child(text); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
355 return self; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
356 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
357 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
358 function stanza_mt:up() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
359 local last_add = self.last_add; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
360 if last_add then t_remove(last_add); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
361 return self; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
362 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
363 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
364 function stanza_mt:reset() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
365 self.last_add = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
366 return self; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
367 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
368 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
369 function stanza_mt:add_direct_child(child) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
370 if type(child) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
371 t_insert(self.tags, child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
372 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
373 t_insert(self, child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
374 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
375 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
376 function stanza_mt:add_child(child) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
377 local last_add = self.last_add; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
378 (last_add and last_add[#last_add] or self):add_direct_child(child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
379 return self; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
380 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
381 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
382 function stanza_mt:get_child(name, xmlns) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
383 for _, child in ipairs(self.tags) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
384 if (not name or child.name == name) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
385 and ((not xmlns and self.attr.xmlns == child.attr.xmlns) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
386 or child.attr.xmlns == xmlns) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
387 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
388 return child; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
389 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
390 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
391 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
392 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
393 function stanza_mt:get_child_text(name, xmlns) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
394 local tag = self:get_child(name, xmlns); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
395 if tag then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
396 return tag:get_text(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
397 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
398 return nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
399 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
400 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
401 function stanza_mt:child_with_name(name) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
402 for _, child in ipairs(self.tags) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
403 if child.name == name then return child; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
404 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
405 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
406 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
407 function stanza_mt:child_with_ns(ns) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
408 for _, child in ipairs(self.tags) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
409 if child.attr.xmlns == ns then return child; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
410 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
411 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
412 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
413 function stanza_mt:children() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
414 local i = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
415 return function (a) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
416 i = i + 1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
417 return a[i]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
418 end, self, i; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
419 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
420 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
421 function stanza_mt:childtags(name, xmlns) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
422 xmlns = xmlns or self.attr.xmlns; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
423 local tags = self.tags; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
424 local start_i, max_i = 1, #tags; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
425 return function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
426 for i = start_i, max_i do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
427 local v = tags[i]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
428 if (not name or v.name == name) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
429 and (not xmlns or xmlns == v.attr.xmlns) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
430 start_i = i+1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
431 return v; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
432 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
433 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
434 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
435 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
436 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
437 function stanza_mt:maptags(callback) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
438 local tags, curr_tag = self.tags, 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
439 local n_children, n_tags = #self, #tags; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
440 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
441 local i = 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
442 while curr_tag <= n_tags do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
443 if self[i] == tags[curr_tag] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
444 local ret = callback(self[i]); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
445 if ret == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
446 t_remove(self, i); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
447 t_remove(tags, curr_tag); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
448 n_children = n_children - 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
449 n_tags = n_tags - 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
450 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
451 self[i] = ret; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
452 tags[i] = ret; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
453 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
454 i = i + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
455 curr_tag = curr_tag + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
456 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
457 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
458 return self; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
459 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
460 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
461 local xml_escape |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
462 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
463 local escape_table = { ["'"] = "'", ["\""] = """, ["<"] = "<", [">"] = ">", ["&"] = "&" }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
464 function xml_escape(str) return (s_gsub(str, "['&<>\"]", escape_table)); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
465 _M.xml_escape = xml_escape; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
466 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
467 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
468 local function _dostring(t, buf, self, xml_escape, parentns) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
469 local nsid = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
470 local name = t.name |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
471 t_insert(buf, "<"..name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
472 for k, v in pairs(t.attr) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
473 if s_find(k, "\1", 1, true) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
474 local ns, attrk = s_match(k, "^([^\1]*)\1?(.*)$"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
475 nsid = nsid + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
476 t_insert(buf, " xmlns:ns"..nsid.."='"..xml_escape(ns).."' ".."ns"..nsid..":"..attrk.."='"..xml_escape(v).."'"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
477 elseif not(k == "xmlns" and v == parentns) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
478 t_insert(buf, " "..k.."='"..xml_escape(v).."'"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
479 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
480 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
481 local len = #t; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
482 if len == 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
483 t_insert(buf, "/>"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
484 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
485 t_insert(buf, ">"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
486 for n=1,len do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
487 local child = t[n]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
488 if child.name then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
489 self(child, buf, self, xml_escape, t.attr.xmlns); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
490 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
491 t_insert(buf, xml_escape(child)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
492 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
493 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
494 t_insert(buf, "</"..name..">"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
495 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
496 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
497 function stanza_mt.__tostring(t) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
498 local buf = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
499 _dostring(t, buf, _dostring, xml_escape, nil); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
500 return t_concat(buf); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
501 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
502 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
503 function stanza_mt.top_tag(t) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
504 local attr_string = ""; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
505 if t.attr then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
506 for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(" %s='%s'", k, xml_escape(tostring(v))); end end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
507 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
508 return s_format("<%s%s>", t.name, attr_string); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
509 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
510 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
511 function stanza_mt.get_text(t) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
512 if #t.tags == 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
513 return t_concat(t); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
514 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
515 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
516 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
517 function stanza_mt.get_error(stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
518 local type, condition, text; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
519 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
520 local error_tag = stanza:get_child("error"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
521 if not error_tag then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
522 return nil, nil, nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
523 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
524 type = error_tag.attr.type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
525 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
526 for child in error_tag:childtags() do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
527 if child.attr.xmlns == xmlns_stanzas then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
528 if not text and child.name == "text" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
529 text = child:get_text(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
530 elseif not condition then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
531 condition = child.name; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
532 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
533 if condition and text then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
534 break; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
535 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
536 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
537 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
538 return type, condition or "undefined-condition", text; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
539 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
540 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
541 function stanza_mt.__add(s1, s2) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
542 return s1:add_direct_child(s2); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
543 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
544 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
545 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
546 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
547 local id = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
548 function new_id() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
549 id = id + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
550 return "lx"..id; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
551 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
552 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
553 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
554 function preserialize(stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
555 local s = { name = stanza.name, attr = stanza.attr }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
556 for _, child in ipairs(stanza) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
557 if type(child) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
558 t_insert(s, preserialize(child)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
559 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
560 t_insert(s, child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
561 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
562 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
563 return s; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
564 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
565 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
566 function deserialize(stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
567 -- Set metatable |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
568 if stanza then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
569 local attr = stanza.attr; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
570 for i=1,#attr do attr[i] = nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
571 local attrx = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
572 for att in pairs(attr) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
573 if s_find(att, "|", 1, true) and not s_find(att, "\1", 1, true) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
574 local ns,na = s_match(att, "^([^|]+)|(.+)$"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
575 attrx[ns.."\1"..na] = attr[att]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
576 attr[att] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
577 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
578 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
579 for a,v in pairs(attrx) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
580 attr[a] = v; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
581 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
582 setmetatable(stanza, stanza_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
583 for _, child in ipairs(stanza) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
584 if type(child) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
585 deserialize(child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
586 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
587 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
588 if not stanza.tags then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
589 -- Rebuild tags |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
590 local tags = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
591 for _, child in ipairs(stanza) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
592 if type(child) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
593 t_insert(tags, child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
594 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
595 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
596 stanza.tags = tags; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
597 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
598 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
599 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
600 return stanza; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
601 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
602 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
603 local function _clone(stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
604 local attr, tags = {}, {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
605 for k,v in pairs(stanza.attr) do attr[k] = v; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
606 local new = { name = stanza.name, attr = attr, tags = tags }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
607 for i=1,#stanza do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
608 local child = stanza[i]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
609 if child.name then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
610 child = _clone(child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
611 t_insert(tags, child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
612 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
613 t_insert(new, child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
614 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
615 return setmetatable(new, stanza_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
616 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
617 clone = _clone; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
618 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
619 function message(attr, body) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
620 if not body then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
621 return stanza("message", attr); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
622 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
623 return stanza("message", attr):tag("body"):text(body):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
624 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
625 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
626 function iq(attr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
627 if attr and not attr.id then attr.id = new_id(); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
628 return stanza("iq", attr or { id = new_id() }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
629 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
630 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
631 function reply(orig) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
632 return stanza(orig.name, orig.attr and { to = orig.attr.from, from = orig.attr.to, id = orig.attr.id, type = ((orig.name == "iq" and "result") or orig.attr.type) }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
633 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
634 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
635 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
636 local xmpp_stanzas_attr = { xmlns = xmlns_stanzas }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
637 function error_reply(orig, type, condition, message) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
638 local t = reply(orig); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
639 t.attr.type = "error"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
640 t:tag("error", {type = type}) --COMPAT: Some day xmlns:stanzas goes here |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
641 :tag(condition, xmpp_stanzas_attr):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
642 if (message) then t:tag("text", xmpp_stanzas_attr):text(message):up(); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
643 return t; -- stanza ready for adding app-specific errors |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
644 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
645 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
646 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
647 function presence(attr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
648 return stanza("presence", attr); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
649 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
650 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
651 if do_pretty_printing then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
652 local style_attrk = getstyle("yellow"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
653 local style_attrv = getstyle("red"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
654 local style_tagname = getstyle("red"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
655 local style_punc = getstyle("magenta"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
656 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
657 local attr_format = " "..getstring(style_attrk, "%s")..getstring(style_punc, "=")..getstring(style_attrv, "'%s'"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
658 local top_tag_format = getstring(style_punc, "<")..getstring(style_tagname, "%s").."%s"..getstring(style_punc, ">"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
659 --local tag_format = getstring(style_punc, "<")..getstring(style_tagname, "%s").."%s"..getstring(style_punc, ">").."%s"..getstring(style_punc, "</")..getstring(style_tagname, "%s")..getstring(style_punc, ">"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
660 local tag_format = top_tag_format.."%s"..getstring(style_punc, "</")..getstring(style_tagname, "%s")..getstring(style_punc, ">"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
661 function stanza_mt.pretty_print(t) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
662 local children_text = ""; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
663 for n, child in ipairs(t) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
664 if type(child) == "string" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
665 children_text = children_text .. xml_escape(child); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
666 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
667 children_text = children_text .. child:pretty_print(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
668 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
669 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
670 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
671 local attr_string = ""; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
672 if t.attr then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
673 for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(attr_format, k, tostring(v)); end end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
674 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
675 return s_format(tag_format, t.name, attr_string, children_text, t.name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
676 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
677 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
678 function stanza_mt.pretty_top_tag(t) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
679 local attr_string = ""; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
680 if t.attr then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
681 for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(attr_format, k, tostring(v)); end end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
682 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
683 return s_format(top_tag_format, t.name, attr_string); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
684 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
685 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
686 -- Sorry, fresh out of colours for you guys ;) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
687 stanza_mt.pretty_print = stanza_mt.__tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
688 stanza_mt.pretty_top_tag = stanza_mt.top_tag; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
689 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
690 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
691 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
692 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
693 package.preload['util.timer'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
694 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
695 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
696 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
697 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
698 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
699 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
700 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
701 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
702 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
703 local ns_addtimer = require "net.server".addtimer; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
704 local event = require "net.server".event; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
705 local event_base = require "net.server".event_base; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
706 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
707 local math_min = math.min |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
708 local math_huge = math.huge |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
709 local get_time = require "socket".gettime; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
710 local t_insert = table.insert; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
711 local t_remove = table.remove; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
712 local ipairs, pairs = ipairs, pairs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
713 local type = type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
714 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
715 local data = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
716 local new_data = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
717 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
718 module "timer" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
719 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
720 local _add_task; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
721 if not event then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
722 function _add_task(delay, func) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
723 local current_time = get_time(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
724 delay = delay + current_time; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
725 if delay >= current_time then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
726 t_insert(new_data, {delay, func}); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
727 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
728 func(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
729 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
730 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
731 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
732 ns_addtimer(function() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
733 local current_time = get_time(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
734 if #new_data > 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
735 for _, d in pairs(new_data) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
736 t_insert(data, d); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
737 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
738 new_data = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
739 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
740 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
741 local next_time = math_huge; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
742 for i, d in pairs(data) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
743 local t, func = d[1], d[2]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
744 if t <= current_time then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
745 data[i] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
746 local r = func(current_time); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
747 if type(r) == "number" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
748 _add_task(r, func); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
749 next_time = math_min(next_time, r); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
750 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
751 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
752 next_time = math_min(next_time, t - current_time); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
753 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
754 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
755 return next_time; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
756 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
757 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
758 local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
759 function _add_task(delay, func) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
760 local event_handle; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
761 event_handle = event_base:addevent(nil, 0, function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
762 local ret = func(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
763 if ret then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
764 return 0, ret; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
765 elseif event_handle then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
766 return EVENT_LEAVE; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
767 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
768 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
769 , delay); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
770 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
771 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
772 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
773 add_task = _add_task; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
774 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
775 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
776 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
777 package.preload['util.termcolours'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
778 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
779 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
780 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
781 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
782 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
783 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
784 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
785 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
786 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
787 local t_concat, t_insert = table.concat, table.insert; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
788 local char, format = string.char, string.format; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
789 local ipairs = ipairs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
790 local io_write = io.write; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
791 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
792 local windows; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
793 if os.getenv("WINDIR") then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
794 windows = require "util.windows"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
795 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
796 local orig_color = windows and windows.get_consolecolor and windows.get_consolecolor(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
797 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
798 module "termcolours" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
799 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
800 local stylemap = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
801 reset = 0; bright = 1, dim = 2, underscore = 4, blink = 5, reverse = 7, hidden = 8; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
802 black = 30; red = 31; green = 32; yellow = 33; blue = 34; magenta = 35; cyan = 36; white = 37; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
803 ["black background"] = 40; ["red background"] = 41; ["green background"] = 42; ["yellow background"] = 43; ["blue background"] = 44; ["magenta background"] = 45; ["cyan background"] = 46; ["white background"] = 47; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
804 bold = 1, dark = 2, underline = 4, underlined = 4, normal = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
805 } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
806 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
807 local winstylemap = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
808 ["0"] = orig_color, -- reset |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
809 ["1"] = 7+8, -- bold |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
810 ["1;33"] = 2+4+8, -- bold yellow |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
811 ["1;31"] = 4+8 -- bold red |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
812 } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
813 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
814 local fmt_string = char(0x1B).."[%sm%s"..char(0x1B).."[0m"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
815 function getstring(style, text) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
816 if style then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
817 return format(fmt_string, style, text); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
818 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
819 return text; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
820 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
821 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
822 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
823 function getstyle(...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
824 local styles, result = { ... }, {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
825 for i, style in ipairs(styles) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
826 style = stylemap[style]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
827 if style then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
828 t_insert(result, style); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
829 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
830 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
831 return t_concat(result, ";"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
832 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
833 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
834 local last = "0"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
835 function setstyle(style) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
836 style = style or "0"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
837 if style ~= last then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
838 io_write("\27["..style.."m"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
839 last = style; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
840 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
841 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
842 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
843 if windows then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
844 function setstyle(style) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
845 style = style or "0"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
846 if style ~= last then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
847 windows.set_consolecolor(winstylemap[style] or orig_color); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
848 last = style; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
849 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
850 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
851 if not orig_color then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
852 function setstyle(style) end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
853 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
854 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
855 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
856 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
857 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
858 package.preload['util.uuid'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
859 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
860 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
861 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
862 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
863 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
864 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
865 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
866 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
867 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
868 local m_random = math.random; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
869 local tostring = tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
870 local os_time = os.time; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
871 local os_clock = os.clock; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
872 local sha1 = require "util.hashes".sha1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
873 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
874 module "uuid" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
875 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
876 local last_uniq_time = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
877 local function uniq_time() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
878 local new_uniq_time = os_time(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
879 if last_uniq_time >= new_uniq_time then new_uniq_time = last_uniq_time + 1; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
880 last_uniq_time = new_uniq_time; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
881 return new_uniq_time; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
882 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
883 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
884 local function new_random(x) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
885 return sha1(x..os_clock()..tostring({}), true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
886 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
887 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
888 local buffer = new_random(uniq_time()); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
889 local function _seed(x) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
890 buffer = new_random(buffer..x); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
891 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
892 local function get_nibbles(n) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
893 if #buffer < n then _seed(uniq_time()); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
894 local r = buffer:sub(0, n); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
895 buffer = buffer:sub(n+1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
896 return r; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
897 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
898 local function get_twobits() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
899 return ("%x"):format(get_nibbles(1):byte() % 4 + 8); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
900 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
901 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
902 function generate() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
903 -- generate RFC 4122 complaint UUIDs (version 4 - random) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
904 return get_nibbles(8).."-"..get_nibbles(4).."-4"..get_nibbles(3).."-"..(get_twobits())..get_nibbles(3).."-"..get_nibbles(12); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
905 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
906 seed = _seed; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
907 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
908 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
909 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
910 package.preload['net.dns'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
911 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
912 -- This file is included with Prosody IM. It has modifications, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
913 -- which are hereby placed in the public domain. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
914 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
915 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
916 -- todo: quick (default) header generation |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
917 -- todo: nxdomain, error handling |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
918 -- todo: cache results of encodeName |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
919 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
920 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
921 -- reference: http://tools.ietf.org/html/rfc1035 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
922 -- reference: http://tools.ietf.org/html/rfc1876 (LOC) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
923 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
924 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
925 local socket = require "socket"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
926 local timer = require "util.timer"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
927 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
928 local _, windows = pcall(require, "util.windows"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
929 local is_windows = (_ and windows) or os.getenv("WINDIR"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
930 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
931 local coroutine, io, math, string, table = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
932 coroutine, io, math, string, table; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
933 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
934 local ipairs, next, pairs, print, setmetatable, tostring, assert, error, unpack, select, type= |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
935 ipairs, next, pairs, print, setmetatable, tostring, assert, error, unpack, select, type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
936 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
937 local ztact = { -- public domain 20080404 lua@ztact.com |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
938 get = function(parent, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
939 local len = select('#', ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
940 for i=1,len do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
941 parent = parent[select(i, ...)]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
942 if parent == nil then break; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
943 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
944 return parent; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
945 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
946 set = function(parent, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
947 local len = select('#', ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
948 local key, value = select(len-1, ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
949 local cutpoint, cutkey; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
950 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
951 for i=1,len-2 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
952 local key = select (i, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
953 local child = parent[key] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
954 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
955 if value == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
956 if child == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
957 return; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
958 elseif next(child, next(child)) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
959 cutpoint = nil; cutkey = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
960 elseif cutpoint == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
961 cutpoint = parent; cutkey = key; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
962 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
963 elseif child == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
964 child = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
965 parent[key] = child; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
966 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
967 parent = child |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
968 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
969 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
970 if value == nil and cutpoint then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
971 cutpoint[cutkey] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
972 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
973 parent[key] = value; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
974 return value; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
975 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
976 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
977 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
978 local get, set = ztact.get, ztact.set; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
979 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
980 local default_timeout = 15; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
981 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
982 -------------------------------------------------- module dns |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
983 module('dns') |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
984 local dns = _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
985 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
986 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
987 -- dns type & class codes ------------------------------ dns type & class codes |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
988 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
989 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
990 local append = table.insert |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
991 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
992 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
993 local function highbyte(i) -- - - - - - - - - - - - - - - - - - - highbyte |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
994 return (i-(i%0x100))/0x100; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
995 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
996 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
997 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
998 local function augment (t) -- - - - - - - - - - - - - - - - - - - - augment |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
999 local a = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1000 for i,s in pairs(t) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1001 a[i] = s; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1002 a[s] = s; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1003 a[string.lower(s)] = s; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1004 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1005 return a; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1006 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1007 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1008 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1009 local function encode (t) -- - - - - - - - - - - - - - - - - - - - - encode |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1010 local code = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1011 for i,s in pairs(t) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1012 local word = string.char(highbyte(i), i%0x100); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1013 code[i] = word; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1014 code[s] = word; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1015 code[string.lower(s)] = word; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1016 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1017 return code; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1018 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1019 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1020 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1021 dns.types = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1022 'A', 'NS', 'MD', 'MF', 'CNAME', 'SOA', 'MB', 'MG', 'MR', 'NULL', 'WKS', |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1023 'PTR', 'HINFO', 'MINFO', 'MX', 'TXT', |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1024 [ 28] = 'AAAA', [ 29] = 'LOC', [ 33] = 'SRV', |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1025 [252] = 'AXFR', [253] = 'MAILB', [254] = 'MAILA', [255] = '*' }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1026 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1027 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1028 dns.classes = { 'IN', 'CS', 'CH', 'HS', [255] = '*' }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1029 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1030 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1031 dns.type = augment (dns.types); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1032 dns.class = augment (dns.classes); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1033 dns.typecode = encode (dns.types); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1034 dns.classcode = encode (dns.classes); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1035 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1036 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1037 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1038 local function standardize(qname, qtype, qclass) -- - - - - - - standardize |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1039 if string.byte(qname, -1) ~= 0x2E then qname = qname..'.'; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1040 qname = string.lower(qname); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1041 return qname, dns.type[qtype or 'A'], dns.class[qclass or 'IN']; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1042 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1043 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1044 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1045 local function prune(rrs, time, soft) -- - - - - - - - - - - - - - - prune |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1046 time = time or socket.gettime(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1047 for i,rr in pairs(rrs) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1048 if rr.tod then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1049 -- rr.tod = rr.tod - 50 -- accelerated decripitude |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1050 rr.ttl = math.floor(rr.tod - time); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1051 if rr.ttl <= 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1052 table.remove(rrs, i); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1053 return prune(rrs, time, soft); -- Re-iterate |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1054 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1055 elseif soft == 'soft' then -- What is this? I forget! |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1056 assert(rr.ttl == 0); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1057 rrs[i] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1058 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1059 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1060 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1061 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1062 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1063 -- metatables & co. ------------------------------------------ metatables & co. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1064 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1065 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1066 local resolver = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1067 resolver.__index = resolver; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1068 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1069 resolver.timeout = default_timeout; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1070 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1071 local function default_rr_tostring(rr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1072 local rr_val = rr.type and rr[rr.type:lower()]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1073 if type(rr_val) ~= "string" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1074 return "<UNKNOWN RDATA TYPE>"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1075 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1076 return rr_val; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1077 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1078 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1079 local special_tostrings = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1080 LOC = resolver.LOC_tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1081 MX = function (rr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1082 return string.format('%2i %s', rr.pref, rr.mx); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1083 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1084 SRV = function (rr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1085 local s = rr.srv; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1086 return string.format('%5d %5d %5d %s', s.priority, s.weight, s.port, s.target); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1087 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1088 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1089 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1090 local rr_metatable = {}; -- - - - - - - - - - - - - - - - - - - rr_metatable |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1091 function rr_metatable.__tostring(rr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1092 local rr_string = (special_tostrings[rr.type] or default_rr_tostring)(rr); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1093 return string.format('%2s %-5s %6i %-28s %s', rr.class, rr.type, rr.ttl, rr.name, rr_string); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1094 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1095 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1096 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1097 local rrs_metatable = {}; -- - - - - - - - - - - - - - - - - - rrs_metatable |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1098 function rrs_metatable.__tostring(rrs) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1099 local t = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1100 for i,rr in pairs(rrs) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1101 append(t, tostring(rr)..'\n'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1102 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1103 return table.concat(t); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1104 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1105 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1106 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1107 local cache_metatable = {}; -- - - - - - - - - - - - - - - - cache_metatable |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1108 function cache_metatable.__tostring(cache) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1109 local time = socket.gettime(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1110 local t = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1111 for class,types in pairs(cache) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1112 for type,names in pairs(types) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1113 for name,rrs in pairs(names) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1114 prune(rrs, time); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1115 append(t, tostring(rrs)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1116 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1117 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1118 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1119 return table.concat(t); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1120 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1121 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1122 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1123 function resolver:new() -- - - - - - - - - - - - - - - - - - - - - resolver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1124 local r = { active = {}, cache = {}, unsorted = {} }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1125 setmetatable(r, resolver); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1126 setmetatable(r.cache, cache_metatable); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1127 setmetatable(r.unsorted, { __mode = 'kv' }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1128 return r; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1129 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1130 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1131 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1132 -- packet layer -------------------------------------------------- packet layer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1133 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1134 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1135 function dns.random(...) -- - - - - - - - - - - - - - - - - - - dns.random |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1136 math.randomseed(math.floor(10000*socket.gettime())); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1137 dns.random = math.random; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1138 return dns.random(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1139 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1140 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1141 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1142 local function encodeHeader(o) -- - - - - - - - - - - - - - - encodeHeader |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1143 o = o or {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1144 o.id = o.id or dns.random(0, 0xffff); -- 16b (random) id |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1145 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1146 o.rd = o.rd or 1; -- 1b 1 recursion desired |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1147 o.tc = o.tc or 0; -- 1b 1 truncated response |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1148 o.aa = o.aa or 0; -- 1b 1 authoritative response |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1149 o.opcode = o.opcode or 0; -- 4b 0 query |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1150 -- 1 inverse query |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1151 -- 2 server status request |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1152 -- 3-15 reserved |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1153 o.qr = o.qr or 0; -- 1b 0 query, 1 response |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1154 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1155 o.rcode = o.rcode or 0; -- 4b 0 no error |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1156 -- 1 format error |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1157 -- 2 server failure |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1158 -- 3 name error |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1159 -- 4 not implemented |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1160 -- 5 refused |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1161 -- 6-15 reserved |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1162 o.z = o.z or 0; -- 3b 0 resvered |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1163 o.ra = o.ra or 0; -- 1b 1 recursion available |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1164 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1165 o.qdcount = o.qdcount or 1; -- 16b number of question RRs |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1166 o.ancount = o.ancount or 0; -- 16b number of answers RRs |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1167 o.nscount = o.nscount or 0; -- 16b number of nameservers RRs |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1168 o.arcount = o.arcount or 0; -- 16b number of additional RRs |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1169 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1170 -- string.char() rounds, so prevent roundup with -0.4999 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1171 local header = string.char( |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1172 highbyte(o.id), o.id %0x100, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1173 o.rd + 2*o.tc + 4*o.aa + 8*o.opcode + 128*o.qr, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1174 o.rcode + 16*o.z + 128*o.ra, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1175 highbyte(o.qdcount), o.qdcount %0x100, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1176 highbyte(o.ancount), o.ancount %0x100, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1177 highbyte(o.nscount), o.nscount %0x100, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1178 highbyte(o.arcount), o.arcount %0x100 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1179 ); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1180 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1181 return header, o.id; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1182 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1183 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1184 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1185 local function encodeName(name) -- - - - - - - - - - - - - - - - encodeName |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1186 local t = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1187 for part in string.gmatch(name, '[^.]+') do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1188 append(t, string.char(string.len(part))); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1189 append(t, part); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1190 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1191 append(t, string.char(0)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1192 return table.concat(t); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1193 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1194 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1195 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1196 local function encodeQuestion(qname, qtype, qclass) -- - - - encodeQuestion |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1197 qname = encodeName(qname); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1198 qtype = dns.typecode[qtype or 'a']; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1199 qclass = dns.classcode[qclass or 'in']; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1200 return qname..qtype..qclass; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1201 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1202 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1203 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1204 function resolver:byte(len) -- - - - - - - - - - - - - - - - - - - - - byte |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1205 len = len or 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1206 local offset = self.offset; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1207 local last = offset + len - 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1208 if last > #self.packet then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1209 error(string.format('out of bounds: %i>%i', last, #self.packet)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1210 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1211 self.offset = offset + len; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1212 return string.byte(self.packet, offset, last); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1213 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1214 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1215 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1216 function resolver:word() -- - - - - - - - - - - - - - - - - - - - - - word |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1217 local b1, b2 = self:byte(2); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1218 return 0x100*b1 + b2; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1219 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1220 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1221 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1222 function resolver:dword () -- - - - - - - - - - - - - - - - - - - - - dword |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1223 local b1, b2, b3, b4 = self:byte(4); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1224 --print('dword', b1, b2, b3, b4); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1225 return 0x1000000*b1 + 0x10000*b2 + 0x100*b3 + b4; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1226 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1227 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1228 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1229 function resolver:sub(len) -- - - - - - - - - - - - - - - - - - - - - - sub |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1230 len = len or 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1231 local s = string.sub(self.packet, self.offset, self.offset + len - 1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1232 self.offset = self.offset + len; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1233 return s; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1234 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1235 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1236 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1237 function resolver:header(force) -- - - - - - - - - - - - - - - - - - header |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1238 local id = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1239 --print(string.format(':header id %x', id)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1240 if not self.active[id] and not force then return nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1241 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1242 local h = { id = id }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1243 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1244 local b1, b2 = self:byte(2); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1245 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1246 h.rd = b1 %2; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1247 h.tc = b1 /2%2; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1248 h.aa = b1 /4%2; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1249 h.opcode = b1 /8%16; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1250 h.qr = b1 /128; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1251 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1252 h.rcode = b2 %16; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1253 h.z = b2 /16%8; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1254 h.ra = b2 /128; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1255 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1256 h.qdcount = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1257 h.ancount = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1258 h.nscount = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1259 h.arcount = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1260 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1261 for k,v in pairs(h) do h[k] = v-v%1; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1262 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1263 return h; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1264 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1265 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1266 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1267 function resolver:name() -- - - - - - - - - - - - - - - - - - - - - - name |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1268 local remember, pointers = nil, 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1269 local len = self:byte(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1270 local n = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1271 while len > 0 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1272 if len >= 0xc0 then -- name is "compressed" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1273 pointers = pointers + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1274 if pointers >= 20 then error('dns error: 20 pointers'); end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1275 local offset = ((len-0xc0)*0x100) + self:byte(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1276 remember = remember or self.offset; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1277 self.offset = offset + 1; -- +1 for lua |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1278 else -- name is not compressed |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1279 append(n, self:sub(len)..'.'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1280 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1281 len = self:byte(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1282 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1283 self.offset = remember or self.offset; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1284 return table.concat(n); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1285 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1286 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1287 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1288 function resolver:question() -- - - - - - - - - - - - - - - - - - question |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1289 local q = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1290 q.name = self:name(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1291 q.type = dns.type[self:word()]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1292 q.class = dns.class[self:word()]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1293 return q; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1294 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1295 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1296 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1297 function resolver:A(rr) -- - - - - - - - - - - - - - - - - - - - - - - - A |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1298 local b1, b2, b3, b4 = self:byte(4); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1299 rr.a = string.format('%i.%i.%i.%i', b1, b2, b3, b4); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1300 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1301 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1302 function resolver:AAAA(rr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1303 local addr = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1304 for i = 1, rr.rdlength, 2 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1305 local b1, b2 = self:byte(2); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1306 table.insert(addr, ("%02x%02x"):format(b1, b2)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1307 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1308 rr.aaaa = table.concat(addr, ":"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1309 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1310 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1311 function resolver:CNAME(rr) -- - - - - - - - - - - - - - - - - - - - CNAME |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1312 rr.cname = self:name(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1313 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1314 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1315 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1316 function resolver:MX(rr) -- - - - - - - - - - - - - - - - - - - - - - - MX |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1317 rr.pref = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1318 rr.mx = self:name(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1319 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1320 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1321 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1322 function resolver:LOC_nibble_power() -- - - - - - - - - - LOC_nibble_power |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1323 local b = self:byte(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1324 --print('nibbles', ((b-(b%0x10))/0x10), (b%0x10)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1325 return ((b-(b%0x10))/0x10) * (10^(b%0x10)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1326 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1327 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1328 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1329 function resolver:LOC(rr) -- - - - - - - - - - - - - - - - - - - - - - LOC |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1330 rr.version = self:byte(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1331 if rr.version == 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1332 rr.loc = rr.loc or {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1333 rr.loc.size = self:LOC_nibble_power(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1334 rr.loc.horiz_pre = self:LOC_nibble_power(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1335 rr.loc.vert_pre = self:LOC_nibble_power(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1336 rr.loc.latitude = self:dword(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1337 rr.loc.longitude = self:dword(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1338 rr.loc.altitude = self:dword(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1339 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1340 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1341 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1342 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1343 local function LOC_tostring_degrees(f, pos, neg) -- - - - - - - - - - - - - |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1344 f = f - 0x80000000; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1345 if f < 0 then pos = neg; f = -f; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1346 local deg, min, msec; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1347 msec = f%60000; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1348 f = (f-msec)/60000; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1349 min = f%60; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1350 deg = (f-min)/60; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1351 return string.format('%3d %2d %2.3f %s', deg, min, msec/1000, pos); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1352 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1353 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1354 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1355 function resolver.LOC_tostring(rr) -- - - - - - - - - - - - - LOC_tostring |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1356 local t = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1357 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1358 --[[ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1359 for k,name in pairs { 'size', 'horiz_pre', 'vert_pre', 'latitude', 'longitude', 'altitude' } do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1360 append(t, string.format('%4s%-10s: %12.0f\n', '', name, rr.loc[name])); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1361 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1362 --]] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1363 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1364 append(t, string.format( |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1365 '%s %s %.2fm %.2fm %.2fm %.2fm', |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1366 LOC_tostring_degrees (rr.loc.latitude, 'N', 'S'), |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1367 LOC_tostring_degrees (rr.loc.longitude, 'E', 'W'), |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1368 (rr.loc.altitude - 10000000) / 100, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1369 rr.loc.size / 100, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1370 rr.loc.horiz_pre / 100, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1371 rr.loc.vert_pre / 100 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1372 )); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1373 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1374 return table.concat(t); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1375 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1376 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1377 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1378 function resolver:NS(rr) -- - - - - - - - - - - - - - - - - - - - - - - NS |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1379 rr.ns = self:name(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1380 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1381 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1382 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1383 function resolver:SOA(rr) -- - - - - - - - - - - - - - - - - - - - - - SOA |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1384 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1385 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1386 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1387 function resolver:SRV(rr) -- - - - - - - - - - - - - - - - - - - - - - SRV |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1388 rr.srv = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1389 rr.srv.priority = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1390 rr.srv.weight = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1391 rr.srv.port = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1392 rr.srv.target = self:name(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1393 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1394 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1395 function resolver:PTR(rr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1396 rr.ptr = self:name(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1397 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1398 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1399 function resolver:TXT(rr) -- - - - - - - - - - - - - - - - - - - - - - TXT |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1400 rr.txt = self:sub (self:byte()); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1401 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1402 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1403 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1404 function resolver:rr() -- - - - - - - - - - - - - - - - - - - - - - - - rr |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1405 local rr = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1406 setmetatable(rr, rr_metatable); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1407 rr.name = self:name(self); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1408 rr.type = dns.type[self:word()] or rr.type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1409 rr.class = dns.class[self:word()] or rr.class; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1410 rr.ttl = 0x10000*self:word() + self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1411 rr.rdlength = self:word(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1412 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1413 if rr.ttl <= 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1414 rr.tod = self.time + 30; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1415 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1416 rr.tod = self.time + rr.ttl; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1417 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1418 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1419 local remember = self.offset; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1420 local rr_parser = self[dns.type[rr.type]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1421 if rr_parser then rr_parser(self, rr); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1422 self.offset = remember; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1423 rr.rdata = self:sub(rr.rdlength); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1424 return rr; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1425 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1426 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1427 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1428 function resolver:rrs (count) -- - - - - - - - - - - - - - - - - - - - - rrs |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1429 local rrs = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1430 for i = 1,count do append(rrs, self:rr()); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1431 return rrs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1432 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1433 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1434 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1435 function resolver:decode(packet, force) -- - - - - - - - - - - - - - decode |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1436 self.packet, self.offset = packet, 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1437 local header = self:header(force); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1438 if not header then return nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1439 local response = { header = header }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1440 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1441 response.question = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1442 local offset = self.offset; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1443 for i = 1,response.header.qdcount do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1444 append(response.question, self:question()); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1445 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1446 response.question.raw = string.sub(self.packet, offset, self.offset - 1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1447 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1448 if not force then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1449 if not self.active[response.header.id] or not self.active[response.header.id][response.question.raw] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1450 return nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1451 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1452 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1453 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1454 response.answer = self:rrs(response.header.ancount); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1455 response.authority = self:rrs(response.header.nscount); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1456 response.additional = self:rrs(response.header.arcount); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1457 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1458 return response; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1459 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1460 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1461 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1462 -- socket layer -------------------------------------------------- socket layer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1463 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1464 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1465 resolver.delays = { 1, 3 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1466 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1467 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1468 function resolver:addnameserver(address) -- - - - - - - - - - addnameserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1469 self.server = self.server or {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1470 append(self.server, address); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1471 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1472 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1473 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1474 function resolver:setnameserver(address) -- - - - - - - - - - setnameserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1475 self.server = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1476 self:addnameserver(address); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1477 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1478 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1479 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1480 function resolver:adddefaultnameservers() -- - - - - adddefaultnameservers |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1481 if is_windows then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1482 if windows and windows.get_nameservers then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1483 for _, server in ipairs(windows.get_nameservers()) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1484 self:addnameserver(server); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1485 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1486 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1487 if not self.server or #self.server == 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1488 -- TODO log warning about no nameservers, adding opendns servers as fallback |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1489 self:addnameserver("208.67.222.222"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1490 self:addnameserver("208.67.220.220"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1491 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1492 else -- posix |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1493 local resolv_conf = io.open("/etc/resolv.conf"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1494 if resolv_conf then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1495 for line in resolv_conf:lines() do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1496 line = line:gsub("#.*$", "") |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1497 :match('^%s*nameserver%s+(.*)%s*$'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1498 if line then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1499 line:gsub("%f[%d.](%d+%.%d+%.%d+%.%d+)%f[^%d.]", function (address) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1500 self:addnameserver(address) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1501 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1502 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1503 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1504 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1505 if not self.server or #self.server == 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1506 -- TODO log warning about no nameservers, adding localhost as the default nameserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1507 self:addnameserver("127.0.0.1"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1508 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1509 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1510 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1511 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1512 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1513 function resolver:getsocket(servernum) -- - - - - - - - - - - - - getsocket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1514 self.socket = self.socket or {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1515 self.socketset = self.socketset or {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1516 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1517 local sock = self.socket[servernum]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1518 if sock then return sock; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1519 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1520 local err; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1521 sock, err = socket.udp(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1522 if not sock then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1523 return nil, err; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1524 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1525 if self.socket_wrapper then sock = self.socket_wrapper(sock, self); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1526 sock:settimeout(0); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1527 -- todo: attempt to use a random port, fallback to 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1528 sock:setsockname('*', 0); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1529 sock:setpeername(self.server[servernum], 53); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1530 self.socket[servernum] = sock; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1531 self.socketset[sock] = servernum; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1532 return sock; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1533 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1534 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1535 function resolver:voidsocket(sock) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1536 if self.socket[sock] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1537 self.socketset[self.socket[sock]] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1538 self.socket[sock] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1539 elseif self.socketset[sock] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1540 self.socket[self.socketset[sock]] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1541 self.socketset[sock] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1542 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1543 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1544 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1545 function resolver:socket_wrapper_set(func) -- - - - - - - socket_wrapper_set |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1546 self.socket_wrapper = func; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1547 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1548 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1549 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1550 function resolver:closeall () -- - - - - - - - - - - - - - - - - - closeall |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1551 for i,sock in ipairs(self.socket) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1552 self.socket[i] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1553 self.socketset[sock] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1554 sock:close(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1555 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1556 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1557 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1558 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1559 function resolver:remember(rr, type) -- - - - - - - - - - - - - - remember |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1560 --print ('remember', type, rr.class, rr.type, rr.name) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1561 local qname, qtype, qclass = standardize(rr.name, rr.type, rr.class); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1562 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1563 if type ~= '*' then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1564 type = qtype; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1565 local all = get(self.cache, qclass, '*', qname); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1566 --print('remember all', all); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1567 if all then append(all, rr); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1568 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1569 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1570 self.cache = self.cache or setmetatable({}, cache_metatable); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1571 local rrs = get(self.cache, qclass, type, qname) or |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1572 set(self.cache, qclass, type, qname, setmetatable({}, rrs_metatable)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1573 append(rrs, rr); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1574 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1575 if type == 'MX' then self.unsorted[rrs] = true; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1576 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1577 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1578 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1579 local function comp_mx(a, b) -- - - - - - - - - - - - - - - - - - - comp_mx |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1580 return (a.pref == b.pref) and (a.mx < b.mx) or (a.pref < b.pref); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1581 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1582 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1583 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1584 function resolver:peek (qname, qtype, qclass) -- - - - - - - - - - - - peek |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1585 qname, qtype, qclass = standardize(qname, qtype, qclass); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1586 local rrs = get(self.cache, qclass, qtype, qname); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1587 if not rrs then return nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1588 if prune(rrs, socket.gettime()) and qtype == '*' or not next(rrs) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1589 set(self.cache, qclass, qtype, qname, nil); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1590 return nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1591 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1592 if self.unsorted[rrs] then table.sort (rrs, comp_mx); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1593 return rrs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1594 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1595 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1596 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1597 function resolver:purge(soft) -- - - - - - - - - - - - - - - - - - - purge |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1598 if soft == 'soft' then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1599 self.time = socket.gettime(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1600 for class,types in pairs(self.cache or {}) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1601 for type,names in pairs(types) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1602 for name,rrs in pairs(names) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1603 prune(rrs, self.time, 'soft') |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1604 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1605 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1606 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1607 else self.cache = {}; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1608 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1609 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1610 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1611 function resolver:query(qname, qtype, qclass) -- - - - - - - - - - -- query |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1612 qname, qtype, qclass = standardize(qname, qtype, qclass) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1613 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1614 if not self.server then self:adddefaultnameservers(); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1615 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1616 local question = encodeQuestion(qname, qtype, qclass); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1617 local peek = self:peek (qname, qtype, qclass); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1618 if peek then return peek; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1619 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1620 local header, id = encodeHeader(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1621 --print ('query id', id, qclass, qtype, qname) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1622 local o = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1623 packet = header..question, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1624 server = self.best_server, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1625 delay = 1, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1626 retry = socket.gettime() + self.delays[1] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1627 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1628 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1629 -- remember the query |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1630 self.active[id] = self.active[id] or {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1631 self.active[id][question] = o; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1632 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1633 -- remember which coroutine wants the answer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1634 local co = coroutine.running(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1635 if co then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1636 set(self.wanted, qclass, qtype, qname, co, true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1637 --set(self.yielded, co, qclass, qtype, qname, true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1638 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1639 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1640 local conn, err = self:getsocket(o.server) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1641 if not conn then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1642 return nil, err; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1643 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1644 conn:send (o.packet) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1645 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1646 if timer and self.timeout then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1647 local num_servers = #self.server; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1648 local i = 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1649 timer.add_task(self.timeout, function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1650 if get(self.wanted, qclass, qtype, qname, co) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1651 if i < num_servers then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1652 i = i + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1653 self:servfail(conn); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1654 o.server = self.best_server; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1655 conn, err = self:getsocket(o.server); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1656 if conn then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1657 conn:send(o.packet); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1658 return self.timeout; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1659 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1660 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1661 -- Tried everything, failed |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1662 self:cancel(qclass, qtype, qname, co, true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1663 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1664 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1665 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1666 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1667 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1668 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1669 function resolver:servfail(sock) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1670 -- Resend all queries for this server |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1671 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1672 local num = self.socketset[sock] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1673 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1674 -- Socket is dead now |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1675 self:voidsocket(sock); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1676 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1677 -- Find all requests to the down server, and retry on the next server |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1678 self.time = socket.gettime(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1679 for id,queries in pairs(self.active) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1680 for question,o in pairs(queries) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1681 if o.server == num then -- This request was to the broken server |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1682 o.server = o.server + 1 -- Use next server |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1683 if o.server > #self.server then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1684 o.server = 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1685 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1686 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1687 o.retries = (o.retries or 0) + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1688 if o.retries >= #self.server then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1689 --print('timeout'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1690 queries[question] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1691 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1692 local _a = self:getsocket(o.server); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1693 if _a then _a:send(o.packet); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1694 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1695 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1696 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1697 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1698 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1699 if num == self.best_server then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1700 self.best_server = self.best_server + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1701 if self.best_server > #self.server then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1702 -- Exhausted all servers, try first again |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1703 self.best_server = 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1704 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1705 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1706 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1707 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1708 function resolver:settimeout(seconds) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1709 self.timeout = seconds; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1710 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1711 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1712 function resolver:receive(rset) -- - - - - - - - - - - - - - - - - receive |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1713 --print('receive'); print(self.socket); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1714 self.time = socket.gettime(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1715 rset = rset or self.socket; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1716 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1717 local response; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1718 for i,sock in pairs(rset) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1719 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1720 if self.socketset[sock] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1721 local packet = sock:receive(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1722 if packet then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1723 response = self:decode(packet); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1724 if response and self.active[response.header.id] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1725 and self.active[response.header.id][response.question.raw] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1726 --print('received response'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1727 --self.print(response); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1728 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1729 for j,rr in pairs(response.answer) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1730 if rr.name:sub(-#response.question[1].name, -1) == response.question[1].name then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1731 self:remember(rr, response.question[1].type) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1732 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1733 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1734 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1735 -- retire the query |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1736 local queries = self.active[response.header.id]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1737 queries[response.question.raw] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1738 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1739 if not next(queries) then self.active[response.header.id] = nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1740 if not next(self.active) then self:closeall(); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1741 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1742 -- was the query on the wanted list? |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1743 local q = response.question[1]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1744 local cos = get(self.wanted, q.class, q.type, q.name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1745 if cos then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1746 for co in pairs(cos) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1747 set(self.yielded, co, q.class, q.type, q.name, nil); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1748 if coroutine.status(co) == "suspended" then coroutine.resume(co); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1749 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1750 set(self.wanted, q.class, q.type, q.name, nil); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1751 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1752 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1753 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1754 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1755 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1756 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1757 return response; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1758 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1759 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1760 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1761 function resolver:feed(sock, packet, force) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1762 --print('receive'); print(self.socket); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1763 self.time = socket.gettime(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1764 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1765 local response = self:decode(packet, force); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1766 if response and self.active[response.header.id] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1767 and self.active[response.header.id][response.question.raw] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1768 --print('received response'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1769 --self.print(response); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1770 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1771 for j,rr in pairs(response.answer) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1772 self:remember(rr, response.question[1].type); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1773 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1774 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1775 -- retire the query |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1776 local queries = self.active[response.header.id]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1777 queries[response.question.raw] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1778 if not next(queries) then self.active[response.header.id] = nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1779 if not next(self.active) then self:closeall(); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1780 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1781 -- was the query on the wanted list? |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1782 local q = response.question[1]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1783 if q then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1784 local cos = get(self.wanted, q.class, q.type, q.name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1785 if cos then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1786 for co in pairs(cos) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1787 set(self.yielded, co, q.class, q.type, q.name, nil); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1788 if coroutine.status(co) == "suspended" then coroutine.resume(co); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1789 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1790 set(self.wanted, q.class, q.type, q.name, nil); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1791 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1792 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1793 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1794 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1795 return response; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1796 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1797 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1798 function resolver:cancel(qclass, qtype, qname, co, call_handler) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1799 local cos = get(self.wanted, qclass, qtype, qname); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1800 if cos then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1801 if call_handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1802 coroutine.resume(co); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1803 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1804 cos[co] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1805 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1806 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1807 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1808 function resolver:pulse() -- - - - - - - - - - - - - - - - - - - - - pulse |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1809 --print(':pulse'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1810 while self:receive() do end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1811 if not next(self.active) then return nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1812 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1813 self.time = socket.gettime(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1814 for id,queries in pairs(self.active) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1815 for question,o in pairs(queries) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1816 if self.time >= o.retry then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1817 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1818 o.server = o.server + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1819 if o.server > #self.server then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1820 o.server = 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1821 o.delay = o.delay + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1822 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1823 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1824 if o.delay > #self.delays then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1825 --print('timeout'); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1826 queries[question] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1827 if not next(queries) then self.active[id] = nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1828 if not next(self.active) then return nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1829 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1830 --print('retry', o.server, o.delay); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1831 local _a = self.socket[o.server]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1832 if _a then _a:send(o.packet); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1833 o.retry = self.time + self.delays[o.delay]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1834 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1835 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1836 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1837 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1838 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1839 if next(self.active) then return true; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1840 return nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1841 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1842 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1843 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1844 function resolver:lookup(qname, qtype, qclass) -- - - - - - - - - - lookup |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1845 self:query (qname, qtype, qclass) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1846 while self:pulse() do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1847 local recvt = {} |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1848 for i, s in ipairs(self.socket) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1849 recvt[i] = s |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1850 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1851 socket.select(recvt, nil, 4) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1852 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1853 --print(self.cache); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1854 return self:peek(qname, qtype, qclass); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1855 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1856 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1857 function resolver:lookupex(handler, qname, qtype, qclass) -- - - - - - - - - - lookup |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1858 return self:peek(qname, qtype, qclass) or self:query(qname, qtype, qclass); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1859 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1860 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1861 function resolver:tohostname(ip) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1862 return dns.lookup(ip:gsub("(%d+)%.(%d+)%.(%d+)%.(%d+)", "%4.%3.%2.%1.in-addr.arpa."), "PTR"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1863 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1864 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1865 --print ---------------------------------------------------------------- print |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1866 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1867 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1868 local hints = { -- - - - - - - - - - - - - - - - - - - - - - - - - - - hints |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1869 qr = { [0]='query', 'response' }, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1870 opcode = { [0]='query', 'inverse query', 'server status request' }, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1871 aa = { [0]='non-authoritative', 'authoritative' }, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1872 tc = { [0]='complete', 'truncated' }, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1873 rd = { [0]='recursion not desired', 'recursion desired' }, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1874 ra = { [0]='recursion not available', 'recursion available' }, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1875 z = { [0]='(reserved)' }, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1876 rcode = { [0]='no error', 'format error', 'server failure', 'name error', 'not implemented' }, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1877 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1878 type = dns.type, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1879 class = dns.class |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1880 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1881 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1882 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1883 local function hint(p, s) -- - - - - - - - - - - - - - - - - - - - - - hint |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1884 return (hints[s] and hints[s][p[s]]) or ''; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1885 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1886 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1887 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1888 function resolver.print(response) -- - - - - - - - - - - - - resolver.print |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1889 for s,s in pairs { 'id', 'qr', 'opcode', 'aa', 'tc', 'rd', 'ra', 'z', |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1890 'rcode', 'qdcount', 'ancount', 'nscount', 'arcount' } do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1891 print( string.format('%-30s', 'header.'..s), response.header[s], hint(response.header, s) ); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1892 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1893 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1894 for i,question in ipairs(response.question) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1895 print(string.format ('question[%i].name ', i), question.name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1896 print(string.format ('question[%i].type ', i), question.type); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1897 print(string.format ('question[%i].class ', i), question.class); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1898 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1899 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1900 local common = { name=1, type=1, class=1, ttl=1, rdlength=1, rdata=1 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1901 local tmp; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1902 for s,s in pairs({'answer', 'authority', 'additional'}) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1903 for i,rr in pairs(response[s]) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1904 for j,t in pairs({ 'name', 'type', 'class', 'ttl', 'rdlength' }) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1905 tmp = string.format('%s[%i].%s', s, i, t); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1906 print(string.format('%-30s', tmp), rr[t], hint(rr, t)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1907 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1908 for j,t in pairs(rr) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1909 if not common[j] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1910 tmp = string.format('%s[%i].%s', s, i, j); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1911 print(string.format('%-30s %s', tostring(tmp), tostring(t))); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1912 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1913 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1914 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1915 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1916 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1917 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1918 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1919 -- module api ------------------------------------------------------ module api |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1920 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1921 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1922 function dns.resolver () -- - - - - - - - - - - - - - - - - - - - - resolver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1923 -- this function seems to be redundant with resolver.new () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1924 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1925 local r = { active = {}, cache = {}, unsorted = {}, wanted = {}, yielded = {}, best_server = 1 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1926 setmetatable (r, resolver); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1927 setmetatable (r.cache, cache_metatable); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1928 setmetatable (r.unsorted, { __mode = 'kv' }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1929 return r; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1930 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1931 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1932 local _resolver = dns.resolver(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1933 dns._resolver = _resolver; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1934 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1935 function dns.lookup(...) -- - - - - - - - - - - - - - - - - - - - - lookup |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1936 return _resolver:lookup(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1937 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1938 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1939 function dns.tohostname(...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1940 return _resolver:tohostname(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1941 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1942 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1943 function dns.purge(...) -- - - - - - - - - - - - - - - - - - - - - - purge |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1944 return _resolver:purge(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1945 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1946 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1947 function dns.peek(...) -- - - - - - - - - - - - - - - - - - - - - - - peek |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1948 return _resolver:peek(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1949 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1950 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1951 function dns.query(...) -- - - - - - - - - - - - - - - - - - - - - - query |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1952 return _resolver:query(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1953 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1954 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1955 function dns.feed(...) -- - - - - - - - - - - - - - - - - - - - - - - feed |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1956 return _resolver:feed(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1957 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1958 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1959 function dns.cancel(...) -- - - - - - - - - - - - - - - - - - - - - - cancel |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1960 return _resolver:cancel(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1961 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1962 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1963 function dns.settimeout(...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1964 return _resolver:settimeout(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1965 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1966 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1967 function dns.socket_wrapper_set(...) -- - - - - - - - - socket_wrapper_set |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1968 return _resolver:socket_wrapper_set(...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1969 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1970 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1971 return dns; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1972 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1973 package.preload['net.adns'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1974 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1975 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1976 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1977 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1978 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1979 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1980 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1981 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1982 local server = require "net.server"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1983 local dns = require "net.dns"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1984 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1985 local log = require "util.logger".init("adns"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1986 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1987 local t_insert, t_remove = table.insert, table.remove; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1988 local coroutine, tostring, pcall = coroutine, tostring, pcall; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1989 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1990 local function dummy_send(sock, data, i, j) return (j-i)+1; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1991 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1992 module "adns" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1993 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1994 function lookup(handler, qname, qtype, qclass) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1995 return coroutine.wrap(function (peek) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1996 if peek then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1997 log("debug", "Records for %s already cached, using those...", qname); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1998 handler(peek); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
1999 return; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2000 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2001 log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running())); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2002 local ok, err = dns.query(qname, qtype, qclass); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2003 if ok then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2004 coroutine.yield({ qclass or "IN", qtype or "A", qname, coroutine.running()}); -- Wait for reply |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2005 log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running())); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2006 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2007 if ok then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2008 ok, err = pcall(handler, dns.peek(qname, qtype, qclass)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2009 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2010 log("error", "Error sending DNS query: %s", err); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2011 ok, err = pcall(handler, nil, err); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2012 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2013 if not ok then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2014 log("error", "Error in DNS response handler: %s", tostring(err)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2015 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2016 end)(dns.peek(qname, qtype, qclass)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2017 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2018 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2019 function cancel(handle, call_handler, reason) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2020 log("warn", "Cancelling DNS lookup for %s", tostring(handle[3])); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2021 dns.cancel(handle[1], handle[2], handle[3], handle[4], call_handler); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2022 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2023 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2024 function new_async_socket(sock, resolver) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2025 local peername = "<unknown>"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2026 local listener = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2027 local handler = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2028 function listener.onincoming(conn, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2029 if data then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2030 dns.feed(handler, data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2031 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2032 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2033 function listener.ondisconnect(conn, err) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2034 if err then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2035 log("warn", "DNS socket for %s disconnected: %s", peername, err); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2036 local servers = resolver.server; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2037 if resolver.socketset[conn] == resolver.best_server and resolver.best_server == #servers then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2038 log("error", "Exhausted all %d configured DNS servers, next lookup will try %s again", #servers, servers[1]); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2039 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2040 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2041 resolver:servfail(conn); -- Let the magic commence |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2042 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2043 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2044 handler = server.wrapclient(sock, "dns", 53, listener); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2045 if not handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2046 log("warn", "handler is nil"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2047 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2048 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2049 handler.settimeout = function () end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2050 handler.setsockname = function (_, ...) return sock:setsockname(...); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2051 handler.setpeername = function (_, ...) peername = (...); local ret = sock:setpeername(...); _:set_send(dummy_send); return ret; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2052 handler.connect = function (_, ...) return sock:connect(...) end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2053 --handler.send = function (_, data) _:write(data); return _.sendbuffer and _.sendbuffer(); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2054 handler.send = function (_, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2055 local getpeername = sock.getpeername; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2056 log("debug", "Sending DNS query to %s", (getpeername and getpeername(sock)) or "<unconnected>"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2057 return sock:send(data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2058 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2059 return handler; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2060 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2061 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2062 dns.socket_wrapper_set(new_async_socket); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2063 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2064 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2065 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2066 package.preload['net.server'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2067 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2068 -- server.lua by blastbeat of the luadch project |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2069 -- Re-used here under the MIT/X Consortium License |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2070 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2071 -- Modifications (C) 2008-2010 Matthew Wild, Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2072 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2073 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2074 -- // wrapping luadch stuff // -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2075 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2076 local use = function( what ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2077 return _G[ what ] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2078 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2079 local clean = function( tbl ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2080 for i, k in pairs( tbl ) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2081 tbl[ i ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2082 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2083 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2084 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2085 local log, table_concat = require ("util.logger").init("socket"), table.concat; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2086 local out_put = function (...) return log("debug", table_concat{...}); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2087 local out_error = function (...) return log("warn", table_concat{...}); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2088 local mem_free = collectgarbage |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2089 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2090 ----------------------------------// DECLARATION //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2091 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2092 --// constants //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2093 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2094 local STAT_UNIT = 1 -- byte |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2095 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2096 --// lua functions //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2097 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2098 local type = use "type" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2099 local pairs = use "pairs" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2100 local ipairs = use "ipairs" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2101 local tonumber = use "tonumber" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2102 local tostring = use "tostring" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2103 local collectgarbage = use "collectgarbage" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2104 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2105 --// lua libs //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2106 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2107 local os = use "os" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2108 local table = use "table" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2109 local string = use "string" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2110 local coroutine = use "coroutine" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2111 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2112 --// lua lib methods //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2113 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2114 local os_difftime = os.difftime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2115 local math_min = math.min |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2116 local math_huge = math.huge |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2117 local table_concat = table.concat |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2118 local table_remove = table.remove |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2119 local string_len = string.len |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2120 local string_sub = string.sub |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2121 local coroutine_wrap = coroutine.wrap |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2122 local coroutine_yield = coroutine.yield |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2123 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2124 --// extern libs //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2125 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2126 local luasec = use "ssl" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2127 local luasocket = use "socket" or require "socket" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2128 local luasocket_gettime = luasocket.gettime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2129 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2130 --// extern lib methods //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2131 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2132 local ssl_wrap = ( luasec and luasec.wrap ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2133 local socket_bind = luasocket.bind |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2134 local socket_sleep = luasocket.sleep |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2135 local socket_select = luasocket.select |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2136 local ssl_newcontext = ( luasec and luasec.newcontext ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2137 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2138 --// functions //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2139 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2140 local id |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2141 local loop |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2142 local stats |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2143 local idfalse |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2144 local addtimer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2145 local closeall |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2146 local addsocket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2147 local addserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2148 local getserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2149 local wrapserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2150 local getsettings |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2151 local closesocket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2152 local removesocket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2153 local removeserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2154 local changetimeout |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2155 local wrapconnection |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2156 local changesettings |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2157 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2158 --// tables //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2159 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2160 local _server |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2161 local _readlist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2162 local _timerlist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2163 local _sendlist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2164 local _socketlist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2165 local _closelist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2166 local _readtimes |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2167 local _writetimes |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2168 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2169 --// simple data types //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2170 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2171 local _ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2172 local _readlistlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2173 local _sendlistlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2174 local _timerlistlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2175 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2176 local _sendtraffic |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2177 local _readtraffic |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2178 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2179 local _selecttimeout |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2180 local _sleeptime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2181 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2182 local _starttime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2183 local _currenttime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2184 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2185 local _maxsendlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2186 local _maxreadlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2187 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2188 local _checkinterval |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2189 local _sendtimeout |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2190 local _readtimeout |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2191 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2192 local _cleanqueue |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2193 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2194 local _timer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2195 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2196 local _maxclientsperserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2197 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2198 local _maxsslhandshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2199 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2200 ----------------------------------// DEFINITION //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2201 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2202 _server = { } -- key = port, value = table; list of listening servers |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2203 _readlist = { } -- array with sockets to read from |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2204 _sendlist = { } -- arrary with sockets to write to |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2205 _timerlist = { } -- array of timer functions |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2206 _socketlist = { } -- key = socket, value = wrapped socket (handlers) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2207 _readtimes = { } -- key = handler, value = timestamp of last data reading |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2208 _writetimes = { } -- key = handler, value = timestamp of last data writing/sending |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2209 _closelist = { } -- handlers to close |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2210 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2211 _readlistlen = 0 -- length of readlist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2212 _sendlistlen = 0 -- length of sendlist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2213 _timerlistlen = 0 -- lenght of timerlist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2214 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2215 _sendtraffic = 0 -- some stats |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2216 _readtraffic = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2217 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2218 _selecttimeout = 1 -- timeout of socket.select |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2219 _sleeptime = 0 -- time to wait at the end of every loop |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2220 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2221 _maxsendlen = 51000 * 1024 -- max len of send buffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2222 _maxreadlen = 25000 * 1024 -- max len of read buffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2223 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2224 _checkinterval = 1200000 -- interval in secs to check idle clients |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2225 _sendtimeout = 60000 -- allowed send idle time in secs |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2226 _readtimeout = 6 * 60 * 60 -- allowed read idle time in secs |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2227 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2228 _cleanqueue = false -- clean bufferqueue after using |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2229 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2230 _maxclientsperserver = 1000 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2231 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2232 _maxsslhandshake = 30 -- max handshake round-trips |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2233 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2234 ----------------------------------// PRIVATE //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2235 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2236 wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxconnections ) -- this function wraps a server |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2237 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2238 maxconnections = maxconnections or _maxclientsperserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2239 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2240 local connections = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2241 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2242 local dispatch, disconnect = listeners.onconnect or listeners.onincoming, listeners.ondisconnect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2243 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2244 local accept = socket.accept |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2245 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2246 --// public methods of the object //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2247 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2248 local handler = { } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2249 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2250 handler.shutdown = function( ) end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2251 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2252 handler.ssl = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2253 return sslctx ~= nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2254 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2255 handler.sslctx = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2256 return sslctx |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2257 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2258 handler.remove = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2259 connections = connections - 1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2260 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2261 handler.close = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2262 for _, handler in pairs( _socketlist ) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2263 if handler.serverport == serverport then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2264 handler.disconnect( handler, "server closed" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2265 handler:close( true ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2266 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2267 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2268 socket:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2269 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2270 _readlistlen = removesocket( _readlist, socket, _readlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2271 _socketlist[ socket ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2272 handler = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2273 socket = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2274 --mem_free( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2275 out_put "server.lua: closed server handler and removed sockets from list" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2276 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2277 handler.ip = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2278 return ip |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2279 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2280 handler.serverport = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2281 return serverport |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2282 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2283 handler.socket = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2284 return socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2285 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2286 handler.readbuffer = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2287 if connections > maxconnections then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2288 out_put( "server.lua: refused new client connection: server full" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2289 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2290 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2291 local client, err = accept( socket ) -- try to accept |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2292 if client then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2293 local ip, clientport = client:getpeername( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2294 client:settimeout( 0 ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2295 local handler, client, err = wrapconnection( handler, listeners, client, ip, serverport, clientport, pattern, sslctx ) -- wrap new client socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2296 if err then -- error while wrapping ssl socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2297 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2298 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2299 connections = connections + 1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2300 out_put( "server.lua: accepted new client connection from ", tostring(ip), ":", tostring(clientport), " to ", tostring(serverport)) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2301 return dispatch( handler ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2302 elseif err then -- maybe timeout or something else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2303 out_put( "server.lua: error with new client connection: ", tostring(err) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2304 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2305 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2306 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2307 return handler |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2308 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2309 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2310 wrapconnection = function( server, listeners, socket, ip, serverport, clientport, pattern, sslctx ) -- this function wraps a client to a handler object |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2311 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2312 socket:settimeout( 0 ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2313 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2314 --// local import of socket methods //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2315 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2316 local send |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2317 local receive |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2318 local shutdown |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2319 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2320 --// private closures of the object //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2321 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2322 local ssl |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2323 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2324 local dispatch = listeners.onincoming |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2325 local status = listeners.onstatus |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2326 local disconnect = listeners.ondisconnect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2327 local drain = listeners.ondrain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2328 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2329 local bufferqueue = { } -- buffer array |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2330 local bufferqueuelen = 0 -- end of buffer array |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2331 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2332 local toclose |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2333 local fatalerror |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2334 local needtls |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2335 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2336 local bufferlen = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2337 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2338 local noread = false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2339 local nosend = false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2340 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2341 local sendtraffic, readtraffic = 0, 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2342 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2343 local maxsendlen = _maxsendlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2344 local maxreadlen = _maxreadlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2345 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2346 --// public methods of the object //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2347 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2348 local handler = bufferqueue -- saves a table ^_^ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2349 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2350 handler.dispatch = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2351 return dispatch |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2352 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2353 handler.disconnect = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2354 return disconnect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2355 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2356 handler.setlistener = function( self, listeners ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2357 dispatch = listeners.onincoming |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2358 disconnect = listeners.ondisconnect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2359 status = listeners.onstatus |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2360 drain = listeners.ondrain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2361 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2362 handler.getstats = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2363 return readtraffic, sendtraffic |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2364 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2365 handler.ssl = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2366 return ssl |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2367 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2368 handler.sslctx = function ( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2369 return sslctx |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2370 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2371 handler.send = function( _, data, i, j ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2372 return send( socket, data, i, j ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2373 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2374 handler.receive = function( pattern, prefix ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2375 return receive( socket, pattern, prefix ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2376 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2377 handler.shutdown = function( pattern ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2378 return shutdown( socket, pattern ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2379 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2380 handler.setoption = function (self, option, value) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2381 if socket.setoption then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2382 return socket:setoption(option, value); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2383 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2384 return false, "setoption not implemented"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2385 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2386 handler.close = function( self, forced ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2387 if not handler then return true; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2388 _readlistlen = removesocket( _readlist, socket, _readlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2389 _readtimes[ handler ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2390 if bufferqueuelen ~= 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2391 if not ( forced or fatalerror ) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2392 handler.sendbuffer( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2393 if bufferqueuelen ~= 0 then -- try again... |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2394 if handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2395 handler.write = nil -- ... but no further writing allowed |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2396 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2397 toclose = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2398 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2399 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2400 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2401 send( socket, table_concat( bufferqueue, "", 1, bufferqueuelen ), 1, bufferlen ) -- forced send |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2402 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2403 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2404 if socket then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2405 _ = shutdown and shutdown( socket ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2406 socket:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2407 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2408 _socketlist[ socket ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2409 socket = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2410 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2411 out_put "server.lua: socket already closed" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2412 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2413 if handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2414 _writetimes[ handler ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2415 _closelist[ handler ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2416 handler = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2417 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2418 if server then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2419 server.remove( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2420 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2421 out_put "server.lua: closed client handler and removed socket from list" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2422 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2423 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2424 handler.ip = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2425 return ip |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2426 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2427 handler.serverport = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2428 return serverport |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2429 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2430 handler.clientport = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2431 return clientport |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2432 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2433 local write = function( self, data ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2434 bufferlen = bufferlen + string_len( data ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2435 if bufferlen > maxsendlen then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2436 _closelist[ handler ] = "send buffer exceeded" -- cannot close the client at the moment, have to wait to the end of the cycle |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2437 handler.write = idfalse -- dont write anymore |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2438 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2439 elseif socket and not _sendlist[ socket ] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2440 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2441 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2442 bufferqueuelen = bufferqueuelen + 1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2443 bufferqueue[ bufferqueuelen ] = data |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2444 if handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2445 _writetimes[ handler ] = _writetimes[ handler ] or _currenttime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2446 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2447 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2448 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2449 handler.write = write |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2450 handler.bufferqueue = function( self ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2451 return bufferqueue |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2452 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2453 handler.socket = function( self ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2454 return socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2455 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2456 handler.set_mode = function( self, new ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2457 pattern = new or pattern |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2458 return pattern |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2459 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2460 handler.set_send = function ( self, newsend ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2461 send = newsend or send |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2462 return send |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2463 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2464 handler.bufferlen = function( self, readlen, sendlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2465 maxsendlen = sendlen or maxsendlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2466 maxreadlen = readlen or maxreadlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2467 return bufferlen, maxreadlen, maxsendlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2468 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2469 --TODO: Deprecate |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2470 handler.lock_read = function (self, switch) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2471 if switch == true then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2472 local tmp = _readlistlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2473 _readlistlen = removesocket( _readlist, socket, _readlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2474 _readtimes[ handler ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2475 if _readlistlen ~= tmp then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2476 noread = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2477 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2478 elseif switch == false then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2479 if noread then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2480 noread = false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2481 _readlistlen = addsocket(_readlist, socket, _readlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2482 _readtimes[ handler ] = _currenttime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2483 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2484 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2485 return noread |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2486 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2487 handler.pause = function (self) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2488 return self:lock_read(true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2489 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2490 handler.resume = function (self) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2491 return self:lock_read(false); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2492 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2493 handler.lock = function( self, switch ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2494 handler.lock_read (switch) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2495 if switch == true then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2496 handler.write = idfalse |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2497 local tmp = _sendlistlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2498 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2499 _writetimes[ handler ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2500 if _sendlistlen ~= tmp then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2501 nosend = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2502 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2503 elseif switch == false then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2504 handler.write = write |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2505 if nosend then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2506 nosend = false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2507 write( "" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2508 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2509 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2510 return noread, nosend |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2511 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2512 local _readbuffer = function( ) -- this function reads data |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2513 local buffer, err, part = receive( socket, pattern ) -- receive buffer with "pattern" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2514 if not err or (err == "wantread" or err == "timeout") then -- received something |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2515 local buffer = buffer or part or "" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2516 local len = string_len( buffer ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2517 if len > maxreadlen then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2518 disconnect( handler, "receive buffer exceeded" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2519 handler:close( true ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2520 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2521 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2522 local count = len * STAT_UNIT |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2523 readtraffic = readtraffic + count |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2524 _readtraffic = _readtraffic + count |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2525 _readtimes[ handler ] = _currenttime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2526 --out_put( "server.lua: read data '", buffer:gsub("[^%w%p ]", "."), "', error: ", err ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2527 return dispatch( handler, buffer, err ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2528 else -- connections was closed or fatal error |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2529 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " read error: ", tostring(err) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2530 fatalerror = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2531 disconnect( handler, err ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2532 _ = handler and handler:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2533 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2534 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2535 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2536 local _sendbuffer = function( ) -- this function sends data |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2537 local succ, err, byte, buffer, count; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2538 local count; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2539 if socket then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2540 buffer = table_concat( bufferqueue, "", 1, bufferqueuelen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2541 succ, err, byte = send( socket, buffer, 1, bufferlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2542 count = ( succ or byte or 0 ) * STAT_UNIT |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2543 sendtraffic = sendtraffic + count |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2544 _sendtraffic = _sendtraffic + count |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2545 _ = _cleanqueue and clean( bufferqueue ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2546 --out_put( "server.lua: sended '", buffer, "', bytes: ", tostring(succ), ", error: ", tostring(err), ", part: ", tostring(byte), ", to: ", tostring(ip), ":", tostring(clientport) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2547 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2548 succ, err, count = false, "closed", 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2549 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2550 if succ then -- sending succesful |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2551 bufferqueuelen = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2552 bufferlen = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2553 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2554 _writetimes[ handler ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2555 if drain then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2556 drain(handler) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2557 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2558 _ = needtls and handler:starttls(nil) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2559 _ = toclose and handler:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2560 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2561 elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2562 buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2563 bufferqueue[ 1 ] = buffer -- insert new buffer in queue |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2564 bufferqueuelen = 1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2565 bufferlen = bufferlen - byte |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2566 _writetimes[ handler ] = _currenttime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2567 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2568 else -- connection was closed during sending or fatal error |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2569 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " write error: ", tostring(err) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2570 fatalerror = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2571 disconnect( handler, err ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2572 _ = handler and handler:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2573 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2574 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2575 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2576 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2577 -- Set the sslctx |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2578 local handshake; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2579 function handler.set_sslctx(self, new_sslctx) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2580 ssl = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2581 sslctx = new_sslctx; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2582 local wrote |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2583 local read |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2584 handshake = coroutine_wrap( function( client ) -- create handshake coroutine |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2585 local err |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2586 for i = 1, _maxsslhandshake do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2587 _sendlistlen = ( wrote and removesocket( _sendlist, client, _sendlistlen ) ) or _sendlistlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2588 _readlistlen = ( read and removesocket( _readlist, client, _readlistlen ) ) or _readlistlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2589 read, wrote = nil, nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2590 _, err = client:dohandshake( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2591 if not err then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2592 out_put( "server.lua: ssl handshake done" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2593 handler.readbuffer = _readbuffer -- when handshake is done, replace the handshake function with regular functions |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2594 handler.sendbuffer = _sendbuffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2595 _ = status and status( handler, "ssl-handshake-complete" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2596 _readlistlen = addsocket(_readlist, client, _readlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2597 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2598 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2599 if err == "wantwrite" and not wrote then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2600 _sendlistlen = addsocket(_sendlist, client, _sendlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2601 wrote = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2602 elseif err == "wantread" and not read then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2603 _readlistlen = addsocket(_readlist, client, _readlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2604 read = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2605 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2606 out_put( "server.lua: ssl handshake error: ", tostring(err) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2607 break; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2608 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2609 --coroutine_yield( handler, nil, err ) -- handshake not finished |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2610 coroutine_yield( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2611 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2612 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2613 disconnect( handler, "ssl handshake failed" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2614 _ = handler and handler:close( true ) -- forced disconnect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2615 return false -- handshake failed |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2616 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2617 ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2618 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2619 if luasec then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2620 if sslctx then -- ssl? |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2621 handler:set_sslctx(sslctx); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2622 out_put("server.lua: ", "starting ssl handshake") |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2623 local err |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2624 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2625 if err then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2626 out_put( "server.lua: ssl error: ", tostring(err) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2627 --mem_free( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2628 return nil, nil, err -- fatal error |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2629 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2630 socket:settimeout( 0 ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2631 handler.readbuffer = handshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2632 handler.sendbuffer = handshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2633 handshake( socket ) -- do handshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2634 if not socket then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2635 return nil, nil, "ssl handshake failed"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2636 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2637 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2638 local sslctx; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2639 handler.starttls = function( self, _sslctx) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2640 if _sslctx then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2641 sslctx = _sslctx; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2642 handler:set_sslctx(sslctx); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2643 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2644 if bufferqueuelen > 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2645 out_put "server.lua: we need to do tls, but delaying until send buffer empty" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2646 needtls = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2647 return |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2648 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2649 out_put( "server.lua: attempting to start tls on " .. tostring( socket ) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2650 local oldsocket, err = socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2651 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2652 --out_put( "server.lua: sslwrapped socket is " .. tostring( socket ) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2653 if err then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2654 out_put( "server.lua: error while starting tls on client: ", tostring(err) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2655 return nil, err -- fatal error |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2656 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2657 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2658 socket:settimeout( 0 ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2659 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2660 -- add the new socket to our system |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2661 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2662 send = socket.send |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2663 receive = socket.receive |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2664 shutdown = id |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2665 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2666 _socketlist[ socket ] = handler |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2667 _readlistlen = addsocket(_readlist, socket, _readlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2668 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2669 -- remove traces of the old socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2670 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2671 _readlistlen = removesocket( _readlist, oldsocket, _readlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2672 _sendlistlen = removesocket( _sendlist, oldsocket, _sendlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2673 _socketlist[ oldsocket ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2674 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2675 handler.starttls = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2676 needtls = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2677 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2678 -- Secure now |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2679 ssl = true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2680 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2681 handler.readbuffer = handshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2682 handler.sendbuffer = handshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2683 handshake( socket ) -- do handshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2684 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2685 handler.readbuffer = _readbuffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2686 handler.sendbuffer = _sendbuffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2687 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2688 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2689 handler.readbuffer = _readbuffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2690 handler.sendbuffer = _sendbuffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2691 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2692 send = socket.send |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2693 receive = socket.receive |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2694 shutdown = ( ssl and id ) or socket.shutdown |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2695 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2696 _socketlist[ socket ] = handler |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2697 _readlistlen = addsocket(_readlist, socket, _readlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2698 return handler, socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2699 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2700 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2701 id = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2702 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2703 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2704 idfalse = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2705 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2706 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2707 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2708 addsocket = function( list, socket, len ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2709 if not list[ socket ] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2710 len = len + 1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2711 list[ len ] = socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2712 list[ socket ] = len |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2713 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2714 return len; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2715 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2716 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2717 removesocket = function( list, socket, len ) -- this function removes sockets from a list ( copied from copas ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2718 local pos = list[ socket ] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2719 if pos then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2720 list[ socket ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2721 local last = list[ len ] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2722 list[ len ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2723 if last ~= socket then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2724 list[ last ] = pos |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2725 list[ pos ] = last |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2726 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2727 return len - 1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2728 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2729 return len |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2730 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2731 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2732 closesocket = function( socket ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2733 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2734 _readlistlen = removesocket( _readlist, socket, _readlistlen ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2735 _socketlist[ socket ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2736 socket:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2737 --mem_free( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2738 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2739 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2740 local function link(sender, receiver, buffersize) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2741 local sender_locked; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2742 local _sendbuffer = receiver.sendbuffer; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2743 function receiver.sendbuffer() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2744 _sendbuffer(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2745 if sender_locked and receiver.bufferlen() < buffersize then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2746 sender:lock_read(false); -- Unlock now |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2747 sender_locked = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2748 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2749 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2750 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2751 local _readbuffer = sender.readbuffer; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2752 function sender.readbuffer() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2753 _readbuffer(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2754 if not sender_locked and receiver.bufferlen() >= buffersize then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2755 sender_locked = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2756 sender:lock_read(true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2757 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2758 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2759 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2760 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2761 ----------------------------------// PUBLIC //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2762 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2763 addserver = function( addr, port, listeners, pattern, sslctx ) -- this function provides a way for other scripts to reg a server |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2764 local err |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2765 if type( listeners ) ~= "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2766 err = "invalid listener table" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2767 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2768 if type( port ) ~= "number" or not ( port >= 0 and port <= 65535 ) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2769 err = "invalid port" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2770 elseif _server[ addr..":"..port ] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2771 err = "listeners on '[" .. addr .. "]:" .. port .. "' already exist" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2772 elseif sslctx and not luasec then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2773 err = "luasec not found" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2774 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2775 if err then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2776 out_error( "server.lua, [", addr, "]:", port, ": ", err ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2777 return nil, err |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2778 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2779 addr = addr or "*" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2780 local server, err = socket_bind( addr, port ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2781 if err then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2782 out_error( "server.lua, [", addr, "]:", port, ": ", err ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2783 return nil, err |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2784 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2785 local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, _maxclientsperserver ) -- wrap new server socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2786 if not handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2787 server:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2788 return nil, err |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2789 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2790 server:settimeout( 0 ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2791 _readlistlen = addsocket(_readlist, server, _readlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2792 _server[ addr..":"..port ] = handler |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2793 _socketlist[ server ] = handler |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2794 out_put( "server.lua: new "..(sslctx and "ssl " or "").."server listener on '[", addr, "]:", port, "'" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2795 return handler |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2796 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2797 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2798 getserver = function ( addr, port ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2799 return _server[ addr..":"..port ]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2800 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2801 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2802 removeserver = function( addr, port ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2803 local handler = _server[ addr..":"..port ] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2804 if not handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2805 return nil, "no server found on '[" .. addr .. "]:" .. tostring( port ) .. "'" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2806 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2807 handler:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2808 _server[ addr..":"..port ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2809 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2810 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2811 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2812 closeall = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2813 for _, handler in pairs( _socketlist ) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2814 handler:close( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2815 _socketlist[ _ ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2816 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2817 _readlistlen = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2818 _sendlistlen = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2819 _timerlistlen = 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2820 _server = { } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2821 _readlist = { } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2822 _sendlist = { } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2823 _timerlist = { } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2824 _socketlist = { } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2825 --mem_free( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2826 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2827 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2828 getsettings = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2829 return _selecttimeout, _sleeptime, _maxsendlen, _maxreadlen, _checkinterval, _sendtimeout, _readtimeout, _cleanqueue, _maxclientsperserver, _maxsslhandshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2830 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2831 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2832 changesettings = function( new ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2833 if type( new ) ~= "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2834 return nil, "invalid settings table" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2835 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2836 _selecttimeout = tonumber( new.timeout ) or _selecttimeout |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2837 _sleeptime = tonumber( new.sleeptime ) or _sleeptime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2838 _maxsendlen = tonumber( new.maxsendlen ) or _maxsendlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2839 _maxreadlen = tonumber( new.maxreadlen ) or _maxreadlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2840 _checkinterval = tonumber( new.checkinterval ) or _checkinterval |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2841 _sendtimeout = tonumber( new.sendtimeout ) or _sendtimeout |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2842 _readtimeout = tonumber( new.readtimeout ) or _readtimeout |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2843 _cleanqueue = new.cleanqueue |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2844 _maxclientsperserver = new._maxclientsperserver or _maxclientsperserver |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2845 _maxsslhandshake = new._maxsslhandshake or _maxsslhandshake |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2846 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2847 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2848 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2849 addtimer = function( listener ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2850 if type( listener ) ~= "function" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2851 return nil, "invalid listener function" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2852 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2853 _timerlistlen = _timerlistlen + 1 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2854 _timerlist[ _timerlistlen ] = listener |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2855 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2856 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2857 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2858 stats = function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2859 return _readtraffic, _sendtraffic, _readlistlen, _sendlistlen, _timerlistlen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2860 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2861 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2862 local quitting; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2863 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2864 setquitting = function (quit) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2865 quitting = not not quit; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2866 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2867 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2868 loop = function(once) -- this is the main loop of the program |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2869 if quitting then return "quitting"; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2870 if once then quitting = "once"; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2871 local next_timer_time = math_huge; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2872 repeat |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2873 local read, write, err = socket_select( _readlist, _sendlist, math_min(_selecttimeout, next_timer_time) ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2874 for i, socket in ipairs( write ) do -- send data waiting in writequeues |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2875 local handler = _socketlist[ socket ] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2876 if handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2877 handler.sendbuffer( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2878 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2879 closesocket( socket ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2880 out_put "server.lua: found no handler and closed socket (writelist)" -- this should not happen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2881 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2882 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2883 for i, socket in ipairs( read ) do -- receive data |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2884 local handler = _socketlist[ socket ] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2885 if handler then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2886 handler.readbuffer( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2887 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2888 closesocket( socket ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2889 out_put "server.lua: found no handler and closed socket (readlist)" -- this can happen |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2890 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2891 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2892 for handler, err in pairs( _closelist ) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2893 handler.disconnect( )( handler, err ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2894 handler:close( true ) -- forced disconnect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2895 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2896 clean( _closelist ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2897 _currenttime = luasocket_gettime( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2898 if _currenttime - _timer >= math_min(next_timer_time, 1) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2899 next_timer_time = math_huge; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2900 for i = 1, _timerlistlen do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2901 local t = _timerlist[ i ]( _currenttime ) -- fire timers |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2902 if t then next_timer_time = math_min(next_timer_time, t); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2903 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2904 _timer = _currenttime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2905 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2906 next_timer_time = next_timer_time - (_currenttime - _timer); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2907 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2908 socket_sleep( _sleeptime ) -- wait some time |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2909 --collectgarbage( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2910 until quitting; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2911 if once and quitting == "once" then quitting = nil; return; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2912 return "quitting" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2913 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2914 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2915 step = function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2916 return loop(true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2917 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2918 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2919 local function get_backend() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2920 return "select"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2921 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2922 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2923 --// EXPERIMENTAL //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2924 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2925 local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2926 local handler = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2927 _socketlist[ socket ] = handler |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2928 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2929 if listeners.onconnect then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2930 -- When socket is writeable, call onconnect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2931 local _sendbuffer = handler.sendbuffer; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2932 handler.sendbuffer = function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2933 handler.sendbuffer = _sendbuffer; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2934 listeners.onconnect(handler); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2935 -- If there was data with the incoming packet, handle it now. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2936 if #handler:bufferqueue() > 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2937 return _sendbuffer(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2938 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2939 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2940 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2941 return handler, socket |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2942 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2943 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2944 local addclient = function( address, port, listeners, pattern, sslctx ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2945 local client, err = luasocket.tcp( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2946 if err then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2947 return nil, err |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2948 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2949 client:settimeout( 0 ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2950 _, err = client:connect( address, port ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2951 if err then -- try again |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2952 local handler = wrapclient( client, address, port, listeners ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2953 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2954 wrapconnection( nil, listeners, client, address, port, "clientport", pattern, sslctx ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2955 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2956 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2957 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2958 --// EXPERIMENTAL //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2959 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2960 ----------------------------------// BEGIN //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2961 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2962 use "setmetatable" ( _socketlist, { __mode = "k" } ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2963 use "setmetatable" ( _readtimes, { __mode = "k" } ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2964 use "setmetatable" ( _writetimes, { __mode = "k" } ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2965 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2966 _timer = luasocket_gettime( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2967 _starttime = luasocket_gettime( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2968 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2969 addtimer( function( ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2970 local difftime = os_difftime( _currenttime - _starttime ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2971 if difftime > _checkinterval then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2972 _starttime = _currenttime |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2973 for handler, timestamp in pairs( _writetimes ) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2974 if os_difftime( _currenttime - timestamp ) > _sendtimeout then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2975 --_writetimes[ handler ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2976 handler.disconnect( )( handler, "send timeout" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2977 handler:close( true ) -- forced disconnect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2978 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2979 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2980 for handler, timestamp in pairs( _readtimes ) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2981 if os_difftime( _currenttime - timestamp ) > _readtimeout then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2982 --_readtimes[ handler ] = nil |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2983 handler.disconnect( )( handler, "read timeout" ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2984 handler:close( ) -- forced disconnect? |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2985 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2986 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2987 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2988 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2989 ) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2990 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2991 local function setlogger(new_logger) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2992 local old_logger = log; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2993 if new_logger then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2994 log = new_logger; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2995 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2996 return old_logger; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2997 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2998 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
2999 ----------------------------------// PUBLIC INTERFACE //-- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3000 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3001 return { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3002 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3003 addclient = addclient, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3004 wrapclient = wrapclient, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3005 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3006 loop = loop, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3007 link = link, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3008 step = step, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3009 stats = stats, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3010 closeall = closeall, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3011 addtimer = addtimer, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3012 addserver = addserver, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3013 getserver = getserver, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3014 setlogger = setlogger, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3015 getsettings = getsettings, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3016 setquitting = setquitting, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3017 removeserver = removeserver, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3018 get_backend = get_backend, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3019 changesettings = changesettings, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3020 } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3021 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3022 package.preload['util.xmppstream'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3023 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3024 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3025 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3026 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3027 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3028 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3029 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3030 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3031 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3032 local lxp = require "lxp"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3033 local st = require "util.stanza"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3034 local stanza_mt = st.stanza_mt; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3035 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3036 local tostring = tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3037 local t_insert = table.insert; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3038 local t_concat = table.concat; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3039 local t_remove = table.remove; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3040 local setmetatable = setmetatable; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3041 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3042 local default_log = require "util.logger".init("xmppstream"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3043 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3044 -- COMPAT: w/LuaExpat 1.1.0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3045 local lxp_supports_doctype = pcall(lxp.new, { StartDoctypeDecl = false }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3046 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3047 if not lxp_supports_doctype then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3048 default_log("warn", "The version of LuaExpat on your system leaves Prosody " |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3049 .."vulnerable to denial-of-service attacks. You should upgrade to " |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3050 .."LuaExpat 1.1.1 or higher as soon as possible. See " |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3051 .."http://prosody.im/doc/depends#luaexpat for more information."); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3052 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3053 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3054 local error = error; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3055 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3056 module "xmppstream" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3057 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3058 local new_parser = lxp.new; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3059 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3060 local ns_prefixes = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3061 ["http://www.w3.org/XML/1998/namespace"] = "xml"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3062 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3063 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3064 local xmlns_streams = "http://etherx.jabber.org/streams"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3065 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3066 local ns_separator = "\1"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3067 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3068 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3069 _M.ns_separator = ns_separator; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3070 _M.ns_pattern = ns_pattern; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3071 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3072 function new_sax_handlers(session, stream_callbacks) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3073 local xml_handlers = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3074 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3075 local log = session.log or default_log; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3076 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3077 local cb_streamopened = stream_callbacks.streamopened; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3078 local cb_streamclosed = stream_callbacks.streamclosed; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3079 local cb_error = stream_callbacks.error or function(session, e) error("XML stream error: "..tostring(e)); end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3080 local cb_handlestanza = stream_callbacks.handlestanza; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3081 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3082 local stream_ns = stream_callbacks.stream_ns or xmlns_streams; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3083 local stream_tag = stream_callbacks.stream_tag or "stream"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3084 if stream_ns ~= "" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3085 stream_tag = stream_ns..ns_separator..stream_tag; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3086 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3087 local stream_error_tag = stream_ns..ns_separator..(stream_callbacks.error_tag or "error"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3088 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3089 local stream_default_ns = stream_callbacks.default_ns; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3090 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3091 local stack = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3092 local chardata, stanza = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3093 local non_streamns_depth = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3094 function xml_handlers:StartElement(tagname, attr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3095 if stanza and #chardata > 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3096 -- We have some character data in the buffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3097 t_insert(stanza, t_concat(chardata)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3098 chardata = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3099 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3100 local curr_ns,name = tagname:match(ns_pattern); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3101 if name == "" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3102 curr_ns, name = "", curr_ns; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3103 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3104 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3105 if curr_ns ~= stream_default_ns or non_streamns_depth > 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3106 attr.xmlns = curr_ns; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3107 non_streamns_depth = non_streamns_depth + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3108 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3109 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3110 -- FIXME !!!!! |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3111 for i=1,#attr do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3112 local k = attr[i]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3113 attr[i] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3114 local ns, nm = k:match(ns_pattern); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3115 if nm ~= "" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3116 ns = ns_prefixes[ns]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3117 if ns then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3118 attr[ns..":"..nm] = attr[k]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3119 attr[k] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3120 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3121 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3122 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3123 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3124 if not stanza then --if we are not currently inside a stanza |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3125 if session.notopen then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3126 if tagname == stream_tag then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3127 non_streamns_depth = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3128 if cb_streamopened then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3129 cb_streamopened(session, attr); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3130 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3131 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3132 -- Garbage before stream? |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3133 cb_error(session, "no-stream"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3134 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3135 return; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3136 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3137 if curr_ns == "jabber:client" and name ~= "iq" and name ~= "presence" and name ~= "message" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3138 cb_error(session, "invalid-top-level-element"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3139 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3140 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3141 stanza = setmetatable({ name = name, attr = attr, tags = {} }, stanza_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3142 else -- we are inside a stanza, so add a tag |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3143 t_insert(stack, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3144 local oldstanza = stanza; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3145 stanza = setmetatable({ name = name, attr = attr, tags = {} }, stanza_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3146 t_insert(oldstanza, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3147 t_insert(oldstanza.tags, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3148 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3149 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3150 function xml_handlers:CharacterData(data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3151 if stanza then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3152 t_insert(chardata, data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3153 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3154 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3155 function xml_handlers:EndElement(tagname) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3156 if non_streamns_depth > 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3157 non_streamns_depth = non_streamns_depth - 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3158 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3159 if stanza then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3160 if #chardata > 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3161 -- We have some character data in the buffer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3162 t_insert(stanza, t_concat(chardata)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3163 chardata = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3164 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3165 -- Complete stanza |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3166 if #stack == 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3167 if tagname ~= stream_error_tag then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3168 cb_handlestanza(session, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3169 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3170 cb_error(session, "stream-error", stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3171 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3172 stanza = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3173 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3174 stanza = t_remove(stack); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3175 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3176 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3177 if tagname == stream_tag then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3178 if cb_streamclosed then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3179 cb_streamclosed(session); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3180 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3181 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3182 local curr_ns,name = tagname:match(ns_pattern); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3183 if name == "" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3184 curr_ns, name = "", curr_ns; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3185 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3186 cb_error(session, "parse-error", "unexpected-element-close", name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3187 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3188 stanza, chardata = nil, {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3189 stack = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3190 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3191 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3192 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3193 local function restricted_handler(parser) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3194 cb_error(session, "parse-error", "restricted-xml", "Restricted XML, see RFC 6120 section 11.1."); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3195 if not parser.stop or not parser:stop() then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3196 error("Failed to abort parsing"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3197 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3198 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3199 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3200 if lxp_supports_doctype then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3201 xml_handlers.StartDoctypeDecl = restricted_handler; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3202 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3203 xml_handlers.Comment = restricted_handler; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3204 xml_handlers.ProcessingInstruction = restricted_handler; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3205 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3206 local function reset() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3207 stanza, chardata = nil, {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3208 stack = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3209 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3210 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3211 local function set_session(stream, new_session) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3212 session = new_session; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3213 log = new_session.log or default_log; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3214 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3215 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3216 return xml_handlers, { reset = reset, set_session = set_session }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3217 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3218 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3219 function new(session, stream_callbacks) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3220 local handlers, meta = new_sax_handlers(session, stream_callbacks); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3221 local parser = new_parser(handlers, ns_separator); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3222 local parse = parser.parse; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3223 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3224 return { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3225 reset = function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3226 parser = new_parser(handlers, ns_separator); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3227 parse = parser.parse; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3228 meta.reset(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3229 end, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3230 feed = function (self, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3231 return parse(parser, data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3232 end, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3233 set_session = meta.set_session; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3234 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3235 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3236 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3237 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3238 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3239 package.preload['util.jid'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3240 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3241 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3242 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3243 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3244 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3245 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3246 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3247 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3248 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3249 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3250 local match = string.match; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3251 local nodeprep = require "util.encodings".stringprep.nodeprep; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3252 local nameprep = require "util.encodings".stringprep.nameprep; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3253 local resourceprep = require "util.encodings".stringprep.resourceprep; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3254 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3255 module "jid" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3256 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3257 local function _split(jid) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3258 if not jid then return; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3259 local node, nodepos = match(jid, "^([^@/]+)@()"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3260 local host, hostpos = match(jid, "^([^@/]+)()", nodepos) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3261 if node and not host then return nil, nil, nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3262 local resource = match(jid, "^/(.+)$", hostpos); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3263 if (not host) or ((not resource) and #jid >= hostpos) then return nil, nil, nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3264 return node, host, resource; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3265 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3266 split = _split; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3267 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3268 function bare(jid) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3269 local node, host = _split(jid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3270 if node and host then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3271 return node.."@"..host; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3272 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3273 return host; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3274 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3275 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3276 local function _prepped_split(jid) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3277 local node, host, resource = _split(jid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3278 if host then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3279 host = nameprep(host); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3280 if not host then return; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3281 if node then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3282 node = nodeprep(node); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3283 if not node then return; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3284 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3285 if resource then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3286 resource = resourceprep(resource); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3287 if not resource then return; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3288 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3289 return node, host, resource; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3290 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3291 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3292 prepped_split = _prepped_split; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3293 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3294 function prep(jid) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3295 local node, host, resource = _prepped_split(jid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3296 if host then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3297 if node then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3298 host = node .. "@" .. host; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3299 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3300 if resource then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3301 host = host .. "/" .. resource; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3302 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3303 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3304 return host; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3305 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3306 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3307 function join(node, host, resource) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3308 if node and host and resource then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3309 return node.."@"..host.."/"..resource; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3310 elseif node and host then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3311 return node.."@"..host; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3312 elseif host and resource then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3313 return host.."/"..resource; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3314 elseif host then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3315 return host; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3316 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3317 return nil; -- Invalid JID |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3318 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3319 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3320 function compare(jid, acl) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3321 -- compare jid to single acl rule |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3322 -- TODO compare to table of rules? |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3323 local jid_node, jid_host, jid_resource = _split(jid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3324 local acl_node, acl_host, acl_resource = _split(acl); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3325 if ((acl_node ~= nil and acl_node == jid_node) or acl_node == nil) and |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3326 ((acl_host ~= nil and acl_host == jid_host) or acl_host == nil) and |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3327 ((acl_resource ~= nil and acl_resource == jid_resource) or acl_resource == nil) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3328 return true |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3329 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3330 return false |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3331 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3332 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3333 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3334 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3335 package.preload['util.events'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3336 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3337 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3338 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3339 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3340 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3341 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3342 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3343 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3344 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3345 local pairs = pairs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3346 local t_insert = table.insert; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3347 local t_sort = table.sort; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3348 local setmetatable = setmetatable; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3349 local next = next; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3350 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3351 module "events" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3352 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3353 function new() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3354 local handlers = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3355 local event_map = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3356 local function _rebuild_index(handlers, event) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3357 local _handlers = event_map[event]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3358 if not _handlers or next(_handlers) == nil then return; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3359 local index = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3360 for handler in pairs(_handlers) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3361 t_insert(index, handler); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3362 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3363 t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3364 handlers[event] = index; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3365 return index; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3366 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3367 setmetatable(handlers, { __index = _rebuild_index }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3368 local function add_handler(event, handler, priority) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3369 local map = event_map[event]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3370 if map then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3371 map[handler] = priority or 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3372 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3373 map = {[handler] = priority or 0}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3374 event_map[event] = map; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3375 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3376 handlers[event] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3377 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3378 local function remove_handler(event, handler) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3379 local map = event_map[event]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3380 if map then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3381 map[handler] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3382 handlers[event] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3383 if next(map) == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3384 event_map[event] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3385 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3386 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3387 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3388 local function add_handlers(handlers) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3389 for event, handler in pairs(handlers) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3390 add_handler(event, handler); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3391 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3392 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3393 local function remove_handlers(handlers) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3394 for event, handler in pairs(handlers) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3395 remove_handler(event, handler); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3396 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3397 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3398 local function fire_event(event, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3399 local h = handlers[event]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3400 if h then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3401 for i=1,#h do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3402 local ret = h[i](...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3403 if ret ~= nil then return ret; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3404 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3405 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3406 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3407 return { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3408 add_handler = add_handler; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3409 remove_handler = remove_handler; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3410 add_handlers = add_handlers; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3411 remove_handlers = remove_handlers; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3412 fire_event = fire_event; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3413 _handlers = handlers; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3414 _event_map = event_map; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3415 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3416 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3417 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3418 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3419 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3420 package.preload['util.dataforms'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3421 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3422 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3423 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3424 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3425 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3426 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3427 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3428 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3429 local setmetatable = setmetatable; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3430 local pairs, ipairs = pairs, ipairs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3431 local tostring, type = tostring, type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3432 local t_concat = table.concat; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3433 local st = require "util.stanza"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3434 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3435 module "dataforms" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3436 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3437 local xmlns_forms = 'jabber:x:data'; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3438 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3439 local form_t = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3440 local form_mt = { __index = form_t }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3441 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3442 function new(layout) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3443 return setmetatable(layout, form_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3444 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3445 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3446 function form_t.form(layout, data, formtype) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3447 local form = st.stanza("x", { xmlns = xmlns_forms, type = formtype or "form" }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3448 if layout.title then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3449 form:tag("title"):text(layout.title):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3450 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3451 if layout.instructions then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3452 form:tag("instructions"):text(layout.instructions):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3453 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3454 for n, field in ipairs(layout) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3455 local field_type = field.type or "text-single"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3456 -- Add field tag |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3457 form:tag("field", { type = field_type, var = field.name, label = field.label }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3458 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3459 local value = (data and data[field.name]) or field.value; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3460 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3461 if value then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3462 -- Add value, depending on type |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3463 if field_type == "hidden" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3464 if type(value) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3465 -- Assume an XML snippet |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3466 form:tag("value") |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3467 :add_child(value) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3468 :up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3469 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3470 form:tag("value"):text(tostring(value)):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3471 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3472 elseif field_type == "boolean" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3473 form:tag("value"):text((value and "1") or "0"):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3474 elseif field_type == "fixed" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3475 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3476 elseif field_type == "jid-multi" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3477 for _, jid in ipairs(value) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3478 form:tag("value"):text(jid):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3479 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3480 elseif field_type == "jid-single" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3481 form:tag("value"):text(value):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3482 elseif field_type == "text-single" or field_type == "text-private" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3483 form:tag("value"):text(value):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3484 elseif field_type == "text-multi" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3485 -- Split into multiple <value> tags, one for each line |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3486 for line in value:gmatch("([^\r\n]+)\r?\n*") do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3487 form:tag("value"):text(line):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3488 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3489 elseif field_type == "list-single" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3490 local has_default = false; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3491 if type(value) == "string" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3492 form:tag("value"):text(value):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3493 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3494 for _, val in ipairs(value) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3495 if type(val) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3496 form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3497 if val.default and (not has_default) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3498 form:tag("value"):text(val.value):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3499 has_default = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3500 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3501 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3502 form:tag("option", { label= val }):tag("value"):text(tostring(val)):up():up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3503 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3504 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3505 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3506 elseif field_type == "list-multi" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3507 for _, val in ipairs(value) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3508 if type(val) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3509 form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3510 if val.default then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3511 form:tag("value"):text(val.value):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3512 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3513 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3514 form:tag("option", { label= val }):tag("value"):text(tostring(val)):up():up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3515 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3516 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3517 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3518 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3519 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3520 if field.required then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3521 form:tag("required"):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3522 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3523 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3524 -- Jump back up to list of fields |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3525 form:up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3526 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3527 return form; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3528 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3529 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3530 local field_readers = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3531 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3532 function form_t.data(layout, stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3533 local data = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3534 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3535 for field_tag in stanza:childtags() do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3536 local field_type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3537 for n, field in ipairs(layout) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3538 if field.name == field_tag.attr.var then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3539 field_type = field.type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3540 break; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3541 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3542 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3543 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3544 local reader = field_readers[field_type]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3545 if reader then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3546 data[field_tag.attr.var] = reader(field_tag); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3547 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3548 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3549 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3550 return data; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3551 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3552 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3553 field_readers["text-single"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3554 function (field_tag) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3555 local value = field_tag:child_with_name("value"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3556 if value then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3557 return value[1]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3558 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3559 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3560 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3561 field_readers["text-private"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3562 field_readers["text-single"]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3563 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3564 field_readers["jid-single"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3565 field_readers["text-single"]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3566 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3567 field_readers["jid-multi"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3568 function (field_tag) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3569 local result = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3570 for value_tag in field_tag:childtags() do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3571 if value_tag.name == "value" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3572 result[#result+1] = value_tag[1]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3573 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3574 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3575 return result; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3576 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3577 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3578 field_readers["text-multi"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3579 function (field_tag) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3580 local result = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3581 for value_tag in field_tag:childtags() do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3582 if value_tag.name == "value" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3583 result[#result+1] = value_tag[1]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3584 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3585 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3586 return t_concat(result, "\n"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3587 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3588 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3589 field_readers["list-single"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3590 field_readers["text-single"]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3591 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3592 field_readers["list-multi"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3593 function (field_tag) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3594 local result = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3595 for value_tag in field_tag:childtags() do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3596 if value_tag.name == "value" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3597 result[#result+1] = value_tag[1]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3598 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3599 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3600 return result; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3601 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3602 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3603 field_readers["boolean"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3604 function (field_tag) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3605 local value = field_tag:child_with_name("value"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3606 if value then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3607 if value[1] == "1" or value[1] == "true" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3608 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3609 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3610 return false; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3611 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3612 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3613 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3614 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3615 field_readers["hidden"] = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3616 function (field_tag) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3617 local value = field_tag:child_with_name("value"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3618 if value then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3619 return value[1]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3620 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3621 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3622 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3623 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3624 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3625 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3626 --[=[ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3627 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3628 Layout: |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3629 { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3630 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3631 title = "MUC Configuration", |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3632 instructions = [[Use this form to configure options for this MUC room.]], |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3633 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3634 { name = "FORM_TYPE", type = "hidden", required = true }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3635 { name = "field-name", type = "field-type", required = false }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3636 } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3637 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3638 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3639 --]=] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3640 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3641 package.preload['util.serialization'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3642 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3643 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3644 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3645 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3646 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3647 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3648 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3649 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3650 local string_rep = string.rep; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3651 local type = type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3652 local tostring = tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3653 local t_insert = table.insert; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3654 local t_concat = table.concat; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3655 local error = error; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3656 local pairs = pairs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3657 local next = next; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3658 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3659 local loadstring = loadstring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3660 local setfenv = setfenv; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3661 local pcall = pcall; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3662 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3663 local debug_traceback = debug.traceback; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3664 local log = require "util.logger".init("serialization"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3665 module "serialization" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3666 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3667 local indent = function(i) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3668 return string_rep("\t", i); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3669 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3670 local function basicSerialize (o) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3671 if type(o) == "number" or type(o) == "boolean" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3672 -- no need to check for NaN, as that's not a valid table index |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3673 if o == 1/0 then return "(1/0)"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3674 elseif o == -1/0 then return "(-1/0)"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3675 else return tostring(o); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3676 else -- assume it is a string -- FIXME make sure it's a string. throw an error otherwise. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3677 return (("%q"):format(tostring(o)):gsub("\\\n", "\\n")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3678 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3679 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3680 local function _simplesave(o, ind, t, func) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3681 if type(o) == "number" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3682 if o ~= o then func(t, "(0/0)"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3683 elseif o == 1/0 then func(t, "(1/0)"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3684 elseif o == -1/0 then func(t, "(-1/0)"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3685 else func(t, tostring(o)); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3686 elseif type(o) == "string" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3687 func(t, (("%q"):format(o):gsub("\\\n", "\\n"))); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3688 elseif type(o) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3689 if next(o) ~= nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3690 func(t, "{\n"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3691 for k,v in pairs(o) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3692 func(t, indent(ind)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3693 func(t, "["); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3694 func(t, basicSerialize(k)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3695 func(t, "] = "); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3696 if ind == 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3697 _simplesave(v, 0, t, func); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3698 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3699 _simplesave(v, ind+1, t, func); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3700 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3701 func(t, ";\n"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3702 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3703 func(t, indent(ind-1)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3704 func(t, "}"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3705 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3706 func(t, "{}"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3707 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3708 elseif type(o) == "boolean" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3709 func(t, (o and "true" or "false")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3710 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3711 log("error", "cannot serialize a %s: %s", type(o), debug_traceback()) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3712 func(t, "nil"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3713 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3714 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3715 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3716 function append(t, o) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3717 _simplesave(o, 1, t, t.write or t_insert); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3718 return t; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3719 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3720 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3721 function serialize(o) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3722 return t_concat(append({}, o)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3723 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3724 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3725 function deserialize(str) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3726 if type(str) ~= "string" then return nil; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3727 str = "return "..str; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3728 local f, err = loadstring(str, "@data"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3729 if not f then return nil, err; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3730 setfenv(f, {}); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3731 local success, ret = pcall(f); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3732 if not success then return nil, ret; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3733 return ret; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3734 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3735 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3736 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3737 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3738 package.preload['verse.plugins.presence'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3739 function verse.plugins.presence(stream) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3740 stream.last_presence = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3741 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3742 stream:hook("presence-out", function (presence) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3743 if not presence.attr.to then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3744 stream.last_presence = presence; -- Cache non-directed presence |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3745 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3746 end, 1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3747 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3748 function stream:resend_presence() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3749 if last_presence then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3750 stream:send(last_presence); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3751 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3752 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3753 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3754 function stream:set_status(opts) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3755 local p = verse.presence(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3756 if type(opts) == "table" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3757 if opts.show then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3758 p:tag("show"):text(opts.show):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3759 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3760 if opts.prio then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3761 p:tag("priority"):text(tostring(opts.prio)):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3762 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3763 if opts.msg then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3764 p:tag("status"):text(opts.msg):up(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3765 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3766 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3767 -- TODO maybe use opts as prio if it's a int, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3768 -- or as show or status if it's a string? |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3769 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3770 stream:send(p); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3771 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3772 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3773 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3774 package.preload['verse.plugins.groupchat'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3775 local events = require "events"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3776 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3777 local room_mt = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3778 room_mt.__index = room_mt; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3779 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3780 local xmlns_delay = "urn:xmpp:delay"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3781 local xmlns_muc = "http://jabber.org/protocol/muc"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3782 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3783 function verse.plugins.groupchat(stream) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3784 stream:add_plugin("presence") |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3785 stream.rooms = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3786 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3787 stream:hook("stanza", function (stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3788 local room_jid = jid.bare(stanza.attr.from); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3789 if not room_jid then return end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3790 local room = stream.rooms[room_jid] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3791 if not room and stanza.attr.to and room_jid then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3792 room = stream.rooms[stanza.attr.to.." "..room_jid] |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3793 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3794 if room and room.opts.source and stanza.attr.to ~= room.opts.source then return end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3795 if room then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3796 local nick = select(3, jid.split(stanza.attr.from)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3797 local body = stanza:get_child("body"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3798 local delay = stanza:get_child("delay", xmlns_delay); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3799 local event = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3800 room_jid = room_jid; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3801 room = room; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3802 sender = room.occupants[nick]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3803 nick = nick; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3804 body = (body and body:get_text()) or nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3805 stanza = stanza; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3806 delay = (delay and delay.attr.stamp); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3807 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3808 local ret = room:event(stanza.name, event); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3809 return ret or (stanza.name == "message") or nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3810 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3811 end, 500); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3812 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3813 function stream:join_room(jid, nick, opts) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3814 if not nick then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3815 return false, "no nickname supplied" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3816 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3817 opts = opts or {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3818 local room = setmetatable({ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3819 stream = stream, jid = jid, nick = nick, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3820 subject = nil, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3821 occupants = {}, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3822 opts = opts, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3823 events = events.new() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3824 }, room_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3825 if opts.source then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3826 self.rooms[opts.source.." "..jid] = room; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3827 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3828 self.rooms[jid] = room; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3829 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3830 local occupants = room.occupants; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3831 room:hook("presence", function (presence) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3832 local nick = presence.nick or nick; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3833 if not occupants[nick] and presence.stanza.attr.type ~= "unavailable" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3834 occupants[nick] = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3835 nick = nick; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3836 jid = presence.stanza.attr.from; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3837 presence = presence.stanza; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3838 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3839 local x = presence.stanza:get_child("x", xmlns_muc .. "#user"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3840 if x then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3841 local x_item = x:get_child("item"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3842 if x_item and x_item.attr then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3843 occupants[nick].real_jid = x_item.attr.jid; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3844 occupants[nick].affiliation = x_item.attr.affiliation; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3845 occupants[nick].role = x_item.attr.role; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3846 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3847 --TODO Check for status 100? |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3848 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3849 if nick == room.nick then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3850 room.stream:event("groupchat/joined", room); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3851 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3852 room:event("occupant-joined", occupants[nick]); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3853 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3854 elseif occupants[nick] and presence.stanza.attr.type == "unavailable" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3855 if nick == room.nick then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3856 room.stream:event("groupchat/left", room); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3857 if room.opts.source then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3858 self.rooms[room.opts.source.." "..jid] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3859 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3860 self.rooms[jid] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3861 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3862 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3863 occupants[nick].presence = presence.stanza; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3864 room:event("occupant-left", occupants[nick]); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3865 occupants[nick] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3866 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3867 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3868 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3869 room:hook("message", function(msg) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3870 local subject = msg.stanza:get_child_text("subject"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3871 if not subject then return end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3872 subject = #subject > 0 and subject or nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3873 if subject ~= room.subject then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3874 local old_subject = room.subject; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3875 room.subject = subject; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3876 return self:event("subject-changed", { from = old_subject, to = subject, by = msg.sender }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3877 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3878 end, 2000); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3879 local join_st = verse.presence():tag("x",{xmlns = xmlns_muc}):reset(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3880 self:event("pre-groupchat/joining", join_st); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3881 room:send(join_st) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3882 self:event("groupchat/joining", room); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3883 return room; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3884 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3885 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3886 stream:hook("presence-out", function(presence) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3887 if not presence.attr.to then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3888 for _, room in pairs(stream.rooms) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3889 room:send(presence); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3890 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3891 presence.attr.to = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3892 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3893 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3894 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3895 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3896 function room_mt:send(stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3897 if stanza.name == "message" and not stanza.attr.type then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3898 stanza.attr.type = "groupchat"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3899 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3900 if stanza.name == "presence" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3901 stanza.attr.to = self.jid .."/"..self.nick; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3902 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3903 if stanza.attr.type == "groupchat" or not stanza.attr.to then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3904 stanza.attr.to = self.jid; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3905 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3906 if self.opts.source then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3907 stanza.attr.from = self.opts.source |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3908 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3909 self.stream:send(stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3910 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3911 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3912 function room_mt:send_message(text) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3913 self:send(verse.message():tag("body"):text(text)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3914 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3915 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3916 function room_mt:set_subject(text) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3917 self:send(verse.message():tag("subject"):text(text)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3918 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3919 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3920 function room_mt:leave(message) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3921 self.stream:event("groupchat/leaving", self); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3922 self:send(verse.presence({type="unavailable"})); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3923 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3924 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3925 function room_mt:admin_set(nick, what, value, reason) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3926 self:send(verse.iq({type="set"}) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3927 :query(xmlns_muc .. "#admin") |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3928 :tag("item", {nick = nick, [what] = value}) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3929 :tag("reason"):text(reason or "")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3930 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3931 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3932 function room_mt:set_role(nick, role, reason) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3933 self:admin_set(nick, "role", role, reason); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3934 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3935 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3936 function room_mt:set_affiliation(nick, affiliation, reason) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3937 self:admin_set(nick, "affiliation", affiliation, reason); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3938 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3939 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3940 function room_mt:kick(nick, reason) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3941 self:set_role(nick, "none", reason); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3942 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3943 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3944 function room_mt:ban(nick, reason) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3945 self:set_affiliation(nick, "outcast", reason); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3946 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3947 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3948 function room_mt:event(name, arg) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3949 self.stream:debug("Firing room event: %s", name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3950 return self.events.fire_event(name, arg); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3951 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3952 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3953 function room_mt:hook(name, callback, priority) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3954 return self.events.add_handler(name, callback, priority); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3955 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3956 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3957 package.preload['net.httpclient_listener'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3958 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3959 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3960 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3961 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3962 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3963 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3964 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3965 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3966 local log = require "util.logger".init("httpclient_listener"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3967 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3968 local connlisteners_register = require "net.connlisteners".register; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3969 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3970 local requests = {}; -- Open requests |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3971 local buffers = {}; -- Buffers of partial lines |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3972 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3973 local httpclient = { default_port = 80, default_mode = "*a" }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3974 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3975 function httpclient.onincoming(conn, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3976 local request = requests[conn]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3977 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3978 if not request then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3979 log("warn", "Received response from connection %s with no request attached!", tostring(conn)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3980 return; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3981 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3982 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3983 if data and request.reader then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3984 request:reader(data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3985 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3986 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3987 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3988 function httpclient.ondisconnect(conn, err) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3989 local request = requests[conn]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3990 if request and err ~= "closed" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3991 request:reader(nil); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3992 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3993 requests[conn] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3994 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3995 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3996 function httpclient.register_request(conn, req) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3997 log("debug", "Attaching request %s to connection %s", tostring(req.id or req), tostring(conn)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3998 requests[conn] = req; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
3999 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4000 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4001 connlisteners_register("httpclient", httpclient); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4002 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4003 package.preload['net.connlisteners'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4004 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4005 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4006 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4007 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4008 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4009 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4010 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4011 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4012 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4013 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4014 local listeners_dir = (CFG_SOURCEDIR or ".").."/net/"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4015 local server = require "net.server"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4016 local log = require "util.logger".init("connlisteners"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4017 local tostring = tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4018 local type = type |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4019 local ipairs = ipairs |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4020 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4021 local dofile, xpcall, error = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4022 dofile, xpcall, error |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4023 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4024 local debug_traceback = debug.traceback; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4025 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4026 module "connlisteners" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4027 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4028 local listeners = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4029 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4030 function register(name, listener) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4031 if listeners[name] and listeners[name] ~= listener then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4032 log("debug", "Listener %s is already registered, not registering any more", name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4033 return false; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4034 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4035 listeners[name] = listener; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4036 log("debug", "Registered connection listener %s", name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4037 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4038 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4039 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4040 function deregister(name) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4041 listeners[name] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4042 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4043 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4044 function get(name) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4045 local h = listeners[name]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4046 if not h then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4047 local ok, ret = xpcall(function() dofile(listeners_dir..name:gsub("[^%w%-]", "_").."_listener.lua") end, debug_traceback); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4048 if not ok then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4049 log("error", "Error while loading listener '%s': %s", tostring(name), tostring(ret)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4050 return nil, ret; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4051 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4052 h = listeners[name]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4053 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4054 return h; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4055 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4056 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4057 function start(name, udata) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4058 local h, err = get(name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4059 if not h then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4060 error("No such connection module: "..name.. (err and (" ("..err..")") or ""), 0); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4061 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4062 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4063 local interfaces = (udata and udata.interface) or h.default_interface or "*"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4064 if type(interfaces) == "string" then interfaces = {interfaces}; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4065 local port = (udata and udata.port) or h.default_port or error("Can't start listener "..name.." because no port was specified, and it has no default port", 0); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4066 local mode = (udata and udata.mode) or h.default_mode or 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4067 local ssl = (udata and udata.ssl) or nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4068 local autossl = udata and udata.type == "ssl"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4069 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4070 if autossl and not ssl then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4071 return nil, "no ssl context"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4072 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4073 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4074 ok, err = true, {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4075 for _, interface in ipairs(interfaces) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4076 local handler |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4077 handler, err[interface] = server.addserver(interface, port, h, mode, autossl and ssl or nil); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4078 ok = ok and handler; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4079 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4080 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4081 return ok, err; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4082 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4083 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4084 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4085 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4086 package.preload['util.httpstream'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4087 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4088 local coroutine = coroutine; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4089 local tonumber = tonumber; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4090 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4091 local deadroutine = coroutine.create(function() end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4092 coroutine.resume(deadroutine); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4093 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4094 module("httpstream") |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4095 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4096 local function parser(success_cb, parser_type, options_cb) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4097 local data = coroutine.yield(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4098 local function readline() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4099 local pos = data:find("\r\n", nil, true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4100 while not pos do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4101 data = data..coroutine.yield(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4102 pos = data:find("\r\n", nil, true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4103 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4104 local r = data:sub(1, pos-1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4105 data = data:sub(pos+2); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4106 return r; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4107 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4108 local function readlength(n) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4109 while #data < n do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4110 data = data..coroutine.yield(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4111 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4112 local r = data:sub(1, n); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4113 data = data:sub(n + 1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4114 return r; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4115 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4116 local function readheaders() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4117 local headers = {}; -- read headers |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4118 while true do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4119 local line = readline(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4120 if line == "" then break; end -- headers done |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4121 local key, val = line:match("^([^%s:]+): *(.*)$"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4122 if not key then coroutine.yield("invalid-header-line"); end -- TODO handle multi-line and invalid headers |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4123 key = key:lower(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4124 headers[key] = headers[key] and headers[key]..","..val or val; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4125 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4126 return headers; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4127 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4128 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4129 if not parser_type or parser_type == "server" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4130 while true do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4131 -- read status line |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4132 local status_line = readline(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4133 local method, path, httpversion = status_line:match("^(%S+)%s+(%S+)%s+HTTP/(%S+)$"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4134 if not method then coroutine.yield("invalid-status-line"); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4135 path = path:gsub("^//+", "/"); -- TODO parse url more |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4136 local headers = readheaders(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4137 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4138 -- read body |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4139 local len = tonumber(headers["content-length"]); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4140 len = len or 0; -- TODO check for invalid len |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4141 local body = readlength(len); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4142 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4143 success_cb({ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4144 method = method; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4145 path = path; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4146 httpversion = httpversion; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4147 headers = headers; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4148 body = body; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4149 }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4150 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4151 elseif parser_type == "client" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4152 while true do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4153 -- read status line |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4154 local status_line = readline(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4155 local httpversion, status_code, reason_phrase = status_line:match("^HTTP/(%S+)%s+(%d%d%d)%s+(.*)$"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4156 status_code = tonumber(status_code); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4157 if not status_code then coroutine.yield("invalid-status-line"); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4158 local headers = readheaders(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4159 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4160 -- read body |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4161 local have_body = not |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4162 ( (options_cb and options_cb().method == "HEAD") |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4163 or (status_code == 204 or status_code == 304 or status_code == 301) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4164 or (status_code >= 100 and status_code < 200) ); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4165 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4166 local body; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4167 if have_body then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4168 local len = tonumber(headers["content-length"]); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4169 if headers["transfer-encoding"] == "chunked" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4170 body = ""; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4171 while true do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4172 local chunk_size = readline():match("^%x+"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4173 if not chunk_size then coroutine.yield("invalid-chunk-size"); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4174 chunk_size = tonumber(chunk_size, 16) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4175 if chunk_size == 0 then break; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4176 body = body..readlength(chunk_size); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4177 if readline() ~= "" then coroutine.yield("invalid-chunk-ending"); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4178 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4179 local trailers = readheaders(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4180 elseif len then -- TODO check for invalid len |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4181 body = readlength(len); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4182 else -- read to end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4183 repeat |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4184 local newdata = coroutine.yield(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4185 data = data..newdata; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4186 until newdata == ""; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4187 body, data = data, ""; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4188 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4189 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4190 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4191 success_cb({ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4192 code = status_code; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4193 httpversion = httpversion; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4194 headers = headers; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4195 body = body; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4196 -- COMPAT the properties below are deprecated |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4197 responseversion = httpversion; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4198 responseheaders = headers; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4199 }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4200 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4201 else coroutine.yield("unknown-parser-type"); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4202 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4203 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4204 function new(success_cb, error_cb, parser_type, options_cb) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4205 local co = coroutine.create(parser); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4206 coroutine.resume(co, success_cb, parser_type, options_cb) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4207 return { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4208 feed = function(self, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4209 if not data then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4210 if parser_type == "client" then coroutine.resume(co, ""); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4211 co = deadroutine; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4212 return error_cb(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4213 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4214 local success, result = coroutine.resume(co, data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4215 if result then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4216 co = deadroutine; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4217 return error_cb(result); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4218 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4219 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4220 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4221 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4222 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4223 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4224 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4225 package.preload['net.http'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4226 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4227 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4228 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4229 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4230 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4231 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4232 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4233 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4234 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4235 local socket = require "socket" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4236 local mime = require "mime" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4237 local url = require "socket.url" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4238 local httpstream_new = require "util.httpstream".new; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4239 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4240 local server = require "net.server" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4241 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4242 local connlisteners_get = require "net.connlisteners".get; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4243 local listener = connlisteners_get("httpclient") or error("No httpclient listener!"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4244 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4245 local t_insert, t_concat = table.insert, table.concat; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4246 local pairs, ipairs = pairs, ipairs; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4247 local tonumber, tostring, xpcall, select, debug_traceback, char, format = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4248 tonumber, tostring, xpcall, select, debug.traceback, string.char, string.format; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4249 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4250 local log = require "util.logger".init("http"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4251 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4252 module "http" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4253 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4254 function urlencode(s) return s and (s:gsub("%W", function (c) return format("%%%02x", c:byte()); end)); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4255 function urldecode(s) return s and (s:gsub("%%(%x%x)", function (c) return char(tonumber(c,16)); end)); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4256 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4257 local function _formencodepart(s) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4258 return s and (s:gsub("%W", function (c) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4259 if c ~= " " then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4260 return format("%%%02x", c:byte()); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4261 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4262 return "+"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4263 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4264 end)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4265 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4266 function formencode(form) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4267 local result = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4268 for _, field in ipairs(form) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4269 t_insert(result, _formencodepart(field.name).."=".._formencodepart(field.value)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4270 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4271 return t_concat(result, "&"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4272 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4273 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4274 local function request_reader(request, data, startpos) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4275 if not request.parser then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4276 local function success_cb(r) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4277 if request.callback then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4278 for k,v in pairs(r) do request[k] = v; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4279 request.callback(r.body, r.code, request); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4280 request.callback = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4281 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4282 destroy_request(request); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4283 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4284 local function error_cb(r) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4285 if request.callback then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4286 request.callback(r or "connection-closed", 0, request); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4287 request.callback = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4288 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4289 destroy_request(request); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4290 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4291 local function options_cb() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4292 return request; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4293 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4294 request.parser = httpstream_new(success_cb, error_cb, "client", options_cb); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4295 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4296 request.parser:feed(data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4297 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4298 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4299 local function handleerr(err) log("error", "Traceback[http]: %s: %s", tostring(err), debug_traceback()); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4300 function request(u, ex, callback) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4301 local req = url.parse(u); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4302 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4303 if not (req and req.host) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4304 callback(nil, 0, req); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4305 return nil, "invalid-url"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4306 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4307 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4308 if not req.path then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4309 req.path = "/"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4310 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4311 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4312 local custom_headers, body; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4313 local default_headers = { ["Host"] = req.host, ["User-Agent"] = "Prosody XMPP Server" } |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4314 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4315 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4316 if req.userinfo then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4317 default_headers["Authorization"] = "Basic "..mime.b64(req.userinfo); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4318 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4319 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4320 if ex then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4321 custom_headers = ex.headers; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4322 req.onlystatus = ex.onlystatus; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4323 body = ex.body; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4324 if body then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4325 req.method = "POST "; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4326 default_headers["Content-Length"] = tostring(#body); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4327 default_headers["Content-Type"] = "application/x-www-form-urlencoded"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4328 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4329 if ex.method then req.method = ex.method; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4330 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4331 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4332 req.handler, req.conn = server.wrapclient(socket.tcp(), req.host, req.port or 80, listener, "*a"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4333 req.write = function (...) return req.handler:write(...); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4334 req.conn:settimeout(0); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4335 local ok, err = req.conn:connect(req.host, req.port or 80); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4336 if not ok and err ~= "timeout" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4337 callback(nil, 0, req); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4338 return nil, err; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4339 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4340 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4341 local request_line = { req.method or "GET", " ", req.path, " HTTP/1.1\r\n" }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4342 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4343 if req.query then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4344 t_insert(request_line, 4, "?"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4345 t_insert(request_line, 5, req.query); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4346 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4347 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4348 req.write(t_concat(request_line)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4349 local t = { [2] = ": ", [4] = "\r\n" }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4350 if custom_headers then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4351 for k, v in pairs(custom_headers) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4352 t[1], t[3] = k, v; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4353 req.write(t_concat(t)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4354 default_headers[k] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4355 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4356 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4357 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4358 for k, v in pairs(default_headers) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4359 t[1], t[3] = k, v; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4360 req.write(t_concat(t)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4361 default_headers[k] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4362 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4363 req.write("\r\n"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4364 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4365 if body then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4366 req.write(body); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4367 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4368 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4369 req.callback = function (content, code, request) log("debug", "Calling callback, status %s", code or "---"); return select(2, xpcall(function () return callback(content, code, request) end, handleerr)); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4370 req.reader = request_reader; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4371 req.state = "status"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4372 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4373 listener.register_request(req.handler, req); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4374 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4375 return req; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4376 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4377 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4378 function destroy_request(request) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4379 if request.conn then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4380 request.conn = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4381 request.handler:close() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4382 listener.ondisconnect(request.handler, "closed"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4383 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4384 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4385 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4386 _M.urlencode = urlencode; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4387 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4388 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4389 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4390 package.preload['verse.bosh'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4391 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4392 local new_xmpp_stream = require "util.xmppstream".new; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4393 local st = require "util.stanza"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4394 require "net.httpclient_listener"; -- Required for net.http to work |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4395 local http = require "net.http"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4396 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4397 local stream_mt = setmetatable({}, { __index = verse.stream_mt }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4398 stream_mt.__index = stream_mt; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4399 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4400 local xmlns_stream = "http://etherx.jabber.org/streams"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4401 local xmlns_bosh = "http://jabber.org/protocol/httpbind"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4402 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4403 local reconnect_timeout = 5; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4404 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4405 function verse.new_bosh(logger, url) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4406 local stream = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4407 bosh_conn_pool = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4408 bosh_waiting_requests = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4409 bosh_rid = math.random(1,999999); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4410 bosh_outgoing_buffer = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4411 bosh_url = url; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4412 conn = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4413 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4414 function stream:reopen() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4415 self.bosh_need_restart = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4416 self:flush(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4417 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4418 local conn = verse.new(logger, stream); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4419 return setmetatable(conn, stream_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4420 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4421 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4422 function stream_mt:connect() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4423 self:_send_session_request(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4424 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4425 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4426 function stream_mt:send(data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4427 self:debug("Putting into BOSH send buffer: %s", tostring(data)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4428 self.bosh_outgoing_buffer[#self.bosh_outgoing_buffer+1] = st.clone(data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4429 self:flush(); --TODO: Optimize by doing this on next tick (give a chance for data to buffer) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4430 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4431 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4432 function stream_mt:flush() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4433 if self.connected |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4434 and #self.bosh_waiting_requests < self.bosh_max_requests |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4435 and (#self.bosh_waiting_requests == 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4436 or #self.bosh_outgoing_buffer > 0 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4437 or self.bosh_need_restart) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4438 self:debug("Flushing..."); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4439 local payload = self:_make_body(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4440 local buffer = self.bosh_outgoing_buffer; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4441 for i, stanza in ipairs(buffer) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4442 payload:add_child(stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4443 buffer[i] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4444 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4445 self:_make_request(payload); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4446 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4447 self:debug("Decided not to flush."); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4448 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4449 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4450 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4451 function stream_mt:_make_request(payload) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4452 local request, err = http.request(self.bosh_url, { body = tostring(payload) }, function (response, code, request) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4453 if code ~= 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4454 self.inactive_since = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4455 return self:_handle_response(response, code, request); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4456 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4457 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4458 -- Connection issues, we need to retry this request |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4459 local time = os.time(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4460 if not self.inactive_since then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4461 self.inactive_since = time; -- So we know when it is time to give up |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4462 elseif time - self.inactive_since > self.bosh_max_inactivity then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4463 return self:_disconnected(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4464 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4465 self:debug("%d seconds left to reconnect, retrying in %d seconds...", |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4466 self.bosh_max_inactivity - (time - self.inactive_since), reconnect_timeout); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4467 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4468 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4469 -- Set up reconnect timer |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4470 timer.add_task(reconnect_timeout, function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4471 self:debug("Retrying request..."); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4472 -- Remove old request |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4473 for i, waiting_request in ipairs(self.bosh_waiting_requests) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4474 if waiting_request == request then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4475 table.remove(self.bosh_waiting_requests, i); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4476 break; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4477 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4478 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4479 self:_make_request(payload); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4480 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4481 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4482 if request then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4483 table.insert(self.bosh_waiting_requests, request); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4484 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4485 self:warn("Request failed instantly: %s", err); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4486 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4487 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4488 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4489 function stream_mt:_disconnected() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4490 self.connected = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4491 self:event("disconnected"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4492 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4493 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4494 function stream_mt:_send_session_request() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4495 local body = self:_make_body(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4496 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4497 -- XEP-0124 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4498 body.attr.hold = "1"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4499 body.attr.wait = "60"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4500 body.attr["xml:lang"] = "en"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4501 body.attr.ver = "1.6"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4502 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4503 -- XEP-0206 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4504 body.attr.from = self.jid; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4505 body.attr.to = self.host; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4506 body.attr.secure = 'true'; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4507 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4508 http.request(self.bosh_url, { body = tostring(body) }, function (response, code) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4509 if code == 0 then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4510 -- Failed to connect |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4511 return self:_disconnected(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4512 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4513 -- Handle session creation response |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4514 local payload = self:_parse_response(response) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4515 if not payload then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4516 self:warn("Invalid session creation response"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4517 self:_disconnected(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4518 return; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4519 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4520 self.bosh_sid = payload.attr.sid; -- Session id |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4521 self.bosh_wait = tonumber(payload.attr.wait); -- How long the server may hold connections for |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4522 self.bosh_hold = tonumber(payload.attr.hold); -- How many connections the server may hold |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4523 self.bosh_max_inactivity = tonumber(payload.attr.inactivity); -- Max amount of time with no connections |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4524 self.bosh_max_requests = tonumber(payload.attr.requests) or self.bosh_hold; -- Max simultaneous requests we can make |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4525 self.connected = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4526 self:event("connected"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4527 self:_handle_response_payload(payload); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4528 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4529 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4530 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4531 function stream_mt:_handle_response(response, code, request) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4532 if self.bosh_waiting_requests[1] ~= request then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4533 self:warn("Server replied to request that wasn't the oldest"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4534 for i, waiting_request in ipairs(self.bosh_waiting_requests) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4535 if waiting_request == request then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4536 self.bosh_waiting_requests[i] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4537 break; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4538 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4539 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4540 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4541 table.remove(self.bosh_waiting_requests, 1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4542 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4543 local payload = self:_parse_response(response); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4544 if payload then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4545 self:_handle_response_payload(payload); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4546 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4547 self:flush(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4548 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4549 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4550 function stream_mt:_handle_response_payload(payload) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4551 for stanza in payload:childtags() do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4552 if stanza.attr.xmlns == xmlns_stream then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4553 self:event("stream-"..stanza.name, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4554 elseif stanza.attr.xmlns then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4555 self:event("stream/"..stanza.attr.xmlns, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4556 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4557 self:event("stanza", stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4558 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4559 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4560 if payload.attr.type == "terminate" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4561 self:_disconnected({reason = payload.attr.condition}); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4562 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4563 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4564 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4565 local stream_callbacks = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4566 stream_ns = "http://jabber.org/protocol/httpbind", stream_tag = "body", |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4567 default_ns = "jabber:client", |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4568 streamopened = function (session, attr) session.notopen = nil; session.payload = verse.stanza("body", attr); return true; end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4569 handlestanza = function (session, stanza) session.payload:add_child(stanza); end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4570 }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4571 function stream_mt:_parse_response(response) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4572 self:debug("Parsing response: %s", response); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4573 if response == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4574 self:debug("%s", debug.traceback()); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4575 self:_disconnected(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4576 return; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4577 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4578 local session = { notopen = true, log = self.log }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4579 local stream = new_xmpp_stream(session, stream_callbacks); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4580 stream:feed(response); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4581 return session.payload; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4582 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4583 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4584 function stream_mt:_make_body() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4585 self.bosh_rid = self.bosh_rid + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4586 local body = verse.stanza("body", { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4587 xmlns = xmlns_bosh; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4588 content = "text/xml; charset=utf-8"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4589 sid = self.bosh_sid; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4590 rid = self.bosh_rid; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4591 }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4592 if self.bosh_need_restart then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4593 self.bosh_need_restart = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4594 body.attr.restart = 'true'; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4595 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4596 return body; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4597 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4598 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4599 package.preload['bit'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4600 -- Prosody IM |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4601 -- Copyright (C) 2008-2010 Matthew Wild |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4602 -- Copyright (C) 2008-2010 Waqas Hussain |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4603 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4604 -- This project is MIT/X11 licensed. Please see the |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4605 -- COPYING file in the source package for more information. |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4606 -- |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4607 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4608 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4609 local type = type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4610 local tonumber = tonumber; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4611 local setmetatable = setmetatable; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4612 local error = error; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4613 local tostring = tostring; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4614 local print = print; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4615 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4616 local xor_map = {[0]=0;[1]=1;[2]=2;[3]=3;[4]=4;[5]=5;[6]=6;[7]=7;[8]=8;[9]=9;[10]=10;[11]=11;[12]=12;[13]=13;[14]=14;[15]=15;[16]=1;[17]=0;[18]=3;[19]=2;[20]=5;[21]=4;[22]=7;[23]=6;[24]=9;[25]=8;[26]=11;[27]=10;[28]=13;[29]=12;[30]=15;[31]=14;[32]=2;[33]=3;[34]=0;[35]=1;[36]=6;[37]=7;[38]=4;[39]=5;[40]=10;[41]=11;[42]=8;[43]=9;[44]=14;[45]=15;[46]=12;[47]=13;[48]=3;[49]=2;[50]=1;[51]=0;[52]=7;[53]=6;[54]=5;[55]=4;[56]=11;[57]=10;[58]=9;[59]=8;[60]=15;[61]=14;[62]=13;[63]=12;[64]=4;[65]=5;[66]=6;[67]=7;[68]=0;[69]=1;[70]=2;[71]=3;[72]=12;[73]=13;[74]=14;[75]=15;[76]=8;[77]=9;[78]=10;[79]=11;[80]=5;[81]=4;[82]=7;[83]=6;[84]=1;[85]=0;[86]=3;[87]=2;[88]=13;[89]=12;[90]=15;[91]=14;[92]=9;[93]=8;[94]=11;[95]=10;[96]=6;[97]=7;[98]=4;[99]=5;[100]=2;[101]=3;[102]=0;[103]=1;[104]=14;[105]=15;[106]=12;[107]=13;[108]=10;[109]=11;[110]=8;[111]=9;[112]=7;[113]=6;[114]=5;[115]=4;[116]=3;[117]=2;[118]=1;[119]=0;[120]=15;[121]=14;[122]=13;[123]=12;[124]=11;[125]=10;[126]=9;[127]=8;[128]=8;[129]=9;[130]=10;[131]=11;[132]=12;[133]=13;[134]=14;[135]=15;[136]=0;[137]=1;[138]=2;[139]=3;[140]=4;[141]=5;[142]=6;[143]=7;[144]=9;[145]=8;[146]=11;[147]=10;[148]=13;[149]=12;[150]=15;[151]=14;[152]=1;[153]=0;[154]=3;[155]=2;[156]=5;[157]=4;[158]=7;[159]=6;[160]=10;[161]=11;[162]=8;[163]=9;[164]=14;[165]=15;[166]=12;[167]=13;[168]=2;[169]=3;[170]=0;[171]=1;[172]=6;[173]=7;[174]=4;[175]=5;[176]=11;[177]=10;[178]=9;[179]=8;[180]=15;[181]=14;[182]=13;[183]=12;[184]=3;[185]=2;[186]=1;[187]=0;[188]=7;[189]=6;[190]=5;[191]=4;[192]=12;[193]=13;[194]=14;[195]=15;[196]=8;[197]=9;[198]=10;[199]=11;[200]=4;[201]=5;[202]=6;[203]=7;[204]=0;[205]=1;[206]=2;[207]=3;[208]=13;[209]=12;[210]=15;[211]=14;[212]=9;[213]=8;[214]=11;[215]=10;[216]=5;[217]=4;[218]=7;[219]=6;[220]=1;[221]=0;[222]=3;[223]=2;[224]=14;[225]=15;[226]=12;[227]=13;[228]=10;[229]=11;[230]=8;[231]=9;[232]=6;[233]=7;[234]=4;[235]=5;[236]=2;[237]=3;[238]=0;[239]=1;[240]=15;[241]=14;[242]=13;[243]=12;[244]=11;[245]=10;[246]=9;[247]=8;[248]=7;[249]=6;[250]=5;[251]=4;[252]=3;[253]=2;[254]=1;[255]=0;}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4617 local or_map = {[0]=0;[1]=1;[2]=2;[3]=3;[4]=4;[5]=5;[6]=6;[7]=7;[8]=8;[9]=9;[10]=10;[11]=11;[12]=12;[13]=13;[14]=14;[15]=15;[16]=1;[17]=1;[18]=3;[19]=3;[20]=5;[21]=5;[22]=7;[23]=7;[24]=9;[25]=9;[26]=11;[27]=11;[28]=13;[29]=13;[30]=15;[31]=15;[32]=2;[33]=3;[34]=2;[35]=3;[36]=6;[37]=7;[38]=6;[39]=7;[40]=10;[41]=11;[42]=10;[43]=11;[44]=14;[45]=15;[46]=14;[47]=15;[48]=3;[49]=3;[50]=3;[51]=3;[52]=7;[53]=7;[54]=7;[55]=7;[56]=11;[57]=11;[58]=11;[59]=11;[60]=15;[61]=15;[62]=15;[63]=15;[64]=4;[65]=5;[66]=6;[67]=7;[68]=4;[69]=5;[70]=6;[71]=7;[72]=12;[73]=13;[74]=14;[75]=15;[76]=12;[77]=13;[78]=14;[79]=15;[80]=5;[81]=5;[82]=7;[83]=7;[84]=5;[85]=5;[86]=7;[87]=7;[88]=13;[89]=13;[90]=15;[91]=15;[92]=13;[93]=13;[94]=15;[95]=15;[96]=6;[97]=7;[98]=6;[99]=7;[100]=6;[101]=7;[102]=6;[103]=7;[104]=14;[105]=15;[106]=14;[107]=15;[108]=14;[109]=15;[110]=14;[111]=15;[112]=7;[113]=7;[114]=7;[115]=7;[116]=7;[117]=7;[118]=7;[119]=7;[120]=15;[121]=15;[122]=15;[123]=15;[124]=15;[125]=15;[126]=15;[127]=15;[128]=8;[129]=9;[130]=10;[131]=11;[132]=12;[133]=13;[134]=14;[135]=15;[136]=8;[137]=9;[138]=10;[139]=11;[140]=12;[141]=13;[142]=14;[143]=15;[144]=9;[145]=9;[146]=11;[147]=11;[148]=13;[149]=13;[150]=15;[151]=15;[152]=9;[153]=9;[154]=11;[155]=11;[156]=13;[157]=13;[158]=15;[159]=15;[160]=10;[161]=11;[162]=10;[163]=11;[164]=14;[165]=15;[166]=14;[167]=15;[168]=10;[169]=11;[170]=10;[171]=11;[172]=14;[173]=15;[174]=14;[175]=15;[176]=11;[177]=11;[178]=11;[179]=11;[180]=15;[181]=15;[182]=15;[183]=15;[184]=11;[185]=11;[186]=11;[187]=11;[188]=15;[189]=15;[190]=15;[191]=15;[192]=12;[193]=13;[194]=14;[195]=15;[196]=12;[197]=13;[198]=14;[199]=15;[200]=12;[201]=13;[202]=14;[203]=15;[204]=12;[205]=13;[206]=14;[207]=15;[208]=13;[209]=13;[210]=15;[211]=15;[212]=13;[213]=13;[214]=15;[215]=15;[216]=13;[217]=13;[218]=15;[219]=15;[220]=13;[221]=13;[222]=15;[223]=15;[224]=14;[225]=15;[226]=14;[227]=15;[228]=14;[229]=15;[230]=14;[231]=15;[232]=14;[233]=15;[234]=14;[235]=15;[236]=14;[237]=15;[238]=14;[239]=15;[240]=15;[241]=15;[242]=15;[243]=15;[244]=15;[245]=15;[246]=15;[247]=15;[248]=15;[249]=15;[250]=15;[251]=15;[252]=15;[253]=15;[254]=15;[255]=15;}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4618 local and_map = {[0]=0;[1]=0;[2]=0;[3]=0;[4]=0;[5]=0;[6]=0;[7]=0;[8]=0;[9]=0;[10]=0;[11]=0;[12]=0;[13]=0;[14]=0;[15]=0;[16]=0;[17]=1;[18]=0;[19]=1;[20]=0;[21]=1;[22]=0;[23]=1;[24]=0;[25]=1;[26]=0;[27]=1;[28]=0;[29]=1;[30]=0;[31]=1;[32]=0;[33]=0;[34]=2;[35]=2;[36]=0;[37]=0;[38]=2;[39]=2;[40]=0;[41]=0;[42]=2;[43]=2;[44]=0;[45]=0;[46]=2;[47]=2;[48]=0;[49]=1;[50]=2;[51]=3;[52]=0;[53]=1;[54]=2;[55]=3;[56]=0;[57]=1;[58]=2;[59]=3;[60]=0;[61]=1;[62]=2;[63]=3;[64]=0;[65]=0;[66]=0;[67]=0;[68]=4;[69]=4;[70]=4;[71]=4;[72]=0;[73]=0;[74]=0;[75]=0;[76]=4;[77]=4;[78]=4;[79]=4;[80]=0;[81]=1;[82]=0;[83]=1;[84]=4;[85]=5;[86]=4;[87]=5;[88]=0;[89]=1;[90]=0;[91]=1;[92]=4;[93]=5;[94]=4;[95]=5;[96]=0;[97]=0;[98]=2;[99]=2;[100]=4;[101]=4;[102]=6;[103]=6;[104]=0;[105]=0;[106]=2;[107]=2;[108]=4;[109]=4;[110]=6;[111]=6;[112]=0;[113]=1;[114]=2;[115]=3;[116]=4;[117]=5;[118]=6;[119]=7;[120]=0;[121]=1;[122]=2;[123]=3;[124]=4;[125]=5;[126]=6;[127]=7;[128]=0;[129]=0;[130]=0;[131]=0;[132]=0;[133]=0;[134]=0;[135]=0;[136]=8;[137]=8;[138]=8;[139]=8;[140]=8;[141]=8;[142]=8;[143]=8;[144]=0;[145]=1;[146]=0;[147]=1;[148]=0;[149]=1;[150]=0;[151]=1;[152]=8;[153]=9;[154]=8;[155]=9;[156]=8;[157]=9;[158]=8;[159]=9;[160]=0;[161]=0;[162]=2;[163]=2;[164]=0;[165]=0;[166]=2;[167]=2;[168]=8;[169]=8;[170]=10;[171]=10;[172]=8;[173]=8;[174]=10;[175]=10;[176]=0;[177]=1;[178]=2;[179]=3;[180]=0;[181]=1;[182]=2;[183]=3;[184]=8;[185]=9;[186]=10;[187]=11;[188]=8;[189]=9;[190]=10;[191]=11;[192]=0;[193]=0;[194]=0;[195]=0;[196]=4;[197]=4;[198]=4;[199]=4;[200]=8;[201]=8;[202]=8;[203]=8;[204]=12;[205]=12;[206]=12;[207]=12;[208]=0;[209]=1;[210]=0;[211]=1;[212]=4;[213]=5;[214]=4;[215]=5;[216]=8;[217]=9;[218]=8;[219]=9;[220]=12;[221]=13;[222]=12;[223]=13;[224]=0;[225]=0;[226]=2;[227]=2;[228]=4;[229]=4;[230]=6;[231]=6;[232]=8;[233]=8;[234]=10;[235]=10;[236]=12;[237]=12;[238]=14;[239]=14;[240]=0;[241]=1;[242]=2;[243]=3;[244]=4;[245]=5;[246]=6;[247]=7;[248]=8;[249]=9;[250]=10;[251]=11;[252]=12;[253]=13;[254]=14;[255]=15;} |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4619 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4620 local not_map = {[0]=15;[1]=14;[2]=13;[3]=12;[4]=11;[5]=10;[6]=9;[7]=8;[8]=7;[9]=6;[10]=5;[11]=4;[12]=3;[13]=2;[14]=1;[15]=0;}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4621 local rshift1_map = {[0]=0;[1]=0;[2]=1;[3]=1;[4]=2;[5]=2;[6]=3;[7]=3;[8]=4;[9]=4;[10]=5;[11]=5;[12]=6;[13]=6;[14]=7;[15]=7;}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4622 local rshift1carry_map = {[0]=0;[1]=8;[2]=0;[3]=8;[4]=0;[5]=8;[6]=0;[7]=8;[8]=0;[9]=8;[10]=0;[11]=8;[12]=0;[13]=8;[14]=0;[15]=8;}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4623 local lshift1_map = {[0]=0;[1]=2;[2]=4;[3]=6;[4]=8;[5]=10;[6]=12;[7]=14;[8]=0;[9]=2;[10]=4;[11]=6;[12]=8;[13]=10;[14]=12;[15]=14;}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4624 local lshift1carry_map = {[0]=0;[1]=0;[2]=0;[3]=0;[4]=0;[5]=0;[6]=0;[7]=0;[8]=1;[9]=1;[10]=1;[11]=1;[12]=1;[13]=1;[14]=1;[15]=1;}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4625 local arshift1carry_map = {[0]=0;[1]=0;[2]=0;[3]=0;[4]=0;[5]=0;[6]=0;[7]=0;[8]=8;[9]=8;[10]=8;[11]=8;[12]=8;[13]=8;[14]=8;[15]=8;}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4626 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4627 module "bit" |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4628 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4629 local bit_mt = {__tostring = function(t) return ("%x%x%x%x%x%x%x%x"):format(t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8]); end}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4630 local function do_bop(a, b, op) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4631 return setmetatable({ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4632 op[a[1]*16+b[1]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4633 op[a[2]*16+b[2]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4634 op[a[3]*16+b[3]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4635 op[a[4]*16+b[4]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4636 op[a[5]*16+b[5]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4637 op[a[6]*16+b[6]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4638 op[a[7]*16+b[7]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4639 op[a[8]*16+b[8]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4640 }, bit_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4641 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4642 local function do_uop(a, op) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4643 return setmetatable({ |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4644 op[a[1]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4645 op[a[2]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4646 op[a[3]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4647 op[a[4]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4648 op[a[5]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4649 op[a[6]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4650 op[a[7]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4651 op[a[8]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4652 }, bit_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4653 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4654 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4655 function bxor(a, b) return do_bop(a, b, xor_map); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4656 function bor(a, b) return do_bop(a, b, or_map); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4657 function band(a, b) return do_bop(a, b, and_map); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4658 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4659 function bnot(a) return do_uop(a, not_map); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4660 local function _rshift1(t) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4661 local carry = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4662 for i=1,8 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4663 local t_i = rshift1_map[t[i]] + carry; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4664 carry = rshift1carry_map[t[i]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4665 t[i] = t_i; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4666 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4667 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4668 function rshift(a, i) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4669 local t = {a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4670 for n = 1,i do _rshift1(t); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4671 return setmetatable(t, bit_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4672 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4673 local function _arshift1(t) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4674 local carry = arshift1carry_map[t[1]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4675 for i=1,8 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4676 local t_i = rshift1_map[t[i]] + carry; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4677 carry = rshift1carry_map[t[i]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4678 t[i] = t_i; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4679 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4680 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4681 function arshift(a, i) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4682 local t = {a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4683 for n = 1,i do _arshift1(t); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4684 return setmetatable(t, bit_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4685 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4686 local function _lshift1(t) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4687 local carry = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4688 for i=8,1,-1 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4689 local t_i = lshift1_map[t[i]] + carry; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4690 carry = lshift1carry_map[t[i]]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4691 t[i] = t_i; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4692 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4693 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4694 function lshift(a, i) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4695 local t = {a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4696 for n = 1,i do _lshift1(t); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4697 return setmetatable(t, bit_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4698 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4699 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4700 local function _cast(a) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4701 if type(a) == "number" then a = ("%x"):format(a); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4702 elseif type(a) == "table" then return a; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4703 elseif type(a) ~= "string" then error("string expected, got "..type(a), 2); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4704 local t = {0,0,0,0,0,0,0,0}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4705 a = "00000000"..a; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4706 a = a:sub(-8); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4707 for i = 1,8 do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4708 t[i] = tonumber(a:sub(i,i), 16) or error("Number format error", 2); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4709 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4710 return setmetatable(t, bit_mt); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4711 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4712 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4713 local function wrap1(f) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4714 return function(a, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4715 if type(a) ~= "table" then a = _cast(a); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4716 a = f(a, ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4717 a = tonumber(tostring(a), 16); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4718 if a > 0x7fffffff then a = a - 1 - 0xffffffff; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4719 return a; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4720 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4721 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4722 local function wrap2(f) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4723 return function(a, b, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4724 if type(a) ~= "table" then a = _cast(a); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4725 if type(b) ~= "table" then b = _cast(b); end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4726 a = f(a, b, ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4727 a = tonumber(tostring(a), 16); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4728 if a > 0x7fffffff then a = a - 1 - 0xffffffff; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4729 return a; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4730 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4731 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4732 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4733 bxor = wrap2(bxor); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4734 bor = wrap2(bor); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4735 band = wrap2(band); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4736 bnot = wrap1(bnot); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4737 lshift = wrap1(lshift); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4738 rshift = wrap1(rshift); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4739 arshift = wrap1(arshift); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4740 cast = wrap1(_cast); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4741 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4742 bits = 32; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4743 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4744 return _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4745 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4746 package.preload['verse.client'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4747 local verse = require "verse"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4748 local stream = verse.stream_mt; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4749 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4750 local jid_split = require "util.jid".split; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4751 local adns = require "net.adns"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4752 local lxp = require "lxp"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4753 local st = require "util.stanza"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4754 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4755 -- Shortcuts to save having to load util.stanza |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4756 verse.message, verse.presence, verse.iq, verse.stanza, verse.reply, verse.error_reply = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4757 st.message, st.presence, st.iq, st.stanza, st.reply, st.error_reply; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4758 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4759 local new_xmpp_stream = require "util.xmppstream".new; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4760 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4761 local xmlns_stream = "http://etherx.jabber.org/streams"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4762 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4763 local function compare_srv_priorities(a,b) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4764 return a.priority < b.priority or (a.priority == b.priority and a.weight > b.weight); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4765 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4766 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4767 local stream_callbacks = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4768 stream_ns = xmlns_stream, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4769 stream_tag = "stream", |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4770 default_ns = "jabber:client" }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4771 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4772 function stream_callbacks.streamopened(stream, attr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4773 stream.stream_id = attr.id; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4774 if not stream:event("opened", attr) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4775 stream.notopen = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4776 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4777 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4778 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4779 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4780 function stream_callbacks.streamclosed(stream) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4781 return stream:event("closed"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4782 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4783 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4784 function stream_callbacks.handlestanza(stream, stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4785 if stanza.attr.xmlns == xmlns_stream then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4786 return stream:event("stream-"..stanza.name, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4787 elseif stanza.attr.xmlns then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4788 return stream:event("stream/"..stanza.attr.xmlns, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4789 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4790 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4791 return stream:event("stanza", stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4792 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4793 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4794 function stream:reset() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4795 if self.stream then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4796 self.stream:reset(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4797 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4798 self.stream = new_xmpp_stream(self, stream_callbacks); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4799 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4800 self.notopen = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4801 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4802 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4803 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4804 function stream:connect_client(jid, pass) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4805 self.jid, self.password = jid, pass; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4806 self.username, self.host, self.resource = jid_split(jid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4807 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4808 -- Required XMPP features |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4809 self:add_plugin("tls"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4810 self:add_plugin("sasl"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4811 self:add_plugin("bind"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4812 self:add_plugin("session"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4813 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4814 function self.data(conn, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4815 local ok, err = self.stream:feed(data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4816 if ok then return; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4817 self:debug("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " ")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4818 self:close("xml-not-well-formed"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4819 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4820 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4821 self:hook("connected", function () self:reopen(); end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4822 self:hook("incoming-raw", function (data) return self.data(self.conn, data); end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4823 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4824 self.curr_id = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4825 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4826 self.tracked_iqs = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4827 self:hook("stanza", function (stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4828 local id, type = stanza.attr.id, stanza.attr.type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4829 if id and stanza.name == "iq" and (type == "result" or type == "error") and self.tracked_iqs[id] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4830 self.tracked_iqs[id](stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4831 self.tracked_iqs[id] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4832 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4833 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4834 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4835 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4836 self:hook("stanza", function (stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4837 if stanza.attr.xmlns == nil or stanza.attr.xmlns == "jabber:client" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4838 if stanza.name == "iq" and (stanza.attr.type == "get" or stanza.attr.type == "set") then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4839 local xmlns = stanza.tags[1] and stanza.tags[1].attr.xmlns; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4840 if xmlns then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4841 ret = self:event("iq/"..xmlns, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4842 if not ret then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4843 ret = self:event("iq", stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4844 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4845 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4846 if ret == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4847 self:send(verse.error_reply(stanza, "cancel", "service-unavailable")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4848 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4849 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4850 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4851 ret = self:event(stanza.name, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4852 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4853 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4854 return ret; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4855 end, -1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4856 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4857 self:hook("outgoing", function (data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4858 if data.name then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4859 self:event("stanza-out", data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4860 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4861 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4862 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4863 self:hook("stanza-out", function (stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4864 if not stanza.attr.xmlns then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4865 self:event(stanza.name.."-out", stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4866 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4867 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4868 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4869 local function stream_ready() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4870 self:event("ready"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4871 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4872 self:hook("session-success", stream_ready, -1) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4873 self:hook("bind-success", stream_ready, -1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4874 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4875 local _base_close = self.close; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4876 function self:close(reason) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4877 if not self.notopen then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4878 self:send("</stream:stream>"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4879 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4880 return _base_close(self); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4881 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4882 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4883 local function start_connect() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4884 -- Initialise connection |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4885 self:connect(self.connect_host or self.host, self.connect_port or 5222); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4886 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4887 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4888 if not (self.connect_host or self.connect_port) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4889 -- Look up SRV records |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4890 adns.lookup(function (answer) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4891 if answer then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4892 local srv_hosts = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4893 self.srv_hosts = srv_hosts; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4894 for _, record in ipairs(answer) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4895 table.insert(srv_hosts, record.srv); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4896 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4897 table.sort(srv_hosts, compare_srv_priorities); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4898 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4899 local srv_choice = srv_hosts[1]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4900 self.srv_choice = 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4901 if srv_choice then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4902 self.connect_host, self.connect_port = srv_choice.target, srv_choice.port; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4903 self:debug("Best record found, will connect to %s:%d", self.connect_host or self.host, self.connect_port or 5222); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4904 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4905 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4906 self:hook("disconnected", function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4907 if self.srv_hosts and self.srv_choice < #self.srv_hosts then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4908 self.srv_choice = self.srv_choice + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4909 local srv_choice = srv_hosts[self.srv_choice]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4910 self.connect_host, self.connect_port = srv_choice.target, srv_choice.port; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4911 start_connect(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4912 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4913 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4914 end, 1000); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4915 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4916 self:hook("connected", function () |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4917 self.srv_hosts = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4918 end, 1000); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4919 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4920 start_connect(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4921 end, "_xmpp-client._tcp."..(self.host)..".", "SRV"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4922 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4923 start_connect(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4924 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4925 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4926 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4927 function stream:reopen() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4928 self:reset(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4929 self:send(st.stanza("stream:stream", { to = self.host, ["xmlns:stream"]='http://etherx.jabber.org/streams', |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4930 xmlns = "jabber:client", version = "1.0" }):top_tag()); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4931 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4932 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4933 function stream:send_iq(iq, callback) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4934 local id = self:new_id(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4935 self.tracked_iqs[id] = callback; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4936 iq.attr.id = id; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4937 self:send(iq); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4938 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4939 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4940 function stream:new_id() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4941 self.curr_id = self.curr_id + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4942 return tostring(self.curr_id); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4943 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4944 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4945 package.preload['verse.component'] = (function (...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4946 local verse = require "verse"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4947 local stream = verse.stream_mt; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4948 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4949 local jid_split = require "util.jid".split; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4950 local lxp = require "lxp"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4951 local st = require "util.stanza"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4952 local sha1 = require "util.sha1".sha1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4953 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4954 -- Shortcuts to save having to load util.stanza |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4955 verse.message, verse.presence, verse.iq, verse.stanza, verse.reply, verse.error_reply = |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4956 st.message, st.presence, st.iq, st.stanza, st.reply, st.error_reply; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4957 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4958 local new_xmpp_stream = require "util.xmppstream".new; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4959 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4960 local xmlns_stream = "http://etherx.jabber.org/streams"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4961 local xmlns_component = "jabber:component:accept"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4962 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4963 local stream_callbacks = { |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4964 stream_ns = xmlns_stream, |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4965 stream_tag = "stream", |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4966 default_ns = xmlns_component }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4967 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4968 function stream_callbacks.streamopened(stream, attr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4969 stream.stream_id = attr.id; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4970 if not stream:event("opened", attr) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4971 stream.notopen = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4972 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4973 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4974 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4975 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4976 function stream_callbacks.streamclosed(stream) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4977 return stream:event("closed"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4978 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4979 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4980 function stream_callbacks.handlestanza(stream, stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4981 if stanza.attr.xmlns == xmlns_stream then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4982 return stream:event("stream-"..stanza.name, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4983 elseif stanza.attr.xmlns or stanza.name == "handshake" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4984 return stream:event("stream/"..(stanza.attr.xmlns or xmlns_component), stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4985 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4986 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4987 return stream:event("stanza", stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4988 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4989 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4990 function stream:reset() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4991 if self.stream then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4992 self.stream:reset(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4993 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4994 self.stream = new_xmpp_stream(self, stream_callbacks); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4995 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4996 self.notopen = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4997 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4998 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
4999 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5000 function stream:connect_component(jid, pass) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5001 self.jid, self.password = jid, pass; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5002 self.username, self.host, self.resource = jid_split(jid); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5003 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5004 function self.data(conn, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5005 local ok, err = self.stream:feed(data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5006 if ok then return; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5007 stream:debug("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " ")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5008 stream:close("xml-not-well-formed"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5009 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5010 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5011 self:hook("incoming-raw", function (data) return self.data(self.conn, data); end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5012 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5013 self.curr_id = 0; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5014 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5015 self.tracked_iqs = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5016 self:hook("stanza", function (stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5017 local id, type = stanza.attr.id, stanza.attr.type; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5018 if id and stanza.name == "iq" and (type == "result" or type == "error") and self.tracked_iqs[id] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5019 self.tracked_iqs[id](stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5020 self.tracked_iqs[id] = nil; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5021 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5022 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5023 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5024 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5025 self:hook("stanza", function (stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5026 if stanza.attr.xmlns == nil or stanza.attr.xmlns == "jabber:client" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5027 if stanza.name == "iq" and (stanza.attr.type == "get" or stanza.attr.type == "set") then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5028 local xmlns = stanza.tags[1] and stanza.tags[1].attr.xmlns; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5029 if xmlns then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5030 ret = self:event("iq/"..xmlns, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5031 if not ret then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5032 ret = self:event("iq", stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5033 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5034 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5035 if ret == nil then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5036 self:send(verse.error_reply(stanza, "cancel", "service-unavailable")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5037 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5038 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5039 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5040 ret = self:event(stanza.name, stanza); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5041 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5042 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5043 return ret; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5044 end, -1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5045 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5046 self:hook("opened", function (attr) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5047 print(self.jid, self.stream_id, attr.id); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5048 local token = sha1(self.stream_id..pass, true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5049 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5050 self:send(st.stanza("handshake", { xmlns = xmlns_component }):text(token)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5051 self:hook("stream/"..xmlns_component, function (stanza) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5052 if stanza.name == "handshake" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5053 self:event("authentication-success"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5054 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5055 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5056 end); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5057 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5058 local function stream_ready() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5059 self:event("ready"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5060 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5061 self:hook("authentication-success", stream_ready, -1); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5062 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5063 -- Initialise connection |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5064 self:connect(self.connect_host or self.host, self.connect_port or 5347); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5065 self:reopen(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5066 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5067 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5068 function stream:reopen() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5069 self:reset(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5070 self:send(st.stanza("stream:stream", { to = self.host, ["xmlns:stream"]='http://etherx.jabber.org/streams', |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5071 xmlns = xmlns_component, version = "1.0" }):top_tag()); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5072 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5073 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5074 function stream:close(reason) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5075 if not self.notopen then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5076 self:send("</stream:stream>"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5077 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5078 local on_disconnect = self.conn.disconnect(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5079 self.conn:close(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5080 on_disconnect(conn, reason); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5081 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5082 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5083 function stream:send_iq(iq, callback) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5084 local id = self:new_id(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5085 self.tracked_iqs[id] = callback; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5086 iq.attr.id = id; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5087 self:send(iq); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5088 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5089 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5090 function stream:new_id() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5091 self.curr_id = self.curr_id + 1; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5092 return tostring(self.curr_id); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5093 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5094 end) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5095 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5096 -- Use LuaRocks if available |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5097 pcall(require, "luarocks.require"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5098 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5099 -- Load LuaSec if available |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5100 pcall(require, "ssl"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5101 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5102 local server = require "net.server"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5103 local events = require "util.events"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5104 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5105 module("verse", package.seeall); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5106 local verse = _M; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5107 _M.server = server; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5108 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5109 local stream = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5110 stream.__index = stream; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5111 stream_mt = stream; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5112 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5113 verse.plugins = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5114 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5115 function verse.new(logger, base) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5116 local t = setmetatable(base or {}, stream); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5117 t.id = tostring(t):match("%x*$"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5118 t:set_logger(logger, true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5119 t.events = events.new(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5120 t.plugins = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5121 return t; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5122 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5123 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5124 verse.add_task = require "util.timer".add_task; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5125 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5126 verse.logger = logger.init; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5127 verse.log = verse.logger("verse"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5128 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5129 function verse.set_logger(logger) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5130 verse.log = logger; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5131 server.setlogger(logger); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5132 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5133 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5134 function verse.filter_log(levels, logger) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5135 local level_set = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5136 for _, level in ipairs(levels) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5137 level_set[level] = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5138 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5139 return function (level, name, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5140 if level_set[level] then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5141 return logger(level, name, ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5142 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5143 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5144 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5145 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5146 local function error_handler(err) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5147 verse.log("error", "Error: %s", err); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5148 verse.log("error", "Traceback: %s", debug.traceback()); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5149 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5150 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5151 function verse.set_error_handler(new_error_handler) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5152 error_handler = new_error_handler; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5153 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5154 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5155 function verse.loop() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5156 return xpcall(server.loop, error_handler); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5157 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5158 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5159 function verse.step() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5160 return xpcall(server.step, error_handler); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5161 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5162 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5163 function verse.quit() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5164 return server.setquitting(true); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5165 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5166 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5167 function stream:connect(connect_host, connect_port) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5168 connect_host = connect_host or "localhost"; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5169 connect_port = tonumber(connect_port) or 5222; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5170 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5171 -- Create and initiate connection |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5172 local conn = socket.tcp() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5173 conn:settimeout(0); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5174 local success, err = conn:connect(connect_host, connect_port); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5175 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5176 if not success and err ~= "timeout" then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5177 self:warn("connect() to %s:%d failed: %s", connect_host, connect_port, err); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5178 return self:event("disconnected", { reason = err }) or false, err; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5179 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5180 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5181 local conn = server.wrapclient(conn, connect_host, connect_port, new_listener(self), "*a"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5182 if not conn then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5183 self:warn("connection initialisation failed: %s", err); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5184 return self:event("disconnected", { reason = err }) or false, err; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5185 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5186 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5187 self.conn = conn; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5188 self.send = function (stream, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5189 self:event("outgoing", data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5190 data = tostring(data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5191 self:event("outgoing-raw", data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5192 return conn:write(data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5193 end; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5194 return true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5195 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5196 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5197 function stream:close() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5198 if not self.conn then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5199 verse.log("error", "Attempt to close disconnected connection - possibly a bug"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5200 return; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5201 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5202 local on_disconnect = self.conn.disconnect(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5203 self.conn:close(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5204 on_disconnect(conn, reason); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5205 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5206 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5207 -- Logging functions |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5208 function stream:debug(...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5209 if self.logger and self.log.debug then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5210 return self.logger("debug", ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5211 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5212 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5213 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5214 function stream:warn(...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5215 if self.logger and self.log.warn then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5216 return self.logger("warn", ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5217 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5218 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5219 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5220 function stream:error(...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5221 if self.logger and self.log.error then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5222 return self.logger("error", ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5223 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5224 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5225 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5226 function stream:set_logger(logger, levels) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5227 local old_logger = self.logger; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5228 if logger then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5229 self.logger = logger; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5230 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5231 if levels then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5232 if levels == true then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5233 levels = { "debug", "info", "warn", "error" }; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5234 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5235 self.log = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5236 for _, level in ipairs(levels) do |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5237 self.log[level] = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5238 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5239 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5240 return old_logger; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5241 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5242 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5243 function stream_mt:set_log_levels(levels) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5244 self:set_logger(nil, levels); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5245 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5246 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5247 -- Event handling |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5248 function stream:event(name, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5249 self:debug("Firing event: "..tostring(name)); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5250 return self.events.fire_event(name, ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5251 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5252 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5253 function stream:hook(name, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5254 return self.events.add_handler(name, ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5255 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5256 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5257 function stream:unhook(name, handler) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5258 return self.events.remove_handler(name, handler); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5259 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5260 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5261 function verse.eventable(object) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5262 object.events = events.new(); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5263 object.hook, object.unhook = stream.hook, stream.unhook; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5264 local fire_event = object.events.fire_event; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5265 function object:event(name, ...) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5266 return fire_event(name, ...); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5267 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5268 return object; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5269 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5270 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5271 function stream:add_plugin(name) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5272 if self.plugins[name] then return true; end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5273 if require("verse.plugins."..name) then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5274 local ok, err = verse.plugins[name](self); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5275 if ok ~= false then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5276 self:debug("Loaded %s plugin", name); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5277 self.plugins[name] = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5278 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5279 self:warn("Failed to load %s plugin: %s", name, err); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5280 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5281 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5282 return self; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5283 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5284 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5285 -- Listener factory |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5286 function new_listener(stream) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5287 local conn_listener = {}; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5288 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5289 function conn_listener.onconnect(conn) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5290 stream.connected = true; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5291 stream:event("connected"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5292 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5293 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5294 function conn_listener.onincoming(conn, data) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5295 stream:event("incoming-raw", data); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5296 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5297 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5298 function conn_listener.ondisconnect(conn, err) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5299 stream.connected = false; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5300 stream:event("disconnected", { reason = err }); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5301 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5302 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5303 function conn_listener.ondrain(conn) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5304 stream:event("drained"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5305 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5306 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5307 function conn_listener.onstatus(conn, new_status) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5308 stream:event("status", new_status); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5309 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5310 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5311 return conn_listener; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5312 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5313 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5314 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5315 local log = require "util.logger".init("verse"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5316 |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5317 return verse; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5318 end) |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5319 -- README |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5320 -- Squish verse into this dir, then squish them into one, which you move |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5321 -- and rename to mod_ircd.lua in your prosody modules/plugins dir. |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5322 -- |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5323 -- IRC spec: |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5324 -- http://tools.ietf.org/html/rfc2812 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5325 local _module = module |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5326 module = _G.module |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5327 local module = _module |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5328 -- |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5329 local component_jid, component_secret, muc_server = |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5330 module.host, nil, module:get_option("conference_server"); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5331 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5332 package.loaded["util.sha1"] = require "util.encodings"; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5333 local verse = require "verse" |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5334 require "verse.component" |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5335 require "socket" |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5336 c = verse.new();--verse.logger()) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5337 c:add_plugin("groupchat"); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5338 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5339 local function verse2prosody(e) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5340 return c:event("stanza", e.stanza) or true; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5341 end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5342 module:hook("message/bare", verse2prosody); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5343 module:hook("message/full", verse2prosody); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5344 module:hook("presence/bare", verse2prosody); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5345 module:hook("presence/full", verse2prosody); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5346 c.type = "component"; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5347 c.send = core_post_stanza; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5348 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5349 -- This plugin is actually a verse based component, but that mode is currently commented out |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5350 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5351 -- Add some hooks for debugging |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5352 --c:hook("opened", function () print("Stream opened!") end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5353 --c:hook("closed", function () print("Stream closed!") end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5354 --c:hook("stanza", function (stanza) print("Stanza:", stanza) end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5355 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5356 -- This one prints all received data |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5357 --c:hook("incoming-raw", print, 1000); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5358 --c:hook("stanza", print, 1000); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5359 --c:hook("outgoing-raw", print, 1000); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5360 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5361 -- Print a message after authentication |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5362 --c:hook("authentication-success", function () print("Logged in!"); end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5363 --c:hook("authentication-failure", function (err) print("Failed to log in! Error: "..tostring(err.condition)); end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5364 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5365 -- Print a message and exit when disconnected |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5366 --c:hook("disconnected", function () print("Disconnected!"); os.exit(); end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5367 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5368 -- Now, actually start the connection: |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5369 --c.connect_host = "127.0.0.1" |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5370 --c:connect_component(component_jid, component_secret); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5371 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5372 local jid = require "util.jid"; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5373 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5374 local function irc2muc(channel, nick) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5375 return jid.join(channel:gsub("^#", ""), muc_server, nick) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5376 end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5377 local function muc2irc(room) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5378 local channel, _, nick = jid.split(room); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5379 return "#"..channel, nick; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5380 end |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5381 local rolemap = { |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5382 moderator = "@", |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5383 participant = "+", |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5384 } |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5385 local modemap = { |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5386 moderator = "o", |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5387 participant = "v", |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5388 } |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5389 |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5390 local irc_listener = { default_port = 6667, default_mode = "*l" }; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5391 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5392 local sessions = {}; |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5393 local jids = {}; |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5394 local commands = {}; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5395 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5396 local nicks = {}; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5397 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5398 local st = require "util.stanza"; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5399 |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5400 local conference_server = muc_server; |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5401 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5402 local function irc_close_session(session) |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5403 session.conn:close(); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5404 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5405 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5406 function irc_listener.onincoming(conn, data) |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5407 local session = sessions[conn]; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5408 if not session then |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5409 session = { conn = conn, host = component_jid, reset_stream = function () end, |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5410 close = irc_close_session, log = logger.init("irc"..(conn.id or "1")), |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5411 rooms = {}, |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5412 roster = {} }; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5413 sessions[conn] = session; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5414 function session.data(data) |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5415 local command, args = data:match("^%s*([^ ]+) *(.*)%s*$"); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5416 if not command then |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5417 return; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5418 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5419 command = command:upper(); |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5420 if not session.nick then |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5421 if not (command == "USER" or command == "NICK") then |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5422 session.send(":" .. session.host .. " 451 " .. command .. " :You have not registered") |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5423 end |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5424 end |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5425 if commands[command] then |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5426 local ret = commands[command](session, args); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5427 if ret then |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5428 session.send(ret.."\r\n"); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5429 end |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5430 else |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5431 session.send(":" .. session.host .. " 421 " .. session.nick .. " " .. command .. " :Unknown command") |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5432 module:log("debug", "Unknown command: %s", command); |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5433 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5434 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5435 function session.send(data) |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5436 return conn:write(data.."\r\n"); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5437 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5438 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5439 if data then |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5440 session.data(data); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5441 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5442 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5443 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5444 function irc_listener.ondisconnect(conn, error) |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5445 local session = sessions[conn]; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5446 for _, room in pairs(session.rooms) do |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5447 room:leave("Disconnected"); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5448 end |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5449 jids[session.full_jid] = nil; |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5450 nicks[session.nick] = nil; |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5451 sessions[conn] = nil; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5452 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5453 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5454 function commands.NICK(session, nick) |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5455 if session.nick then |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5456 session.send(":"..session.host.." 484 * "..nick.." :I'm afraid I can't let you do that, "..nick); |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5457 --TODO Loop throug all rooms and change nick, with help from Verse. |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5458 return; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5459 end |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5460 nick = nick:match("^[%w_]+"); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5461 if nicks[nick] then |
236
24582ea48471
mod_ircd: Fix "nickname in use" reply
Matthew Wild <mwild1@gmail.com>
parents:
212
diff
changeset
|
5462 session.send(":"..session.host.." 433 * "..nick.." :The nickname "..nick.." is already in use"); |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5463 return; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5464 end |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5465 local full_jid = jid.join(nick, component_jid, "ircd"); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5466 jids[full_jid] = session; |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5467 nicks[nick] = session; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5468 session.nick = nick; |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5469 session.full_jid = full_jid; |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5470 session.type = "c2s"; |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5471 session.send(":"..session.host.." 001 "..session.nick.." :Welcome to XMPP via the "..session.host.." gateway "..session.nick); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5472 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5473 |
329 | 5474 function commands.USER(session, params) |
5475 -- FIXME | |
5476 -- Empty command for now | |
5477 end | |
5478 | |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5479 function commands.JOIN(session, channel) |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5480 local room_jid = irc2muc(channel); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5481 print(session.full_jid); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5482 local room, err = c:join_room(room_jid, session.nick, { source = session.full_jid } ); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5483 if not room then |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5484 return ":"..session.host.." ERR :Could not join room: "..err |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5485 end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5486 session.rooms[channel] = room; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5487 room.channel = channel; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5488 room.session = session; |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5489 session.send(":"..session.nick.." JOIN :"..channel); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5490 session.send(":"..session.host.." 332 "..session.nick.." "..channel.." :Connection in progress..."); |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5491 room:hook("message", function(event) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5492 if not event.body then return end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5493 local nick, body = event.nick, event.body; |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5494 if nick ~= session.nick then |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5495 if body:sub(1,4) == "/me " then |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5496 body = "\1ACTION ".. body:sub(5) .. "\1" |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5497 end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5498 session.send(":"..nick.." PRIVMSG "..channel.." :"..body); |
329 | 5499 --FIXME PM's probably won't work |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5500 end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5501 end); |
455
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5502 room:hook("subject-changed", function(changed) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5503 session.send((":%s TOPIC %s :%s"):format(changed.by, channel, changed.to or "")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5504 end); |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5505 end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5506 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5507 c:hook("groupchat/joined", function(room) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5508 local session = room.session or jids[room.opts.source]; |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5509 local channel = room.channel; |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5510 session.send((":%s!%s JOIN %s :"):format(session.nick, session.nick, channel)); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5511 if room.topic then |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5512 session.send((":%s 332 %s :%s"):format(session.host, channel, room.topic)); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5513 end |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5514 commands.NAMES(session, channel) |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5515 --FIXME Ones own mode get's lost |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5516 --session.send((":%s MODE %s +%s %s"):format(session.host, room.channel, modemap[nick.role], nick.nick)); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5517 room:hook("occupant-joined", function(nick) |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5518 session.send((":%s!%s JOIN :%s"):format(nick.nick, nick.nick, channel)); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5519 if nick.role and modemap[nick.role] then |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5520 session.send((":%s MODE %s +%s %s"):format(session.host, room.channel, modemap[nick.role], nick.nick)); |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5521 end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5522 end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5523 room:hook("occupant-left", function(nick) |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5524 session.send((":%s!%s PART %s :"):format(nick.nick, nick.nick, channel)); |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5525 end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5526 end); |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5527 |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5528 function commands.NAMES(session, channel) |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5529 local nicks = { }; |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5530 local room = session.rooms[channel]; |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5531 if not room then return end |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5532 -- TODO Break this out into commands.NAMES |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5533 for nick, n in pairs(room.occupants) do |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5534 if n.role and rolemap[n.role] then |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5535 nick = rolemap[n.role] .. nick; |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5536 end |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5537 table.insert(nicks, nick); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5538 end |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5539 nicks = table.concat(nicks, " "); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5540 --:molyb.irc.bnfh.org 353 derp = #grill-bit :derp hyamobi walt snuggles_ E-Rock kng grillbit gunnarbot Frink shedma zagabar zash Mrw00t Appiah J10 lectus peck EricJ soso mackt offer hyarion @pettter MMN-o |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5541 session.send((":%s 353 %s = %s :%s"):format(session.host, session.nick, channel, nicks)); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5542 session.send((":%s 366 %s %s :End of /NAMES list."):format(session.host, session.nick, channel)); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5543 session.send(":"..session.host.." 353 "..session.nick.." = "..channel.." :"..nicks); |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5544 end |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5545 |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5546 function commands.PART(session, channel) |
132
d4ff1cd414e5
mod_ircd: Add PING command / Echo PART back
Florian Zeitz <florob@babelmonkeys.de>
parents:
111
diff
changeset
|
5547 local channel, part_message = channel:match("^([^:]+):?(.*)$"); |
d4ff1cd414e5
mod_ircd: Add PING command / Echo PART back
Florian Zeitz <florob@babelmonkeys.de>
parents:
111
diff
changeset
|
5548 channel = channel:match("^([%S]*)"); |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5549 session.rooms[channel]:leave(part_message); |
132
d4ff1cd414e5
mod_ircd: Add PING command / Echo PART back
Florian Zeitz <florob@babelmonkeys.de>
parents:
111
diff
changeset
|
5550 session.send(":"..session.nick.." PART :"..channel); |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5551 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5552 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5553 function commands.PRIVMSG(session, message) |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5554 local channel, message = message:match("^(%S+) :(.+)$"); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5555 if message and #message > 0 and session.rooms[channel] then |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5556 if message:sub(1,8) == "\1ACTION " then |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5557 message = "/me ".. message:sub(9,-2) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5558 end |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5559 module:log("debug", "%s sending PRIVMSG \"%s\" to %s", session.nick, message, channel); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5560 session.rooms[channel]:send_message(message); |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5561 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5562 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5563 |
455
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5564 function commands.TOPIC(session, message) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5565 if not message then return end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5566 local channel, topic = message:match("^(%S+) :(.*)$"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5567 if not channel then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5568 channel = message:match("^(%S+)"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5569 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5570 if not channel then return end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5571 local room = session.rooms[channel]; |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5572 if topic then |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5573 room:set_subject(topic) |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5574 else |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5575 session.send((":%s TOPIC %s :%s"):format(session.host, channel, room.subject or "")); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5576 -- first should be who set it, but verse doesn't provide that yet, so we'll |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5577 -- just say it was the server |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5578 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5579 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5580 |
132
d4ff1cd414e5
mod_ircd: Add PING command / Echo PART back
Florian Zeitz <florob@babelmonkeys.de>
parents:
111
diff
changeset
|
5581 function commands.PING(session, server) |
d4ff1cd414e5
mod_ircd: Add PING command / Echo PART back
Florian Zeitz <florob@babelmonkeys.de>
parents:
111
diff
changeset
|
5582 session.send(":"..session.host..": PONG "..server); |
d4ff1cd414e5
mod_ircd: Add PING command / Echo PART back
Florian Zeitz <florob@babelmonkeys.de>
parents:
111
diff
changeset
|
5583 end |
d4ff1cd414e5
mod_ircd: Add PING command / Echo PART back
Florian Zeitz <florob@babelmonkeys.de>
parents:
111
diff
changeset
|
5584 |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5585 function commands.WHO(session, channel) |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5586 if session.rooms[channel] then |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5587 local room = session.rooms[channel] |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5588 for nick in pairs(room.occupants) do |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5589 --n=MattJ 91.85.191.50 irc.freenode.net MattJ H :0 Matthew Wild |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5590 session.send(":"..session.host.." 352 "..session.nick.." "..channel.." "..nick.." "..nick.." "..session.host.." "..nick.." H :0 "..nick); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5591 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5592 session.send(":"..session.host.." 315 "..session.nick.." "..channel.. " :End of /WHO list"); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5593 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5594 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5595 |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5596 function commands.MODE(session, channel) |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5597 session.send(":"..session.host.." 324 "..session.nick.." "..channel.." +J"); |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5598 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5599 |
329 | 5600 function commands.QUIT(session, message) |
5601 session.send("ERROR :Closing Link: "..session.nick); | |
5602 for _, room in pairs(session.rooms) do | |
5603 room:leave(message); | |
5604 end | |
335
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5605 jids[session.full_jid] = nil; |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5606 nicks[session.nick] = nil; |
8b81257c9dc5
mod_ircd: Don't allow any command until nick has been set. Split out NAMES into a command.
Kim Alvefur <zash@zash.se>
parents:
329
diff
changeset
|
5607 sessions[session.conn] = nil; |
329 | 5608 session:close(); |
5609 end | |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5610 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5611 function commands.RAW(session, data) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5612 --c:send(data) |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5613 end |
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5614 |
455
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5615 local function desetup() |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5616 require "net.connlisteners".deregister("irc"); |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5617 end |
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5618 |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5619 --c:hook("ready", function () |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5620 require "net.connlisteners".register("irc", irc_listener); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5621 require "net.connlisteners".start("irc"); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5622 --end); |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5623 |
455
52f2188ec47d
mod_default_vcard: Sets initial vCard from data enterd on registration
Kim Alvefur <zash@zash.se>
parents:
447
diff
changeset
|
5624 module:hook("module-unloaded", desetup) |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5625 --print("Starting loop...") |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5626 --verse.loop() |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5627 |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5628 --[[ TODO |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5629 |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5630 This is so close to working as a Prosody plugin you know ^^ |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5631 Zash: :D |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5632 MattJ: That component function can go |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5633 Prosody fires events now |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5634 but verse fires "message" where Prosody fires "message/bare" |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5635 [20:59:50] |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5636 Easy... don't connect_component |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5637 hook "message/*" and presence, and whatever |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5638 and call c:event("message", ...) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5639 module:hook("message/bare", function (e) c:event("message", e.stanza) end) |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5640 as an example |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5641 That's so bad ^^ |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5642 and override c:send() to core_post_stanza... |
111
3de60860adca
mod_ircd: Initial commit of a wonderfully hacky but working IRC->XMPP interface for Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5643 |
326
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5644 --]] |
282abba844e8
mod_ircd: Partial rewrite, use verse for MUC
Kim Alvefur <zash@zash.se>
parents:
282
diff
changeset
|
5645 |