Comparison

plugins/mod_s2s.lua @ 12207:65e252940337

mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls So that the same TLS context is used for both Direct TLS and starttls, since they are supposed to be functionally identical apart from the few extra round trips. A new event is added because the 's2s-created' event fires much later, after a connection has already been established, where we need the TLS context before that.
author Kim Alvefur <zash@zash.se>
date Fri, 21 Jan 2022 18:42:38 +0100
parent 12206:77ac0d96ac24
child 12280:74f8739b967a
comparison
equal deleted inserted replaced
12206:77ac0d96ac24 12207:65e252940337
216 host_session.bounce_sendq = bounce_sendq; 216 host_session.bounce_sendq = bounce_sendq;
217 host_session.sendq = { {tostring(stanza), stanza.attr.type ~= "error" and stanza.attr.type ~= "result" and st.reply(stanza)} }; 217 host_session.sendq = { {tostring(stanza), stanza.attr.type ~= "error" and stanza.attr.type ~= "result" and st.reply(stanza)} };
218 log("debug", "stanza [%s] queued until connection complete", stanza.name); 218 log("debug", "stanza [%s] queued until connection complete", stanza.name);
219 -- FIXME Cleaner solution to passing extra data from resolvers to net.server 219 -- FIXME Cleaner solution to passing extra data from resolvers to net.server
220 -- This mt-clone allows resolvers to add extra data, currently used for DANE TLSA records 220 -- This mt-clone allows resolvers to add extra data, currently used for DANE TLSA records
221 module:context(from_host):fire_event("s2sout-created", { session = host_session });
221 local xmpp_extra = setmetatable({}, s2s_service_options_mt); 222 local xmpp_extra = setmetatable({}, s2s_service_options_mt);
222 local sslctx = require"core.certmanager".create_context(from_host, "client"); -- TODO this should live in mod_tls ? 223 local resolver = service.new(to_host, "xmpp-server", "tcp", xmpp_extra);
223 local xmpps_extra = setmetatable({ default_port = false; servername = to_host; sslctx = sslctx }, s2s_service_options_mt); 224 if host_session.ssl_ctx then
224 local direct_and_normal = resolver_chain.new({ 225 local sslctx = host_session.ssl_ctx;
225 service.new(to_host, "xmpps-server", "tcp", xmpps_extra); 226 local xmpps_extra = setmetatable({ default_port = false; servername = to_host; sslctx = sslctx }, s2s_service_options_mt);
226 service.new(to_host, "xmpp-server", "tcp", xmpp_extra); 227 resolver = resolver_chain.new({
227 }); 228 service.new(to_host, "xmpps-server", "tcp", xmpps_extra);
228 connect(direct_and_normal, listener, nil, { session = host_session }); 229 resolver;
230 });
231 end
232 connect(resolver, listener, nil, { session = host_session });
229 m_initiated_connections:with_labels(from_host):add(1) 233 m_initiated_connections:with_labels(from_host):add(1)
230 return true; 234 return true;
231 end 235 end
232 236
233 local function keepalive(event) 237 local function keepalive(event)