~singpolyma/biboumi

12eeb4d11eee5b8e6514f0ce8bf7508cc2d6d7a1 — Florent Le Coz 8 years ago 80789c2
Implement the PING on a server or the gateway itself

fix #2575
4 files changed, 25 insertions(+), 0 deletions(-)

M CHANGELOG
M src/bridge/bridge.cpp
M src/bridge/bridge.hpp
M src/xmpp/xmpp_component.cpp
M CHANGELOG => CHANGELOG +3 -0
@@ 1,3 1,6 @@
Version 2.0
- Support PING requests in all directions

Version 1.1                                             2014-16-07

 - Fix a segmentation fault when connecting to an IRC server using IPv6

M src/bridge/bridge.cpp => src/bridge/bridge.cpp +11 -0
@@ 355,6 355,17 @@ void Bridge::send_irc_participant_ping_request(const Iid& iid, const std::string
  this->send_irc_user_ping_request(iid.get_server(), nick, iq_id, to_jid, from_jid);
}

void Bridge::on_gateway_ping(const std::string& irc_hostname, const std::string& iq_id, const std::string& to_jid,
                             const std::string& from_jid)
{
  Jid jid(from_jid);
  if (irc_hostname.empty() || this->get_irc_client(irc_hostname))
    this->xmpp->send_iq_result(iq_id, to_jid, jid.local);
  else
    this->xmpp->send_stanza_error("iq", to_jid, from_jid, iq_id, "cancel", "service-unavailable",
                                  "", true);
}

void Bridge::send_irc_version_request(const std::string& irc_hostname, const std::string& target,
                                      const std::string& iq_id, const std::string& to_jid,
                                      const std::string& from_jid)

M src/bridge/bridge.hpp => src/bridge/bridge.hpp +6 -0
@@ 85,6 85,12 @@ public:
  void send_irc_participant_ping_request(const Iid& iid, const std::string& nick,
                                         const std::string& iq_id, const std::string& to_jid,
                                         const std::string& from_jid);
  /**
   * Directly send back a result if it's a gateway ping or if we are
   * connected to the given IRC server, an error otherwise.
   */
  void on_gateway_ping(const std::string& irc_hostname, const std::string& iq_id, const std::string& to_jid,
                       const std::string& from_jid);

  /***
   **

M src/xmpp/xmpp_component.cpp => src/xmpp/xmpp_component.cpp +5 -0
@@ 568,6 568,11 @@ void XmppComponent::handle_iq(const Stanza& stanza)
              bridge->send_irc_participant_ping_request(iid,
                                                        to.resource, id, from, to_str);
            }
          else
            { // Ping a channel, a server or the gateway itself
              bridge->on_gateway_ping(iid.get_server(),
                                     id, from, to_str);
            }
          stanza_error.disable();
        }
    }