~singpolyma/biboumi

849c50f9f33d5a391f623272b007810c816aca68 — louiz’ 8 years ago 4b1c580
Save our own host, as reported by the server
2 files changed, 23 insertions(+), 0 deletions(-)

M src/irc/irc_client.cpp
M src/irc/irc_client.hpp
M src/irc/irc_client.cpp => src/irc/irc_client.cpp +13 -0
@@ 59,6 59,7 @@ static const std::unordered_map<std::string,
  {"333", {&IrcClient::on_topic_who_time_received, {4, 0}}},
  {"RPL_TOPICWHOTIME", {&IrcClient::on_topic_who_time_received, {4, 0}}},
  {"366", {&IrcClient::on_channel_completely_joined, {2, 0}}},
  {"396", {&IrcClient::on_own_host_received, {2, 0}}},
  {"432", {&IrcClient::on_erroneous_nickname, {2, 0}}},
  {"433", {&IrcClient::on_nickname_conflict, {2, 0}}},
  {"438", {&IrcClient::on_nickname_change_too_fast, {2, 0}}},


@@ 746,6 747,18 @@ void IrcClient::on_channel_completely_joined(const IrcMessage& message)
  this->bridge.send_topic(this->hostname, chan_name, channel->topic, channel->topic_author);
}

void IrcClient::on_own_host_received(const IrcMessage& message)
{
  this->own_host = message.arguments[1];
  const std::string from = message.prefix;
  if (message.arguments.size() >= 3)
    this->bridge.send_xmpp_message(this->hostname, from,
                                   this->own_host + " " + message.arguments[2]);
  else
    this->bridge.send_xmpp_message(this->hostname, from, this->own_host +
                                                         " is now your displayed host");
}

void IrcClient::on_erroneous_nickname(const IrcMessage& message)
{
  const std::string error_msg = message.arguments.size() >= 3 ?

M src/irc/irc_client.hpp => src/irc/irc_client.hpp +10 -0
@@ 218,6 218,10 @@ public:
   */
  void on_channel_completely_joined(const IrcMessage& message);
  /**
   * Save our own host, as reported by the server
   */
  void on_own_host_received(const IrcMessage& message);
  /**
   * We tried to set an invalid nickname
   */
  void on_erroneous_nickname(const IrcMessage& message);


@@ 284,6 288,12 @@ private:
   */
  const std::string hostname;
  /**
   * Our own host, as reported by the IRC server.
   * By default (and if it is not overridden by the server), it is a
   * meaningless string, with the maximum allowed size
   */
  std::string own_host{63, '*'};
  /**
   * The hostname of the user.  This is used in the USER and the WEBIRC
   * commands, but only the one in WEBIRC will be used by the IRC server.
   */