annotate mod_proxy65/mod_proxy65.lua @ 234:abcb59ab355c

Add new motd_sequential module. This module lets you define numbered messages shown to each user in order, but only once per user, and persistent across server restarts. Useful for notifying users of added features and changes in an incremental fashion.
author Jeff Mitchell <jeffrey.mitchell@gmail.com>
date Wed, 04 Aug 2010 22:29:51 +0000
parents a54cc7bca826
children
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
95
e704834c5613 mod_proxy65: hopefully remove a memory leak (thx waqas!)
Thilo Cestonaro <thilo@cestona.ro>
parents: 83
diff changeset
107 transfers[session.sha] = nil;
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
108 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
109 -- 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
110 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
111 end
65
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
112 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
113
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
114 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
115 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
116 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
117 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
118 :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
119 :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
120 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
121 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
122
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
123 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
124 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
125 return reply;
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
126 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
127
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
128 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
129 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
130 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
131 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
132 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
133 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
134
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
135 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
136 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
137 return reply;
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
138 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
139
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
140 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
141 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
142 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
143 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
144 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
145 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
146 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
147 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
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 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
150 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
151 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
152
80
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
153 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
154 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
155 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
156 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
157 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
158 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
159
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
160 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
161 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
162 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
163 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
164 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
165
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 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
167 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
168 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
169 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
170 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
171 ((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
172 ((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
173 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
174 end
80
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 end
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
177 else
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
178 allow = true;
65
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
179 end
80
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
180 if allow == true then
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
181 if reply == nil then
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
182 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
183 :query("http://jabber.org/protocol/bytestreams")
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
184 :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
185 replies_cache.stream_host = reply;
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
186 end
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
187 else
83
9d92db30235f mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents: 82
diff changeset
188 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
189 if err_reply == nil then
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
190 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
191 :query("http://jabber.org/protocol/bytestreams")
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
192 :tag("error", {code='403', type='auth'})
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
193 :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
194 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
195 end
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
196 reply = err_reply;
bed9a6b40fae mod_proxy65: basic white list - access control list
Thilo Cestonaro <thilo@cestona.ro>
parents: 79
diff changeset
197 end
65
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
198 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
199 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
200 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
201 return reply;
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
202 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
203
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
204 module.unload = function()
72
2bf6c7c590a1 mod_proxy65: component register and deregister are with "_component" appended
Thilo Cestonaro <thilo@cestona.ro>
parents: 70
diff changeset
205 componentmanager.deregister_component(host);
74
d70813f7d90a mod_proxy65: make it work again
Thilo Cestonaro <thilo@cestona.ro>
parents: 73
diff changeset
206 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
207 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
208
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
209 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
210 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
211 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
212 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
213 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
214 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
215 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
216 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
217 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
218 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
219 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
220 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
221 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
222 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
223 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
224 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
225 end
a35eb0764ac6 mod_proxy65: tcp connection of initiator and target are established
Thilo Cestonaro <thilo@cestona.ro>
parents: 64
diff changeset
226
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
227 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
228 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
229 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
230 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
231 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
232 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
233 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
234 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
235 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
236 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
237 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
238 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
239 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
240 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
241 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
242 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
243 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
244 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
245 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
246 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
247 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
248 if transfers[sha] == nil then
98
a54cc7bca826 mod_proxy65: correct log level, be more descriptive
Thilo Cestonaro <thilo@cestona.ro>
parents: 95
diff changeset
249 module:log("warn", "Recieved request to activate transfer with no participants");
a54cc7bca826 mod_proxy65: correct log level, be more descriptive
Thilo Cestonaro <thilo@cestona.ro>
parents: 95
diff changeset
250 module:log("debug", "The sha1 of the transfer which should be activated was: %s", sha);
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
251 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
252 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
253 transfers[sha].activated = true;
64
853c3c7e9936 mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
254 end
83
9d92db30235f mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents: 82
diff changeset
255 else
9d92db30235f mod_proxy65: make it work from external initiators, too
Thilo Cestonaro <thilo@cestona.ro>
parents: 82
diff changeset
256 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
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 end
64
853c3c7e9936 mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
259 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
260 return;
64
853c3c7e9936 mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
261 end
853c3c7e9936 mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
262
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 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
264 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
265 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
266 end
853c3c7e9936 mod_proxy65: remove the proxy65 folder
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
267
74
d70813f7d90a mod_proxy65: make it work again
Thilo Cestonaro <thilo@cestona.ro>
parents: 73
diff changeset
268 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
269 component = componentmanager.register_component(host, handle_to_domain);