Mercurial > prosody-modules
annotate mod_proxy65/mod_proxy65.lua @ 94:941fd7d8b9b2
mod_muc_log: split into mod_muc_log and mod_muc_log_http
mod_muc_log: should be enabled per muc component which should log!
mod_muc_log_http: handle /me messages, add previous, next day links to day view, add link to speeqe.com to directly join the room,
make the window recalculate the content div size, scrollbars are only shown when needed
| author | Thilo Cestonaro <thilo@cestona.ro> |
|---|---|
| date | Tue, 17 Nov 2009 21:19:17 +0100 |
| parents | 9d92db30235f |
| children | e704834c5613 |
| rev | line source |
|---|---|
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
1 -- Copyright (C) 2009 Thilo Cestonaro |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
2 -- |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
3 -- This project is MIT/X11 licensed. Please see the |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
4 -- COPYING file in the source package for more information. |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
5 -- |
|
83
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
6 --[[ |
|
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
7 * to restart the proxy in the console: e.g. |
|
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
8 module:unload("proxy65"); |
|
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
9 > server.removeserver(<proxy65_port>); |
|
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
10 module:load("proxy65", <proxy65_jid>); |
|
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
11 ]]-- |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
12 |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
13 if module:get_host_type() ~= "component" then |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
14 error("proxy65 should be loaded as a component, please see http://prosody.im/doc/components", 0); |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
15 end |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
16 |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
17 local jid_split = require "util.jid".split; |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
18 local st = require "util.stanza"; |
|
70
d3afb1403aa7
mod_proxy65: Remove unused bin2hex function, and compact more code. Finally down <200 lines :)
Matthew Wild <mwild1@gmail.com>
parents:
69
diff
changeset
|
19 local componentmanager = require "core.componentmanager"; |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
20 local config_get = require "core.configmanager".get; |
|
70
d3afb1403aa7
mod_proxy65: Remove unused bin2hex function, and compact more code. Finally down <200 lines :)
Matthew Wild <mwild1@gmail.com>
parents:
69
diff
changeset
|
21 local connlisteners = require "net.connlisteners"; |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
22 local sha1 = require "util.hashes".sha1; |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
23 |
|
70
d3afb1403aa7
mod_proxy65: Remove unused bin2hex function, and compact more code. Finally down <200 lines :)
Matthew Wild <mwild1@gmail.com>
parents:
69
diff
changeset
|
24 local host, name = module:get_host(), "SOCKS5 Bytestreams Service"; |
|
72
2bf6c7c590a1
mod_proxy65: component register and deregister are with "_component" appended
Thilo Cestonaro <thilo@cestona.ro>
parents:
70
diff
changeset
|
25 local sessions, transfers, component, replies_cache = {}, {}, nil, {}; |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
26 |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
27 local proxy_port = config_get(host, "core", "proxy65_port") or 5000; |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
28 local proxy_interface = config_get(host, "core", "proxy65_interface") or "*"; |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
29 local proxy_address = config_get(host, "core", "proxy65_address") or (proxy_interface ~= "*" and proxy_interface) or host; |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
30 local proxy_acl = config_get(host, "core", "proxy65_acl"); |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
31 |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
32 local connlistener = { default_port = proxy_port, default_interface = proxy_interface, default_mode = "*a" }; |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
33 |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
34 function connlistener.listener(conn, data) |
|
70
d3afb1403aa7
mod_proxy65: Remove unused bin2hex function, and compact more code. Finally down <200 lines :)
Matthew Wild <mwild1@gmail.com>
parents:
69
diff
changeset
|
35 local session = sessions[conn] or {}; |
|
66
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
36 |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
37 if session.setup == nil and data ~= nil and data:sub(1):byte() == 0x05 and data:len() > 2 then |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
38 local nmethods = data:sub(2):byte(); |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
39 local methods = data:sub(3); |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
40 local supported = false; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
41 for i=1, nmethods, 1 do |
|
66
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
42 if(methods:sub(i):byte() == 0x00) then -- 0x00 == method: NO AUTH |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
43 supported = true; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
44 break; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
45 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
46 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
47 if(supported) then |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
48 module:log("debug", "new session found ... ") |
|
70
d3afb1403aa7
mod_proxy65: Remove unused bin2hex function, and compact more code. Finally down <200 lines :)
Matthew Wild <mwild1@gmail.com>
parents:
69
diff
changeset
|
49 session.setup = true; |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
50 sessions[conn] = session; |
|
69
87dfd34dceb2
mod_proxy65: removed unneeded var and session stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
68
diff
changeset
|
51 conn.write(string.char(5, 0)); |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
52 end |
|
66
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
53 return; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
54 end |
|
70
d3afb1403aa7
mod_proxy65: Remove unused bin2hex function, and compact more code. Finally down <200 lines :)
Matthew Wild <mwild1@gmail.com>
parents:
69
diff
changeset
|
55 if session.setup then |
|
66
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
56 if session.sha ~= nil and transfers[session.sha] ~= nil then |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
57 local sha = session.sha; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
58 if transfers[sha].activated == true and transfers[sha].initiator == conn and transfers[sha].target ~= nil then |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
59 transfers[sha].target.write(data); |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
60 return; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
61 end |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
62 end |
|
66
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
63 if data ~= nil and data:len() == 0x2F and -- 40 == length of SHA1 HASH, and 7 other bytes => 47 => 0x2F |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
64 data:sub(1):byte() == 0x05 and -- SOCKS5 has 5 in first byte |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
65 data:sub(2):byte() == 0x01 and -- CMD must be 1 |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
66 data:sub(3):byte() == 0x00 and -- RSV must be 0 |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
67 data:sub(4):byte() == 0x03 and -- ATYP must be 3 |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
68 data:sub(5):byte() == 40 and -- SHA1 HASH length must be 40 (0x28) |
|
66
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
69 data:sub(-2):byte() == 0x00 and -- PORT must be 0, size 2 byte |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
70 data:sub(-1):byte() == 0x00 |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
71 then |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
72 local sha = data:sub(6, 45); -- second param is not count! it's the ending index (included!) |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
73 if transfers[sha] == nil then |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
74 transfers[sha] = {}; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
75 transfers[sha].activated = false; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
76 transfers[sha].target = conn; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
77 session.sha = sha; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
78 module:log("debug", "target connected ... "); |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
79 elseif transfers[sha].target ~= nil then |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
80 transfers[sha].initiator = conn; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
81 session.sha = sha; |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
82 module:log("debug", "initiator connected ... "); |
|
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
83 end |
|
69
87dfd34dceb2
mod_proxy65: removed unneeded var and session stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
68
diff
changeset
|
84 conn.write(string.char(5, 0, 0, 3, sha:len()) .. sha .. string.char(0, 0)); -- VER, REP, RSV, ATYP, BND.ADDR (sha), BND.PORT (2 Byte) |
|
83
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
85 else |
|
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
86 log:module("warn", "Neither data transfer nor initial connect of a participator of a transfer.") |
|
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
87 conn.close(); |
|
66
b86ae5e21a56
mod_proxy65: done! Who wants to test? :)
Thilo Cestonaro <thilo@cestona.ro>
parents:
65
diff
changeset
|
88 end |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
89 else |
|
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
90 if data ~= nil then |
|
83
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
91 module:log("warn", "unknown connection with no authentication data -> closing it"); |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
92 conn.close(); |
|
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
93 end |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
94 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
95 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
96 |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
97 function connlistener.disconnect(conn, err) |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
98 local session = sessions[conn]; |
|
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
99 if session then |
|
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
100 if session.sha and transfers[session.sha] then |
|
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
101 local initiator, target = transfers[session.sha].initiator, transfers[session.sha].target; |
|
83
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
102 if initiator == conn and target ~= nil then |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
103 target.close(); |
|
83
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
104 elseif target == conn and initiator ~= nil then |
|
77
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
105 initiator.close(); |
|
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
106 end |
|
85b8622ccffd
mod_proxy65: close unknown connection with no authentication data, close target if initator hangs up and vica versa
Thilo Cestonaro <thilo@cestona.ro>
parents:
74
diff
changeset
|
107 end |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
108 -- Clean up any session-related stuff here |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
109 sessions[conn] = nil; |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
110 end |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
111 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
112 |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
113 local function get_disco_info(stanza) |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
114 local reply = replies_cache.disco_info; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
115 if reply == nil then |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
116 reply = st.iq({type='result', from=host}):query("http://jabber.org/protocol/disco#info") |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
117 :tag("identity", {category='proxy', type='bytestreams', name=name}):up() |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
118 :tag("feature", {var="http://jabber.org/protocol/bytestreams"}); |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
119 replies_cache.disco_info = reply; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
120 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
121 |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
122 reply.attr.id = stanza.attr.id; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
123 reply.attr.to = stanza.attr.from; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
124 return reply; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
125 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
126 |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
127 local function get_disco_items(stanza) |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
128 local reply = replies_cache.disco_items; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
129 if reply == nil then |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
130 reply = st.iq({type='result', from=host}):query("http://jabber.org/protocol/disco#items"); |
|
79
34f5818c90e9
mod_proxy65: answer with correct disco#info data on a disco#info request
Thilo Cestonaro <thilo@cestona.ro>
parents:
77
diff
changeset
|
131 replies_cache.disco_items = reply; |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
132 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
133 |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
134 reply.attr.id = stanza.attr.id; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
135 reply.attr.to = stanza.attr.from; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
136 return reply; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
137 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
138 |
|
82
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
139 local function _jid_join(node, host, resource) |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
140 local ret = host; |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
141 if ret then |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
142 if node then |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
143 ret = node .. "@" .. ret; |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
144 end |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
145 if resource then |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
146 ret = ret .. "/" .. resource; |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
147 end |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
148 end |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
149 return ret; |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
150 end |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
151 |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
152 local function get_stream_host(origin, stanza) |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
153 local reply = replies_cache.stream_host; |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
154 local err_reply = replies_cache.stream_host_err; |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
155 local sid = stanza.tags[1].attr.sid; |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
156 local allow = false; |
|
82
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
157 local jid_node, jid_host, jid_resource = jid_split(stanza.attr.from); |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
158 |
|
82
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
159 if stanza.attr.from == nil then |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
160 jid_node = origin.username; |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
161 jid_host = origin.host; |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
162 jid_resource = origin.resource; |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
163 end |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
164 |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
165 if proxy_acl and #proxy_acl > 0 then |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
166 if host ~= nil then -- at least a domain is needed. |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
167 for _, acl in ipairs(proxy_acl) do |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
168 local acl_node, acl_host, acl_resource = jid_split(acl); |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
169 if ((acl_node ~= nil and acl_node == jid_node) or acl_node == nil) and |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
170 ((acl_host ~= nil and acl_host == jid_host) or acl_host == nil) and |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
171 ((acl_resource ~= nil and acl_resource == jid_resource) or acl_resource == nil) then |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
172 allow = true; |
|
608dc38b6580
mod_proxy65: never use global varnames as local varnames, it can break your brain!
Thilo Cestonaro <thilo@cestona.ro>
parents:
80
diff
changeset
|
173 end |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
174 end |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
175 end |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
176 else |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
177 allow = true; |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
178 end |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
179 if allow == true then |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
180 if reply == nil then |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
181 reply = st.iq({type="result", from=host}) |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
182 :query("http://jabber.org/protocol/bytestreams") |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
183 :tag("streamhost", {jid=host, host=proxy_address, port=proxy_port}); |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
184 replies_cache.stream_host = reply; |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
185 end |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
186 else |
|
83
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
187 module:log("warn", "Denying use of proxy for %s", tostring(_jid_join(jid_node, jid_host, jid_resource))); |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
188 if err_reply == nil then |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
189 err_reply = st.iq({type="error", from=host}) |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
190 :query("http://jabber.org/protocol/bytestreams") |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
191 :tag("error", {code='403', type='auth'}) |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
192 :tag("forbidden", {xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'}); |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
193 replies_cache.stream_host_err = err_reply; |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
194 end |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
195 reply = err_reply; |
|
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
196 end |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
197 reply.attr.id = stanza.attr.id; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
198 reply.attr.to = stanza.attr.from; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
199 reply.tags[1].attr.sid = sid; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
200 return reply; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
201 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
202 |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
203 module.unload = function() |
|
72
2bf6c7c590a1
mod_proxy65: component register and deregister are with "_component" appended
Thilo Cestonaro <thilo@cestona.ro>
parents:
70
diff
changeset
|
204 componentmanager.deregister_component(host); |
|
74
d70813f7d90a
mod_proxy65: make it work again
Thilo Cestonaro <thilo@cestona.ro>
parents:
73
diff
changeset
|
205 connlisteners.deregister(module.host .. ':proxy65'); |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
206 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
207 |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
208 local function set_activation(stanza) |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
209 local from, to, sid, reply = nil; |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
210 from = stanza.attr.from; |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
211 if stanza.tags[1] ~= nil and tostring(stanza.tags[1].name) == "query" then |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
212 if stanza.tags[1].attr ~= nil then |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
213 sid = stanza.tags[1].attr.sid; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
214 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
215 if stanza.tags[1].tags[1] ~= nil and tostring(stanza.tags[1].tags[1].name) == "activate" then |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
216 to = stanza.tags[1].tags[1][1]; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
217 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
218 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
219 if from ~= nil and to ~= nil and sid ~= nil then |
|
83
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
220 reply = st.iq({type="result", from=host, to=from}); |
|
65
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
221 reply.attr.id = stanza.attr.id; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
222 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
223 return reply, from, to, sid; |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
224 end |
|
a35eb0764ac6
mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents:
64
diff
changeset
|
225 |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
226 function handle_to_domain(origin, stanza) |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
227 local to_node, to_host, to_resource = jid_split(stanza.attr.to); |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
228 if to_node == nil then |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
229 local type = stanza.attr.type; |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
230 if type == "error" or type == "result" then return; end |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
231 if stanza.name == "iq" and type == "get" then |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
232 local xmlns = stanza.tags[1].attr.xmlns |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
233 if xmlns == "http://jabber.org/protocol/disco#info" then |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
234 origin.send(get_disco_info(stanza)); |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
235 return true; |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
236 elseif xmlns == "http://jabber.org/protocol/disco#items" then |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
237 origin.send(get_disco_items(stanza)); |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
238 return true; |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
239 elseif xmlns == "http://jabber.org/protocol/bytestreams" then |
|
80
bed9a6b40fae
mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents:
79
diff
changeset
|
240 origin.send(get_stream_host(origin, stanza)); |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
241 return true; |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
242 end |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
243 elseif stanza.name == "iq" and type == "set" then |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
244 local reply, from, to, sid = set_activation(stanza); |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
245 if reply ~= nil and from ~= nil and to ~= nil and sid ~= nil then |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
246 local sha = sha1(sid .. from .. to, true); |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
247 if transfers[sha] == nil then |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
248 module:log("error", "transfers[sha]: nil"); |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
249 elseif(transfers[sha] ~= nil and transfers[sha].initiator ~= nil and transfers[sha].target ~= nil) then |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
250 origin.send(reply); |
|
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
251 transfers[sha].activated = true; |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
252 end |
|
83
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
253 else |
|
9d92db30235f
mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents:
82
diff
changeset
|
254 module:log("error", "activation failed: sid: %s, initiator: %s, target: %s", tostring(sid), tostring(from), tostring(to)); |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
255 end |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
256 end |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
257 end |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
258 return; |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
259 end |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
260 |
|
73
adb9d1b879c2
mod_proxy65: changed the listener name to be unique on a per component basis and display a good error description when connlistener register fails
Thilo Cestonaro <thilo@cestona.ro>
parents:
72
diff
changeset
|
261 if not connlisteners.register(module.host .. ':proxy65', connlistener) then |
|
68
0df3e4d1f1a3
mod_proxy65: Reviewed and re-factored the code, added proxy_address to specify the address which the proxy advertises for clients to connect to
Matthew Wild <mwild1@gmail.com>
parents:
66
diff
changeset
|
262 error("mod_proxy65: Could not establish a connection listener. Check your configuration please."); |
|
73
adb9d1b879c2
mod_proxy65: changed the listener name to be unique on a per component basis and display a good error description when connlistener register fails
Thilo Cestonaro <thilo@cestona.ro>
parents:
72
diff
changeset
|
263 error(" one possible cause for this would be that two proxy65 components share the same port."); |
|
64
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
264 end |
|
853c3c7e9936
mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
265 |
|
74
d70813f7d90a
mod_proxy65: make it work again
Thilo Cestonaro <thilo@cestona.ro>
parents:
73
diff
changeset
|
266 connlisteners.start(module.host .. ':proxy65'); |
|
72
2bf6c7c590a1
mod_proxy65: component register and deregister are with "_component" appended
Thilo Cestonaro <thilo@cestona.ro>
parents:
70
diff
changeset
|
267 component = componentmanager.register_component(host, handle_to_domain); |
