From bb476f4a0d60bbc41393a86a370aa94ab405b081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Mon, 12 Mar 2018 01:00:17 +0100 Subject: Allow to override the addresses used to connect to an IRC network fix #3273 --- src/database/database.hpp | 3 ++- src/irc/irc_client.cpp | 16 +++++++++------- src/xmpp/biboumi_adhoc_commands.cpp | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/database/database.hpp b/src/database/database.hpp index ce7595b..79b16d6 100644 --- a/src/database/database.hpp +++ b/src/database/database.hpp @@ -84,6 +84,7 @@ class Database struct RemoteJid: Column { static constexpr auto name = "remote"; }; + struct Address: Column { static constexpr auto name = "hostname_"; }; using MucLogLineTable = Table; using MucLogLine = MucLogLineTable::RowType; @@ -91,7 +92,7 @@ class Database using GlobalOptionsTable = Table; using GlobalOptions = GlobalOptionsTable::RowType; - using IrcServerOptionsTable = Table; + using IrcServerOptionsTable = Table; using IrcServerOptions = IrcServerOptionsTable::RowType; using IrcChannelOptionsTable = Table; diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp index c5ef36c..764f37b 100644 --- a/src/irc/irc_client.cpp +++ b/src/irc/irc_client.cpp @@ -186,20 +186,22 @@ void IrcClient::start() bool tls; std::tie(port, tls) = this->ports_to_try.top(); this->ports_to_try.pop(); - this->bridge.send_xmpp_message(this->hostname, "", "Connecting to " + - this->hostname + ":" + port + " (" + - (tls ? "encrypted" : "not encrypted") + ")"); - this->bind_addr = Config::get("outgoing_bind", ""); + std::string address = this->hostname; -#ifdef BOTAN_FOUND -# ifdef USE_DATABASE +#ifdef USE_DATABASE auto options = Database::get_irc_server_options(this->bridge.get_bare_jid(), this->get_hostname()); +# ifdef BOTAN_FOUND this->credential_manager.set_trusted_fingerprint(options.col()); # endif + if (!options.col().empty()) + address = options.col(); #endif - this->connect(this->hostname, port, tls); + this->bridge.send_xmpp_message(this->hostname, "", "Connecting to " + + address + ":" + port + " (" + + (tls ? "encrypted" : "not encrypted") + ")"); + this->connect(address, port, tls); } void IrcClient::on_connection_failed(const std::string& reason) diff --git a/src/xmpp/biboumi_adhoc_commands.cpp b/src/xmpp/biboumi_adhoc_commands.cpp index bcdac39..0a25bd4 100644 --- a/src/xmpp/biboumi_adhoc_commands.cpp +++ b/src/xmpp/biboumi_adhoc_commands.cpp @@ -227,6 +227,19 @@ void ConfigureIrcServerStep1(XmppComponent&, AdhocSession& session, XmlNode& com XmlSubNode instructions(x, "instructions"); instructions.set_inner("Edit the form, to configure the settings of the IRC server " + server_domain); + { + XmlSubNode hostname(x, "field"); + hostname["var"] = "hostname"; + hostname["type"] = "text-single"; + hostname["label"] = "Address"; + hostname["desc"] = "The hostname (or IP) to connect to."; + XmlSubNode value(hostname, "value"); + if (options.col().empty()) + value.set_inner(server_domain); + else + value.set_inner(options.col()); + } + { XmlSubNode ports(x, "field"); ports["var"] = "ports"; @@ -375,6 +388,11 @@ void ConfigureIrcServerStep2(XmppComponent&, AdhocSession& session, XmlNode& com { const XmlNode* value = field->get_child("value", "jabber:x:data"); const std::vector values = field->get_children("value", "jabber:x:data"); + + if (field->get_tag("var") == "hostname") + { + options.col() = value->get_inner(); + } if (field->get_tag("var") == "ports") { std::string ports; -- cgit v1.2.3