0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-07-05 10:08:36 +02:00

ircd:Ⓜ️ Add txn creation util.

This commit is contained in:
Jason Volk 2018-03-09 17:53:18 -08:00
parent 4fa33bdc60
commit 2c4498502a
2 changed files with 68 additions and 0 deletions

View file

@ -28,6 +28,10 @@ struct ircd::m::txn
json::property<name::pdus, json::array>
>
{
using array = std::pair<const json::value *, size_t>;
static string_view create_id(const mutable_buffer &out, const string_view &txn);
static std::string create(const array &pdu, const array &edu, const array &pdu_failure = {});
using super_type::tuple;
using super_type::operator=;
};

View file

@ -1187,6 +1187,70 @@ ircd::m::exists(const id::room_alias &room_alias,
return function(room_alias, remote_query);
}
///////////////////////////////////////////////////////////////////////////////
//
// m/txn.h
//
std::string
ircd::m::txn::create(const array &pdu,
const array &edu,
const array &pdu_failure)
{
json::iov iov;
const json::iov::push push[]
{
{ iov, { "origin", my_host() }},
{ iov, { "origin_server_ts", ircd::time<milliseconds>() }},
};
const json::iov::add_if _pdus
{
iov, pdu.second,
{
"pdus", { pdu.first, pdu.second }
}
};
const json::iov::add_if _edus
{
iov, edu.second,
{
"edus", { edu.first, edu.second }
}
};
const json::iov::add_if _pdu_failures
{
iov, pdu_failure.second,
{
"pdu_failures", { pdu_failure.first, pdu_failure.second }
}
};
return json::strung
{
iov
};
}
ircd::string_view
ircd::m::txn::create_id(const mutable_buffer &out,
const string_view &txn)
{
const sha256::buf hash
{
sha256{txn}
};
const string_view txnid
{
b58encode(out, hash)
};
return txnid;
}
///////////////////////////////////////////////////////////////////////////////
//
// m/hook.h