diff --git a/src/discoitemsresponder.h b/include/transport/discoitemsresponder.h similarity index 82% rename from src/discoitemsresponder.h rename to include/transport/discoitemsresponder.h index 4361ebe12caa9f608f614c8f69616936480ac8a8..44bdc364ee98f6ab07c9068d88fccae65f274f16 100644 --- a/src/discoitemsresponder.h +++ b/include/transport/discoitemsresponder.h @@ -27,14 +27,22 @@ namespace Transport { +class Component; + class DiscoItemsResponder : public Swift::GetResponder { public: - DiscoItemsResponder(Swift::IQRouter *router); + DiscoItemsResponder(Component *component); ~DiscoItemsResponder(); + void addAdHocCommand(const std::string &node, const std::string &name); +// void removeAdHocCommand(const std::string &node); + private: virtual bool handleGetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr payload); + + Component *m_component; + boost::shared_ptr m_commands; }; } \ No newline at end of file diff --git a/src/discoitemsresponder.cpp b/src/discoitemsresponder.cpp index 58940a20a746ee62194cd8f59f33b97fb053f6af..2365b27e7e0b7e47437c369ebe1c100eb272b5a8 100644 --- a/src/discoitemsresponder.cpp +++ b/src/discoitemsresponder.cpp @@ -18,32 +18,45 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ -#include "discoitemsresponder.h" +#include "transport/discoitemsresponder.h" #include #include #include "Swiften/Queries/IQRouter.h" -#include "Swiften/Elements/DiscoItems.h" #include "Swiften/Swiften.h" +#include "transport/transport.h" +#include "transport/logging.h" using namespace Swift; using namespace boost; namespace Transport { -DiscoItemsResponder::DiscoItemsResponder(Swift::IQRouter *router) : Swift::GetResponder(router) { +DEFINE_LOGGER(logger, "DiscoItemsResponder"); + +DiscoItemsResponder::DiscoItemsResponder(Component *component) : Swift::GetResponder(component->getIQRouter()) { + m_component = component; + m_commands = boost::shared_ptr(new DiscoItems()); + m_commands->setNode("http://jabber.org/protocol/commands"); } DiscoItemsResponder::~DiscoItemsResponder() { } +void DiscoItemsResponder::addAdHocCommand(const std::string &node, const std::string &name) { + m_commands->addItem(DiscoItems::Item(name, m_component->getJID(), node)); +} + + bool DiscoItemsResponder::handleGetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr info) { - // presence for transport - if (to.getNode().empty()) { + LOG4CXX_INFO(logger, "get request received with node " << info->getNode()); + if (info->getNode() == "http://jabber.org/protocol/commands") { + sendResponse(from, id, m_commands); + } + else if (to.getNode().empty()) { sendResponse(from, id, boost::shared_ptr(new DiscoItems())); } - // presence for buddy else { sendResponse(from, id, boost::shared_ptr(new DiscoItems())); } diff --git a/src/transport.cpp b/src/transport.cpp index 80e086a41febf7593c580b76afd9243783e219cf..24f05ddff6ab8d512f6b4680d6cc47c8e91c6979 100644 --- a/src/transport.cpp +++ b/src/transport.cpp @@ -26,7 +26,7 @@ #include "transport/userregistry.h" #include "transport/logging.h" #include "discoinforesponder.h" -#include "discoitemsresponder.h" +#include "transport/discoitemsresponder.h" #include "storageparser.h" #include "Swiften/TLS/OpenSSL/OpenSSLServerContext.h" #include "Swiften/TLS/PKCS12Certificate.h" @@ -149,7 +149,7 @@ Component::Component(Swift::EventLoop *loop, Swift::NetworkFactories *factories, m_discoInfoResponder = new DiscoInfoResponder(m_iqRouter, m_config); m_discoInfoResponder->start(); - m_discoItemsResponder = new DiscoItemsResponder(m_iqRouter); + m_discoItemsResponder = new DiscoItemsResponder(this); m_discoItemsResponder->start(); //