~singpolyma/biboumi

b747f2825c43e31ade20267cecefe2c2a9c76241 — Florent Le Coz 9 years ago aaf7177
Respond to IQ version on the gateway, a server or a chan with biboumi version

ref #2455
3 files changed, 43 insertions(+), 1 deletions(-)

M src/config.h.cmake
M src/xmpp/xmpp_component.cpp
M src/xmpp/xmpp_component.hpp
M src/config.h.cmake => src/config.h.cmake +2 -1
@@ 1,6 1,7 @@
#define SYSTEM_NAME "${CMAKE_SYSTEM}"
#cmakedefine ICONV_SECOND_ARGUMENT_IS_CONST
#cmakedefine LIBIDN_FOUND
#cmakedefine SYSTEMDDAEMON_FOUND
#cmakedefine POLLER ${POLLER}
#cmakedefine BOTAN_FOUND
#cmakedefine BIBOUMI_VERSION "${BIBOUMI_VERSION}"
\ No newline at end of file
#cmakedefine BIBOUMI_VERSION "${BIBOUMI_VERSION}"

M src/xmpp/xmpp_component.cpp => src/xmpp/xmpp_component.cpp +37 -0
@@ 506,6 506,16 @@ void XmppComponent::handle_iq(const Stanza& stanza)
                }
            }
        }
      else if ((query = stanza.get_child("query", VERSION_NS)))
        {
          Iid iid(to.local);
          if (!iid.is_user)
            {
              // On the gateway itself or on a channel
              this->send_self_version(id, from, to_str);
            }
          stanza_error.disable();
        }
      else if ((query = stanza.get_child("query", DISCO_ITEMS_NS)))
        {
          const std::string node = query->get_tag("node");


@@ 973,6 983,33 @@ void XmppComponent::send_self_disco_info(const std::string& id, const std::strin
  this->send_stanza(iq);
}

void XmppComponent::send_self_version(const std::string& id, const std::string& jid_to, const std::string& jid_from)
{
  Stanza iq("iq");
  iq["type"] = "result";
  iq["id"] = id;
  iq["to"] = jid_to;
  iq["from"] = jid_from;
  XmlNode query("query");
  query["xmlns"] = VERSION_NS;
  XmlNode name("name");
  name.set_inner("biboumi");
  name.close();
  query.add_child(std::move(name));
  XmlNode version("version");
  version.set_inner(BIBOUMI_VERSION);
  version.close();
  query.add_child(std::move(version));
  XmlNode os("os");
  os.set_inner(SYSTEM_NAME);
  os.close();
  query.add_child(std::move(os));
  query.close();
  iq.add_child(std::move(query));
  iq.close();
  this->send_stanza(iq);
}

void XmppComponent::send_adhoc_commands_list(const std::string& id, const std::string& requester_jid)
{
  Stanza iq("iq");

M src/xmpp/xmpp_component.hpp => src/xmpp/xmpp_component.hpp +4 -0
@@ 200,6 200,10 @@ public:
   */
  void send_self_disco_info(const std::string& id, const std::string& jid_to);
  /**
   * Send a result IQ with the gateway version.
   */
  void send_self_version(const std::string& id, const std::string& jid_to, const std::string& jid_from);
  /**
   * Send the list of all available ad-hoc commands to that JID. The list is
   * different depending on what JID made the request.
   */