21 = tostring, pairs, ipairs, getmetatable, newproxy, error, tonumber, |
21 = tostring, pairs, ipairs, getmetatable, newproxy, error, tonumber, |
22 setmetatable; |
22 setmetatable; |
23 |
23 |
24 local idna_to_ascii = require "util.encodings".idna.to_ascii; |
24 local idna_to_ascii = require "util.encodings".idna.to_ascii; |
25 local connlisteners_get = require "net.connlisteners".get; |
25 local connlisteners_get = require "net.connlisteners".get; |
|
26 local initialize_filters = require "util.filters".initialize; |
26 local wrapclient = require "net.server".wrapclient; |
27 local wrapclient = require "net.server".wrapclient; |
27 local modulemanager = require "core.modulemanager"; |
28 local modulemanager = require "core.modulemanager"; |
28 local st = require "stanza"; |
29 local st = require "stanza"; |
29 local stanza = st.stanza; |
30 local stanza = st.stanza; |
30 local nameprep = require "util.encodings".stringprep.nameprep; |
31 local nameprep = require "util.encodings".stringprep.nameprep; |
135 getmetatable(session.trace).__gc = function () open_sessions = open_sessions - 1; end; |
136 getmetatable(session.trace).__gc = function () open_sessions = open_sessions - 1; end; |
136 end |
137 end |
137 open_sessions = open_sessions + 1; |
138 open_sessions = open_sessions + 1; |
138 local w, log = conn.write, logger_init("s2sin"..tostring(conn):match("[a-f0-9]+$")); |
139 local w, log = conn.write, logger_init("s2sin"..tostring(conn):match("[a-f0-9]+$")); |
139 session.log = log; |
140 session.log = log; |
140 session.sends2s = function (t) log("debug", "sending: %s", t.top_tag and t:top_tag() or t:match("^([^>]*>?)")); w(conn, tostring(t)); end |
141 local filter = initialize_filters(session); |
|
142 session.sends2s = function (t) |
|
143 if t.name then |
|
144 t = filter("stanzas/out", t); |
|
145 end |
|
146 if t then |
|
147 t = filter("bytes/out", tostring(t)); |
|
148 if t then |
|
149 log("debug", "sending: %s", t.top_tag and t:top_tag() or t:match("^([^>]*>?)")); |
|
150 return w(conn, t); |
|
151 end |
|
152 end |
|
153 end |
141 incoming_s2s[session] = true; |
154 incoming_s2s[session] = true; |
142 add_task(connect_timeout, function () |
155 add_task(connect_timeout, function () |
143 if session.conn ~= conn or |
156 if session.conn ~= conn or |
144 session.type == "s2sin" then |
157 session.type == "s2sin" then |
145 return; -- Ok, we're connect[ed|ing] |
158 return; -- Ok, we're connect[ed|ing] |
163 do |
176 do |
164 local conn_name = "s2sout"..tostring(host_session):match("[a-f0-9]*$"); |
177 local conn_name = "s2sout"..tostring(host_session):match("[a-f0-9]*$"); |
165 log = logger_init(conn_name); |
178 log = logger_init(conn_name); |
166 host_session.log = log; |
179 host_session.log = log; |
167 end |
180 end |
|
181 |
|
182 initialize_filters(host_session); |
168 |
183 |
169 if connect ~= false then |
184 if connect ~= false then |
170 -- Kick the connection attempting machine into life |
185 -- Kick the connection attempting machine into life |
171 attempt_connection(host_session); |
186 attempt_connection(host_session); |
172 end |
187 end |
330 |
345 |
331 -- Register this outgoing connection so that xmppserver_listener knows about it |
346 -- Register this outgoing connection so that xmppserver_listener knows about it |
332 -- otherwise it will assume it is a new incoming connection |
347 -- otherwise it will assume it is a new incoming connection |
333 cl.register_outgoing(conn, host_session); |
348 cl.register_outgoing(conn, host_session); |
334 |
349 |
|
350 local filter = initialize_filters(host_session); |
335 local w, log = conn.write, host_session.log; |
351 local w, log = conn.write, host_session.log; |
336 host_session.sends2s = function (t) log("debug", "sending: %s", (t.top_tag and t:top_tag()) or t:match("^[^>]*>?")); w(conn, tostring(t)); end |
352 host_session.sends2s = function (t) |
|
353 if t.name then |
|
354 t = filter("stanzas/out", t); |
|
355 end |
|
356 if t then |
|
357 t = filter("bytes/out", tostring(t)); |
|
358 if t then |
|
359 log("debug", "sending: %s", (t.top_tag and t:top_tag()) or t:match("^[^>]*>?")); |
|
360 return w(conn, tostring(t)); |
|
361 end |
|
362 end |
|
363 end |
337 |
364 |
338 host_session:open_stream(from_host, to_host); |
365 host_session:open_stream(from_host, to_host); |
339 |
366 |
340 log("debug", "Connection attempt in progress..."); |
367 log("debug", "Connection attempt in progress..."); |
341 add_task(connect_timeout, function () |
368 add_task(connect_timeout, function () |