summaryrefslogtreecommitdiff
path: root/src/irc
diff options
context:
space:
mode:
Diffstat (limited to 'src/irc')
-rw-r--r--src/irc/irc_client.cpp25
-rw-r--r--src/irc/irc_client.hpp11
2 files changed, 23 insertions, 13 deletions
diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp
index 183a9d8..351f9f8 100644
--- a/src/irc/irc_client.cpp
+++ b/src/irc/irc_client.cpp
@@ -83,11 +83,11 @@ static const std::unordered_map<std::string,
{"KICK", {&IrcClient::on_kick, {3, 0}}},
{"INVITE", {&IrcClient::on_invite, {2, 0}}},
{"CAP", {&IrcClient::on_cap, {3, 0}}},
+#ifdef WITH_SASL
{"AUTHENTICATE", {&IrcClient::on_authenticate, {1, 0}}},
{"903", {&IrcClient::on_sasl_success, {0, 0}}},
{"900", {&IrcClient::on_sasl_login, {3, 0}}},
-
-
+#endif
{"401", {&IrcClient::on_generic_error, {2, 0}}},
{"402", {&IrcClient::on_generic_error, {2, 0}}},
{"403", {&IrcClient::on_generic_error, {2, 0}}},
@@ -286,12 +286,14 @@ void IrcClient::on_connected()
auto options = Database::get_irc_server_options(this->bridge.get_bare_jid(),
this->get_hostname());
- const auto& sasl_password = options.col<Database::SaslPassword>();
const auto& server_password = options.col<Database::Pass>();
if (!server_password.empty())
this->send_pass_command(options.col<Database::Pass>());
+#endif
+#ifdef WITH_SASL
+ const auto& sasl_password = options.col<Database::SaslPassword>();
if (!sasl_password.empty())
{
this->capabilities["sasl"] = {
@@ -325,10 +327,8 @@ void IrcClient::on_connected()
this->send_user_command(username, realname);
}
else
- this->send_user_command(this->username, this->realname);
-#else
- this->send_user_command(this->username, this->realname);
#endif
+ this->send_user_command(this->username, this->realname);
}
void IrcClient::on_connection_close(const std::string& error_msg)
@@ -1346,9 +1346,11 @@ void IrcClient::on_cap(const IrcMessage &message)
else if (sub_command == "NACK")
capability.on_nack();
this->capabilities.erase(it);
- this->cap_end();
+ if (this->capabilities.empty())
+ this->cap_end();
}
+#ifdef WITH_SASL
void IrcClient::on_authenticate(const IrcMessage &)
{
if (this->sasl_state == SaslState::unneeded)
@@ -1356,13 +1358,12 @@ void IrcClient::on_authenticate(const IrcMessage &)
log_warning("Received an AUTHENTICATE command but we don’t intend to authenticate…");
return;
}
-#ifdef USE_DATABASE
+
auto options = Database::get_irc_server_options(this->bridge.get_bare_jid(),
this->get_hostname());
const auto auth_string = '\0' + options.col<Database::Nick>() + '\0' + options.col<Database::SaslPassword>();
const auto base64_auth_string = base64::encode(auth_string);
this->send_message({"AUTHENTICATE", {base64_auth_string}});
-#endif
}
void IrcClient::on_sasl_success(const IrcMessage &)
@@ -1379,15 +1380,15 @@ void IrcClient::on_sasl_login(const IrcMessage &message)
text = message.arguments[3];
this->bridge.send_xmpp_message(this->hostname, message.prefix, text);
}
+#endif
void IrcClient::cap_end()
{
- if (!this->capabilities.empty())
- return;
+#ifdef WITH_SASL
// If we are currently authenticating through sasl, finish that before sending CAP END
if (this->sasl_state == SaslState::needed)
return;
-
+#endif
this->send_message({"CAP", {"END"}});
this->bridge.on_irc_client_connected(this->get_hostname());
}
diff --git a/src/irc/irc_client.hpp b/src/irc/irc_client.hpp
index e2ad8b9..9f77e29 100644
--- a/src/irc/irc_client.hpp
+++ b/src/irc/irc_client.hpp
@@ -3,7 +3,12 @@
#include <irc/irc_message.hpp>
#include <irc/irc_channel.hpp>
#include <irc/capability.hpp>
-#include <irc/sasl.hpp>
+
+#include "biboumi.h"
+
+#ifdef WITH_SASL
+# include <irc/sasl.hpp>
+#endif
#include <irc/iid.hpp>
#include <bridge/history_limit.hpp>
@@ -240,9 +245,11 @@ public:
private:
void cap_end();
public:
+#ifdef WITH_SASL
void on_authenticate(const IrcMessage& message);
void on_sasl_success(const IrcMessage& message);
void on_sasl_login(const IrcMessage& message);
+#endif
/**
* The channel has been completely joined (self presence, topic, all names
* received etc), send the self presence and topic to the XMPP user.
@@ -371,11 +378,13 @@ private:
* has been established, we are authentified and we have a nick)
*/
bool welcomed;
+#ifdef WITH_SASL
/**
* Whether or not we are trying to authenticate using sasl. If this is true we need to wait for a
* successful auth
*/
SaslState sasl_state{SaslState::unneeded};
+#endif
std::map<std::string, Capability> capabilities;
/**
* See http://www.irc.org/tech_docs/draft-brocklesby-irc-isupport-03.txt section 3.3