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:
louiz’
2016-08-28 22:42:50 +02:00
parent b59fc2a834
commit 7536a1b3f3
11 changed files with 176 additions and 30 deletions
+12
View File
@@ -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(&timestamp));
return {std::begin(date_buf), std::end(date_buf)};
}
}
+9
View File
@@ -0,0 +1,9 @@
#pragma once
#include <ctime>
#include <string>
namespace utils
{
std::string to_string(const std::time_t& timestamp);
}
+6 -1
View File
@@ -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;
}
};
+3 -18
View File
@@ -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(&timestamp));
delay["stamp"] = date_buf;
delay["stamp"] = utils::to_string(timestamp);
message.add_child(std::move(delay));
this->send_stanza(message);
+4
View File
@@ -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