Respond to MAM requests on a channel JID
At the moment, result-set-management is not implemented, the whole history (well, at most 1024 messages) is returned.
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
#include <utils/time.hpp>
|
||||
|
||||
namespace utils
|
||||
{
|
||||
std::string to_string(const std::time_t& timestamp)
|
||||
{
|
||||
constexpr std::size_t stamp_size = 20;
|
||||
char date_buf[stamp_size];
|
||||
std::strftime(date_buf, stamp_size, "%FT%TZ", std::gmtime(×tamp));
|
||||
return {std::begin(date_buf), std::end(date_buf)};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <ctime>
|
||||
#include <string>
|
||||
|
||||
namespace utils
|
||||
{
|
||||
std::string to_string(const std::time_t& timestamp);
|
||||
}
|
||||
@@ -26,7 +26,12 @@ public:
|
||||
}
|
||||
std::string full() const
|
||||
{
|
||||
return this->local + "@" + this->domain + "/" + this->resource;
|
||||
std::string res = this->domain;
|
||||
if (!this->local.empty())
|
||||
res = this->local + "@" + this->domain;
|
||||
if (!this->resource.empty())
|
||||
res += "/" + this->resource;
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -7,22 +7,10 @@
|
||||
#include <config/config.hpp>
|
||||
#include <xmpp/jid.hpp>
|
||||
#include <utils/sha1.hpp>
|
||||
|
||||
#include <stdexcept>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <utils/time.hpp>
|
||||
|
||||
#include <uuid.h>
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
#include <louloulibs.h>
|
||||
#ifdef SYSTEMD_FOUND
|
||||
# include <systemd/sd-daemon.h>
|
||||
#endif
|
||||
|
||||
using namespace std::string_literals;
|
||||
|
||||
static std::set<std::string> kickable_errors{
|
||||
@@ -443,12 +431,9 @@ void XmppComponent::send_history_message(const std::string& muc_name, const std:
|
||||
message.add_child(std::move(body));
|
||||
|
||||
XmlNode delay("delay");
|
||||
delay["xmlns"] = "urn:xmpp:delay";
|
||||
delay["xmlns"] = DELAY_NS;
|
||||
delay["from"] = muc_name + "@" + this->served_hostname;
|
||||
constexpr std::size_t stamp_size = 20;
|
||||
char date_buf[stamp_size];
|
||||
std::strftime(date_buf, stamp_size, "%FT%TZ", std::gmtime(×tamp));
|
||||
delay["stamp"] = date_buf;
|
||||
delay["stamp"] = utils::to_string(timestamp);
|
||||
|
||||
message.add_child(std::move(delay));
|
||||
this->send_stanza(message);
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
#define VERSION_NS "jabber:iq:version"
|
||||
#define ADHOC_NS "http://jabber.org/protocol/commands"
|
||||
#define PING_NS "urn:xmpp:ping"
|
||||
#define DELAY_NS "urn:xmpp:delay"
|
||||
#define MAM_NS "urn:xmpp:mam:1"
|
||||
#define FORWARD_NS "urn:xmpp:forward:0"
|
||||
#define CLIENT_NS "jabber:client"
|
||||
|
||||
/**
|
||||
* An XMPP component, communicating with an XMPP server using the protocole
|
||||
|
||||
Reference in New Issue
Block a user