annotate mod_onions/mod_onions.lua @ 1596:b362e6c00fd1

mod_storage_gdbm: Add archive support
author Kim Alvefur <zash@zash.se>
date Sun, 25 Jan 2015 22:18:05 +0100
parents cf32265eb4c7
children e0d8caffa209
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
1 local wrapclient = require "net.server".wrapclient;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
2 local s2s_new_outgoing = require "core.s2smanager".new_outgoing;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
3 local initialize_filters = require "util.filters".initialize;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
4 local st = require "util.stanza";
1071
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
5
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
6 local portmanager = require "core.portmanager";
1071
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
7
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
8 local softreq = require "util.dependencies".softreq;
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
9
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
10 local bit;
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
11 pcall(function() bit = require"bit"; end);
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
12 bit = bit or softreq"bit32"
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
13 if not bit then module:log("error", "No bit module found. Either LuaJIT 2, lua-bitop or Lua 5.2 is required"); end
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
14
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
15 local band = bit.band;
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
16 local rshift = bit.rshift;
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
17 local lshift = bit.lshift;
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
18
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
19 local byte = string.byte;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
20 local c = string.char;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
21
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
22 local proxy_ip = module:get_option("onions_socks5_host") or "127.0.0.1";
1061
f4031e7ccec1 mod_onions: The SOCKS5 port is now a string, as it should be. Added a boolean option onions_tor_all to pass all s2s traffic through Tor.
Thijs Alkemade <me@thijsalkema.de>
parents: 1060
diff changeset
23 local proxy_port = module:get_option("onions_socks5_port") or 9050;
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
24 local forbid_else = module:get_option("onions_only") or false;
1061
f4031e7ccec1 mod_onions: The SOCKS5 port is now a string, as it should be. Added a boolean option onions_tor_all to pass all s2s traffic through Tor.
Thijs Alkemade <me@thijsalkema.de>
parents: 1060
diff changeset
25 local torify_all = module:get_option("onions_tor_all") or false;
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
26
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
27 local sessions = module:shared("sessions");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
28
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
29 -- The socks5listener handles connection while still connecting to the proxy,
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
30 -- then it hands them over to the normal listener (in mod_s2s)
1061
f4031e7ccec1 mod_onions: The SOCKS5 port is now a string, as it should be. Added a boolean option onions_tor_all to pass all s2s traffic through Tor.
Thijs Alkemade <me@thijsalkema.de>
parents: 1060
diff changeset
31 local socks5listener = { default_port = proxy_port, default_mode = "*a", default_interface = "*" };
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
32
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
33 local function socks5_connect_sent(conn, data)
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1299
diff changeset
34
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
35 local session = sessions[conn];
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
36
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
37 if #data < 5 then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
38 session.socks5_buffer = data;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
39 return;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
40 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
41
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
42 request_status = byte(data, 2);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
43
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
44 if not request_status == 0x00 then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
45 module:log("debug", "Failed to connect to the SOCKS5 proxy. :(");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
46 session:close(false);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
47 return;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
48 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
49
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
50 module:log("debug", "Succesfully connected to SOCKS5 proxy.");
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1299
diff changeset
51
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
52 local response = byte(data, 4);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
53
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
54 if response == 0x01 then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
55 if #data < 10 then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
56 -- let's try again when we have enough
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
57 session.socks5_buffer = data;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
58 return;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
59 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
60
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
61 -- this means the server tells us to connect on an IPv4 address
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
62 local ip1 = byte(data, 5);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
63 local ip2 = byte(data, 6);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
64 local ip3 = byte(data, 7);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
65 local ip4 = byte(data, 8);
1071
8f59b45fe6a7 mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents: 1061
diff changeset
66 local port = band(byte(data, 9), lshift(byte(data, 10), 8));
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
67 module:log("debug", "Should connect to: "..ip1.."."..ip2.."."..ip3.."."..ip4..":"..port);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
68
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
69 if not (ip1 == 0 and ip2 == 0 and ip3 == 0 and ip4 == 0 and port == 0) then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
70 module:log("debug", "The SOCKS5 proxy tells us to connect to a different IP, don't know how. :(");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
71 session:close(false);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
72 return;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
73 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
74
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
75 -- Now the real s2s listener can take over the connection.
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
76 local listener = portmanager.get_service("s2s").listener;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
77
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
78 module:log("debug", "SOCKS5 done, handing over listening to "..tostring(listener));
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
79
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
80 session.socks5_handler = nil;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
81 session.socks5_buffer = nil;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
82
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
83 local w, log = conn.send, session.log;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
84
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
85 local filter = initialize_filters(session);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
86
1467
f10a3a5ba28f mod_onions: Set the stream version to 1.0 on onionized streams, so TLS is offered.
Thijs Alkemade <me@thijsalkema.de>
parents: 1343
diff changeset
87 session.version = 1;
f10a3a5ba28f mod_onions: Set the stream version to 1.0 on onionized streams, so TLS is offered.
Thijs Alkemade <me@thijsalkema.de>
parents: 1343
diff changeset
88
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
89 session.sends2s = function (t)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
90 log("debug", "sending (s2s over socks5): %s", (t.top_tag and t:top_tag()) or t:match("^[^>]*>?"));
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
91 if t.name then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
92 t = filter("stanzas/out", t);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
93 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
94 if t then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
95 t = filter("bytes/out", tostring(t));
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
96 if t then
1299
a7d6c6d2c7b5 mod_onions: Accepted patch that should fix problems when using libevent.
Thijs Alkemade <me@thijsalkema.de>
parents: 1071
diff changeset
97 return conn:write(tostring(t));
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
98 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
99 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
100 end
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1299
diff changeset
101
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
102 session.open_stream = function ()
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
103 session.sends2s(st.stanza("stream:stream", {
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
104 xmlns='jabber:server', ["xmlns:db"]='jabber:server:dialback',
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
105 ["xmlns:stream"]='http://etherx.jabber.org/streams',
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
106 from=session.from_host, to=session.to_host, version='1.0', ["xml:lang"]='en'}):top_tag());
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
107 end
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1299
diff changeset
108
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
109 conn.setlistener(conn, listener);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
110
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
111 listener.register_outgoing(conn, session);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
112
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
113 listener.onconnect(conn);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
114 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
115 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
116
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
117 local function socks5_handshake_sent(conn, data)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
118
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
119 local session = sessions[conn];
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
120
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
121 if #data < 2 then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
122 session.socks5_buffer = data;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
123 return;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
124 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
125
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
126 -- version, method
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
127 local request_status = byte(data, 2);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
128
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
129 module:log("debug", "SOCKS version: "..byte(data, 1));
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
130 module:log("debug", "Response: "..request_status);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
131
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
132 if not request_status == 0x00 then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
133 module:log("debug", "Failed to connect to the SOCKS5 proxy. :( It seems to require authentication.");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
134 session:close(false);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
135 return;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
136 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
137
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
138 module:log("debug", "Sending connect message.");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
139
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
140 -- version 5, connect, (reserved), type: domainname, (length, hostname), port
1299
a7d6c6d2c7b5 mod_onions: Accepted patch that should fix problems when using libevent.
Thijs Alkemade <me@thijsalkema.de>
parents: 1071
diff changeset
141 conn:write(c(5) .. c(1) .. c(0) .. c(3) .. c(#session.socks5_to) .. session.socks5_to);
a7d6c6d2c7b5 mod_onions: Accepted patch that should fix problems when using libevent.
Thijs Alkemade <me@thijsalkema.de>
parents: 1071
diff changeset
142 conn:write(c(rshift(session.socks5_port, 8)) .. c(band(session.socks5_port, 0xff)));
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
143
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
144 session.socks5_handler = socks5_connect_sent;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
145 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
146
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
147 function socks5listener.onconnect(conn)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
148 module:log("debug", "Connected to SOCKS5 proxy, sending SOCKS5 handshake.");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
149
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
150 -- Socks version 5, 1 method, no auth
1299
a7d6c6d2c7b5 mod_onions: Accepted patch that should fix problems when using libevent.
Thijs Alkemade <me@thijsalkema.de>
parents: 1071
diff changeset
151 conn:write(c(5) .. c(1) .. c(0));
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1299
diff changeset
152
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
153 sessions[conn].socks5_handler = socks5_handshake_sent;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
154 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
155
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
156 function socks5listener.register_outgoing(conn, session)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
157 session.direction = "outgoing";
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
158 sessions[conn] = session;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
159 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
160
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
161 function socks5listener.ondisconnect(conn, err)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
162 sessions[conn] = nil;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
163 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
164
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
165 function socks5listener.onincoming(conn, data)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
166 local session = sessions[conn];
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
167
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
168 if session.socks5_buffer then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
169 data = session.socks5_buffer .. data;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
170 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
171
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
172 if session.socks5_handler then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
173 session.socks5_handler(conn, data);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
174 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
175 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
176
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
177 local function connect_socks5(host_session, connect_host, connect_port)
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 1299
diff changeset
178
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
179 local conn, handler = socket.tcp();
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
180
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
181 module:log("debug", "Connecting to " .. connect_host .. ":" .. connect_port);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
182
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
183 -- this is not necessarily the same as .to_host (it can be that this is a SRV record)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
184 host_session.socks5_to = connect_host;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
185 host_session.socks5_port = connect_port;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
186
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
187 conn:settimeout(0);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
188
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
189 local success, err = conn:connect(proxy_ip, proxy_port);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
190
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
191 conn = wrapclient(conn, connect_host, connect_port, socks5listener, "*a");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
192
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
193 socks5listener.register_outgoing(conn, host_session);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
194
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
195 host_session.conn = conn;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
196 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
197
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
198 local function bounce_sendq(session, reason)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
199 local sendq = session.sendq;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
200 if not sendq then return; end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
201 session.log("info", "sending error replies for "..#sendq.." queued stanzas because of failed outgoing connection to "..tostring(session.to_host));
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
202 local dummy = {
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
203 type = "s2sin";
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
204 send = function(s)
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
205 (session.log or log)("error", "Replying to to an s2s error reply, please report this! Traceback: %s", traceback());
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
206 end;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
207 dummy = true;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
208 };
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
209 for i, data in ipairs(sendq) do
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
210 local reply = data[2];
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
211 if reply and not(reply.attr.xmlns) then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
212 reply.attr.type = "error";
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
213 reply:tag("error", {type = "cancel"})
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
214 :tag("remote-server-not-found", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}):up();
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
215 if reason then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
216 reply:tag("text", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"})
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
217 :text("Server-to-server connection failed: "..reason):up();
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
218 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
219 core_process_stanza(dummy, reply);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
220 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
221 sendq[i] = nil;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
222 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
223 session.sendq = nil;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
224 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
225
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
226 -- Try to intercept anything to *.onion
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
227 local function route_to_onion(event)
1468
cf32265eb4c7 mod_onions: Actually define the variable "stanza" to contain "event.stanza", fixing problems of stanzas being dropped for outgoing connections.
Thijs Alkemade <me@thijsalkema.de>
parents: 1467
diff changeset
228 local stanza = event.stanza;
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
229
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
230 if not event.to_host:find(".onion(.?)$") then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
231 if forbid_else then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
232 module:log("debug", event.to_host .. " is not an onion. Blocking it.");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
233 return false;
1061
f4031e7ccec1 mod_onions: The SOCKS5 port is now a string, as it should be. Added a boolean option onions_tor_all to pass all s2s traffic through Tor.
Thijs Alkemade <me@thijsalkema.de>
parents: 1060
diff changeset
234 elseif not torify_all then
1060
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
235 return;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
236 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
237 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
238
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
239 module:log("debug", "Onion routing something to ".. event.to_host);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
240
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
241 if hosts[event.from_host].s2sout[event.to_host] then
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
242 return;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
243 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
244
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
245 local host_session = s2s_new_outgoing(event.from_host, event.to_host);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
246
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
247 host_session.bounce_sendq = bounce_sendq;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
248 host_session.sendq = { {tostring(stanza), stanza.attr and stanza.attr.type ~= "error" and stanza.attr.type ~= "result" and st.reply(stanza)} };
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
249
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
250 hosts[event.from_host].s2sout[event.to_host] = host_session;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
251
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
252 connect_socks5(host_session, event.to_host, 5269);
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
253
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
254 return true;
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
255 end
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
256
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
257 module:log("debug", "Onions ready and loaded");
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
258
25b83ed7838a mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff changeset
259 hosts[module.host].events.add_handler("route/remote", route_to_onion, 200);