Software / code / prosody
Comparison
plugins/mod_s2s/mod_s2s.lua @ 10403:3b82e9df5a7a
mod_s2s: Allow passing bounce reason as an util.error object (see #770)
This argument is currently unused in s2smanager.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 08 Nov 2019 23:03:47 +0100 |
| parent | 10381:66fa45d24481 |
| child | 10421:09b54ad0fdc4 |
comparison
equal
deleted
inserted
replaced
| 10402:0971694b30a8 | 10403:3b82e9df5a7a |
|---|---|
| 27 local uuid_gen = require "util.uuid".generate; | 27 local uuid_gen = require "util.uuid".generate; |
| 28 local fire_global_event = prosody.events.fire_event; | 28 local fire_global_event = prosody.events.fire_event; |
| 29 local runner = require "util.async".runner; | 29 local runner = require "util.async".runner; |
| 30 local connect = require "net.connect".connect; | 30 local connect = require "net.connect".connect; |
| 31 local service = require "net.resolvers.service"; | 31 local service = require "net.resolvers.service"; |
| 32 local errors = require "util.error"; | |
| 32 | 33 |
| 33 local connect_timeout = module:get_option_number("s2s_timeout", 90); | 34 local connect_timeout = module:get_option_number("s2s_timeout", 90); |
| 34 local stream_close_timeout = module:get_option_number("s2s_close_timeout", 5); | 35 local stream_close_timeout = module:get_option_number("s2s_close_timeout", 5); |
| 35 local opt_keepalives = module:get_option_boolean("s2s_tcp_keepalives", module:get_option_boolean("tcp_keepalives", true)); | 36 local opt_keepalives = module:get_option_boolean("s2s_tcp_keepalives", module:get_option_boolean("tcp_keepalives", true)); |
| 36 local secure_auth = module:get_option_boolean("s2s_secure_auth", false); -- One day... | 37 local secure_auth = module:get_option_boolean("s2s_secure_auth", false); -- One day... |
| 81 }; | 82 }; |
| 82 -- FIXME Allow for more specific error conditions | 83 -- FIXME Allow for more specific error conditions |
| 83 -- TODO use util.error ? | 84 -- TODO use util.error ? |
| 84 local error_type = "cancel"; | 85 local error_type = "cancel"; |
| 85 local condition = "remote-server-not-found"; | 86 local condition = "remote-server-not-found"; |
| 87 local reason_text; | |
| 86 if session.had_stream then -- set when a stream is opened by the remote | 88 if session.had_stream then -- set when a stream is opened by the remote |
| 87 error_type, condition = "wait", "remote-server-timeout"; | 89 error_type, condition = "wait", "remote-server-timeout"; |
| 90 end | |
| 91 if errors.is_err(reason) then | |
| 92 error_type, condition, reason_text = reason.type, reason.condition, reason.text; | |
| 93 elseif type(reason) == "string" then | |
| 94 reason_text = reason; | |
| 88 end | 95 end |
| 89 for i, data in ipairs(sendq) do | 96 for i, data in ipairs(sendq) do |
| 90 local reply = data[2]; | 97 local reply = data[2]; |
| 91 if reply and not(reply.attr.xmlns) and bouncy_stanzas[reply.name] then | 98 if reply and not(reply.attr.xmlns) and bouncy_stanzas[reply.name] then |
| 92 reply.attr.type = "error"; | 99 reply.attr.type = "error"; |
| 93 reply:tag("error", {type = error_type, by = session.from_host}) | 100 reply:tag("error", {type = error_type, by = session.from_host}) |
| 94 :tag(condition, {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}):up(); | 101 :tag(condition, {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}):up(); |
| 95 if reason then | 102 if reason_text then |
| 96 reply:tag("text", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}) | 103 reply:tag("text", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}) |
| 97 :text("Server-to-server connection failed: "..reason):up(); | 104 :text("Server-to-server connection failed: "..reason_text):up(); |
| 98 end | 105 end |
| 99 core_process_stanza(dummy, reply); | 106 core_process_stanza(dummy, reply); |
| 100 end | 107 end |
| 101 sendq[i] = nil; | 108 sendq[i] = nil; |
| 102 end | 109 end |