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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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);