~singpolyma/biboumi

579ca4bdb6b8806d821daa2ee47d60260b64f0f8 — Florent Le Coz 10 years ago 04fe15a
Forward iq version results to IRC
M src/bridge/bridge.cpp => src/bridge/bridge.cpp +9 -2
@@ 170,13 170,13 @@ void Bridge::send_channel_message(const Iid& iid, const std::string& body)
                               this->make_xmpp_body(body), this->user_jid);
}

void Bridge::send_private_message(const Iid& iid, const std::string& body)
void Bridge::send_private_message(const Iid& iid, const std::string& body, const std::string& type)
{
  if (iid.chan.empty() || iid.server.empty())
    return ;
  IrcClient* irc = this->get_irc_client(iid.server);
  if (irc)
    irc->send_private_message(iid.chan, body);
    irc->send_private_message(iid.chan, body, type);
}

void Bridge::leave_irc_channel(Iid&& iid, std::string&& status_message)


@@ 207,6 207,13 @@ void Bridge::set_channel_topic(const Iid& iid, const std::string& subject)
    irc->send_topic_command(iid.chan, subject);
}

void Bridge::send_xmpp_version_to_irc(const Iid& iid, const std::string& name, const std::string& version, const std::string& os)
{
  std::string result(name + " " + version + " " + os);

  this->send_private_message(iid, "\01VERSION "s + result + "\01", "NOTICE");
}

void Bridge::send_message(const Iid& iid, const std::string& nick, const std::string& body, const bool muc)
{
  if (muc)

M src/bridge/bridge.hpp => src/bridge/bridge.hpp +2 -1
@@ 45,11 45,12 @@ public:
   */
  bool join_irc_channel(const Iid& iid, const std::string& username);
  void send_channel_message(const Iid& iid, const std::string& body);
  void send_private_message(const Iid& iid, const std::string& body);
  void send_private_message(const Iid& iid, const std::string& body, const std::string& type="PRIVMSG");
  void leave_irc_channel(Iid&& iid, std::string&& status_message);
  void send_irc_nick_change(const Iid& iid, const std::string& new_nick);
  void send_irc_kick(const Iid& iid, const std::string& target, const std::string& reason);
  void set_channel_topic(const Iid& iid, const std::string& subject);
  void send_xmpp_version_to_irc(const Iid& iid, const std::string& name, const std::string& version, const std::string& os);

  /***
   **

M src/irc/irc_client.cpp => src/irc/irc_client.cpp +2 -2
@@ 192,12 192,12 @@ bool IrcClient::send_channel_message(const std::string& chan_name, const std::st
  return true;
}

void IrcClient::send_private_message(const std::string& username, const std::string& body)
void IrcClient::send_private_message(const std::string& username, const std::string& body, const std::string& type)
{
  std::string::size_type pos = 0;
  while (pos < body.size())
    {
      this->send_message(IrcMessage("PRIVMSG", {username, body.substr(pos, 400)}));
      this->send_message(IrcMessage(std::string(type), {username, body.substr(pos, 400)}));
      pos += 400;
    }


M src/irc/irc_client.hpp => src/irc/irc_client.hpp +1 -1
@@ 88,7 88,7 @@ public:
  /**
   * Send a PRIVMSG command for an user
   */
  void send_private_message(const std::string& username, const std::string& body);
  void send_private_message(const std::string& username, const std::string& body, const std::string& type);
  /**
   * Send the PART irc command
   */

M src/xmpp/xmpp_component.cpp => src/xmpp/xmpp_component.cpp +18 -0
@@ 444,6 444,24 @@ void XmppComponent::handle_iq(const Stanza& stanza)
  else if (type == "result")
    {
      stanza_error.disable();
      XmlNode* query;
      if ((query = stanza.get_child(VERSION_NS":query")))
        {
          XmlNode* name_node = query->get_child(VERSION_NS":name");
          XmlNode* version_node = query->get_child(VERSION_NS":version");
          XmlNode* os_node = query->get_child(VERSION_NS":os");
          std::string name;
          std::string version;
          std::string os;
          if (name_node)
            name = name_node->get_inner() + " (through the biboumi gateway)";
          if (version_node)
            version = version_node->get_inner();
          if (os_node)
            os = os_node->get_inner();
          const Iid iid(to.local);
          bridge->send_xmpp_version_to_irc(iid, name, version, os);
        }
    }
  error_type = "cancel";
  error_name = "feature-not-implemented";