diff --git a/include/ircd/m/m.h b/include/ircd/m/m.h index decf48a8d..a8bb8155d 100644 --- a/include/ircd/m/m.h +++ b/include/ircd/m/m.h @@ -29,6 +29,11 @@ namespace ircd::m::self bool host(const string_view &); } +namespace ircd::m::vm +{ + struct opts; +} + namespace ircd::m { extern struct user me; diff --git a/include/ircd/m/room.h b/include/ircd/m/room.h index a01adabaa..ba4435f70 100644 --- a/include/ircd/m/room.h +++ b/include/ircd/m/room.h @@ -98,6 +98,7 @@ struct ircd::m::room id room_id; event::id event_id; + const vm::opts *opts {nullptr}; operator const id &() const; @@ -115,13 +116,15 @@ struct ircd::m::room bool membership(const m::id::user &, const string_view &membership = "join") const; string_view membership(const mutable_buffer &out, const m::id::user &) const; - room(const id &room_id, const string_view &event_id) + room(const id &room_id, const string_view &event_id, const vm::opts *const &opts = nullptr) :room_id{room_id} ,event_id{event_id? event::id{event_id} : event::id{}} + ,opts{opts} {} - room(const id &room_id) + room(const id &room_id, const vm::opts *const &opts = nullptr) :room_id{room_id} + ,opts{opts} {} room() = default; diff --git a/modules/client/rooms/rooms.cc b/modules/client/rooms/rooms.cc index 42fb25c29..991edfd42 100644 --- a/modules/client/rooms/rooms.cc +++ b/modules/client/rooms/rooms.cc @@ -248,5 +248,10 @@ commit__iov_iov(const room &room, { event, { "prev_events", prev_events } }, }; - return m::vm::commit(event, contents); + const vm::opts &vmopts + { + room.opts? *room.opts : vm::default_opts + }; + + return m::vm::commit(event, contents, vmopts); }