From 51b2cafc745f8403dae20e13cfd9654b28c5a480 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 15 Feb 2018 13:01:07 -0800 Subject: [PATCH] ircd::m: Add experimental sigiled and qualified device MXID. --- include/ircd/m/id.h | 12 ++++++++++++ ircd/m/id.cc | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/include/ircd/m/id.h b/include/ircd/m/id.h index c704b562e..12f9d03c5 100644 --- a/include/ircd/m/id.h +++ b/include/ircd/m/id.h @@ -44,6 +44,7 @@ struct ircd::m::id struct room_alias; struct group; struct origin; + struct device; enum sigil :char; template struct buf; @@ -85,6 +86,7 @@ enum ircd::m::id::sigil ROOM_ALIAS = '#', ///< Room alias (4.2.3) GROUP = '+', ///< Group ID (experimental) ORIGIN = ':', ///< Origin ID (experimental) + DEVICE = '%', ///< Device ID (experimental) }; /// (Appendix 4.2.1) User Identifiers @@ -183,6 +185,16 @@ struct ircd::m::id::origin origin() = default; }; +/// Device ID (EXPERIMENTAL) +/// +struct ircd::m::id::device +:ircd::m::id +{ + using buf = m::id::buf; + template device(args&&... a) :m::id{DEVICE, std::forward(a)...} {} + device() = default; +}; + // Utilities namespace ircd::m { diff --git a/ircd/m/id.cc b/ircd/m/id.cc index b845aa97c..bb603ab70 100644 --- a/ircd/m/id.cc +++ b/ircd/m/id.cc @@ -57,6 +57,7 @@ struct ircd::m::id::input const rule<> room_alias_sigil { lit(char(ircd::m::id::ROOM_ALIAS)) ,"room_alias sigil" }; const rule<> group_id_sigil { lit(char(ircd::m::id::GROUP)) ,"group_id sigil" }; const rule<> origin_sigil { lit(char(ircd::m::id::ORIGIN)) ,"origin sigil" }; + const rule<> device_sigil { lit(char(ircd::m::id::DEVICE)) ,"device sigil" }; const rule sigil { event_id_sigil | @@ -64,7 +65,8 @@ struct ircd::m::id::input room_id_sigil | room_alias_sigil | group_id_sigil | - origin_sigil + origin_sigil | + device_sigil ,"sigil" }; @@ -468,6 +470,10 @@ ircd::m::id::id(const enum sigil &sigil, printer::random_prefixed(sigil::ROOM_ALIAS, "", name); break; + case sigil::DEVICE: + printer::random_alpha(sigil::DEVICE, name, 16); + break; + default: printer::random_timebased(sigil, name); break; @@ -635,6 +641,7 @@ ircd::m::reflect(const enum id::sigil &c) case id::ROOM_ALIAS: return "ROOM_ALIAS"; case id::GROUP: return "GROUP"; case id::ORIGIN: return "ORIGIN"; + case id::DEVICE: return "DEVICE"; } return "?????";