Make the password work when we join our first channel on that server

Because we need to wait for the welcome message, when we connect to the
server, before sending the JOIN command, we need to also save the value of
the password to reuse it when we actually send the JOIN command
This commit is contained in:
Florent Le Coz
2015-01-14 13:48:34 +01:00
parent f9e259c266
commit 60569993b4
2 changed files with 13 additions and 11 deletions
+5 -5
View File
@@ -74,9 +74,9 @@ void IrcClient::on_connection_failed(const std::string& reason)
if (this->ports_to_try.empty())
{
// Send an error message for all room that the user wanted to join
for (const std::string& channel: this->channels_to_join)
for (const auto& tuple: this->channels_to_join)
{
Iid iid(channel + "%" + this->hostname);
Iid iid(std::get<0>(tuple) + "%" + this->hostname);
this->bridge->send_presence_error(iid, this->current_nick,
"cancel", "item-not-found",
"", reason);
@@ -209,7 +209,7 @@ void IrcClient::send_quit_command(const std::string& reason)
void IrcClient::send_join_command(const std::string& chan_name, const std::string& password)
{
if (this->welcomed == false)
this->channels_to_join.push_back(chan_name);
this->channels_to_join.emplace_back(chan_name, password);
else
this->send_message(IrcMessage("JOIN", {chan_name, password}));
this->start();
@@ -536,8 +536,8 @@ void IrcClient::on_welcome_message(const IrcMessage& message)
// Install a repeated events to regularly send a PING
TimedEventsManager::instance().add_event(TimedEvent(240s, std::bind(&IrcClient::send_ping_command, this),
"PING"s + this->hostname + this->bridge->get_jid()));
for (const std::string& chan_name: this->channels_to_join)
this->send_join_command(chan_name);
for (const auto& tuple: this->channels_to_join)
this->send_join_command(std::get<0>(tuple), std::get<1>(tuple));
this->channels_to_join.clear();
// Indicate that the dummy channel is joined as well, if needed
if (this->dummy_channel.joining)