~singpolyma/biboumi

19666d2ffd3ce36b7edd4044143fe535ef85dbd9 — Florent Le Coz 7 years ago 88ae259
Store the target jid in the AdhocSession objects
M louloulibs/xmpp/adhoc_commands_handler.cpp => louloulibs/xmpp/adhoc_commands_handler.cpp +2 -2
@@ 20,7 20,7 @@ std::map<const std::string, const AdhocCommand>& AdhocCommandsHandler::get_comma
  return this->commands;
}

XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, XmlNode command_node)
XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, const std::string& to, XmlNode command_node)
{
  std::string action = command_node.get_tag("action");
  if (action.empty())


@@ 57,7 57,7 @@ XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, Xm
          command_node["sessionid"] = sessionid;
          this->sessions.emplace(std::piecewise_construct,
                                 std::forward_as_tuple(sessionid, executor_jid),
                                 std::forward_as_tuple(command_it->second, executor_jid));
                                 std::forward_as_tuple(command_it->second, executor_jid, to));
          TimedEventsManager::instance().add_event(TimedEvent(std::chrono::steady_clock::now() + 3600s,
                                                              std::bind(&AdhocCommandsHandler::remove_session, this, sessionid, executor_jid),
                                                              "adhocsession"s + sessionid + executor_jid));

M louloulibs/xmpp/adhoc_commands_handler.hpp => louloulibs/xmpp/adhoc_commands_handler.hpp +1 -1
@@ 41,7 41,7 @@ public:
   * Takes a copy of the <command/> node so we can actually edit it and use
   * it as our return value.
   */
  XmlNode handle_request(const std::string& executor_jid, XmlNode command_node);
  XmlNode handle_request(const std::string& executor_jid, const std::string& to, XmlNode command_node);
  /**
   * Remove the session from the list. This is done to avoid filling the
   * memory with waiting session (for example due to a client that starts

M louloulibs/xmpp/adhoc_session.cpp => louloulibs/xmpp/adhoc_session.cpp +4 -2
@@ 3,9 3,11 @@

#include <assert.h>

AdhocSession::AdhocSession(const AdhocCommand& command, const std::string& jid):
AdhocSession::AdhocSession(const AdhocCommand& command, const std::string& owner_jid,
                           const std::string& to_jid):
  command(command),
  owner_jid(jid),
  owner_jid(owner_jid),
  to_jid(to_jid),
  current_step(0),
  terminated(false)
{

M louloulibs/xmpp/adhoc_session.hpp => louloulibs/xmpp/adhoc_session.hpp +15 -1
@@ 23,7 23,8 @@ typedef std::function<void(XmppComponent*, AdhocSession&, XmlNode&)> AdhocStep;
class AdhocSession
{
public:
  explicit AdhocSession(const AdhocCommand& command, const std::string& jid);
  explicit AdhocSession(const AdhocCommand& command, const std::string& owner_jid,
                        const std::string& to_jid);
  ~AdhocSession();
  /**
   * Return the function to be executed, found in our AdhocCommand, for the


@@ 41,6 42,15 @@ public:
   */
  void terminate();
  bool is_terminated() const;
  std::string get_target_jid() const
  {
    return this->to_jid;
  }
  std::string get_owner_jid() const
  {
    return this->owner_jid;
  }


private:
  /**


@@ 55,6 65,10 @@ private:
   */
  const std::string& owner_jid;
  /**
   * The 'to' attribute in the request stanza.  This is the target of the current session.
   */
  const std::string& to_jid;
  /**
   * The current step we are at. It starts at zero. It is used to index the
   * associated AdhocCommand::callbacks vector.
   */