From 7ae6ad47ea4d4f20c5e0e983f6a550c6b3b2f8bb Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 14 Mar 2018 15:06:35 -0700 Subject: [PATCH] ircd::m::vm: Options to generate event_id, origin, origin_server_ts. --- include/ircd/m/vm.h | 9 +++++++++ ircd/m/vm.cc | 32 ++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/include/ircd/m/vm.h b/include/ircd/m/vm.h index 188635ba5..9d7eb3698 100644 --- a/include/ircd/m/vm.h +++ b/include/ircd/m/vm.h @@ -86,6 +86,15 @@ struct ircd::m::vm::opts // Sign and include signatures object bool sign {true}; + // Generate and include event_id + bool event_id {true}; + + // Include our origin + bool origin {true}; + + // Include origin_server_ts + bool origin_server_ts {true}; + /// Make writes to database bool write {true}; diff --git a/ircd/m/vm.cc b/ircd/m/vm.cc index 8fd5c13c6..2a48e03d9 100644 --- a/ircd/m/vm.cc +++ b/ircd/m/vm.cc @@ -36,10 +36,20 @@ ircd::m::vm::commit(json::iov &event, const json::iov &contents, const opts &opts) { - const json::iov::push set[] + const json::iov::add_if _origin { - { event, { "origin_server_ts", ircd::time() }}, - { event, { "origin", my_host() }}, + event, opts.origin, + { + "origin", my_host() + } + }; + + const json::iov::add_if _origin_server_ts + { + event, opts.origin_server_ts, + { + "origin_server_ts", ircd::time() + } }; const json::strung content @@ -50,20 +60,26 @@ ircd::m::vm::commit(json::iov &event, // event_id sha256::buf event_id_hash; + if(opts.event_id) { thread_local char preimage_buf[64_KiB]; - event_id_hash = sha256{stringify(mutable_buffer{preimage_buf}, event)}; + event_id_hash = sha256 + { + stringify(mutable_buffer{preimage_buf}, event) + }; } event::id::buf eid_buf; - const auto event_id + const string_view event_id { - m::event_id(event, eid_buf, event_id_hash) + opts.event_id? + m::event_id(event, eid_buf, event_id_hash): + string_view{} }; - const json::iov::push _event_id + const json::iov::add_if _event_id { - event, { "event_id", event_id } + event, opts.event_id, { "event_id", event_id } }; // hashes