mirror of
https://github.com/matrix-construct/construct
synced 2024-11-25 08:12:37 +01:00
ircd: Move m::import to mods::import where it is more appropriate.
This commit is contained in:
parent
75a05d864c
commit
11948e47ac
15 changed files with 225 additions and 248 deletions
|
@ -358,7 +358,7 @@ try
|
|||
// function does a lot of IO so it requires an ircd::ctx.
|
||||
ircd::context{[]
|
||||
{
|
||||
ircd::m::import<void ()> reload_conf
|
||||
ircd::mods::import<void ()> reload_conf
|
||||
{
|
||||
"s_conf", "reload_conf"
|
||||
};
|
||||
|
|
|
@ -1,103 +0,0 @@
|
|||
// Matrix Construct
|
||||
//
|
||||
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
||||
// Copyright (C) 2016-2018 Jason Volk <jason@zemos.net>
|
||||
//
|
||||
// Permission to use, copy, modify, and/or distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
// copyright notice and this permission notice is present in all copies. The
|
||||
// full license for this software is available in the LICENSE file.
|
||||
|
||||
#pragma once
|
||||
#define HAVE_IRCD_M_IMPORT_H
|
||||
|
||||
namespace ircd::m
|
||||
{
|
||||
template<class prototype> struct import;
|
||||
struct imports extern imports;
|
||||
}
|
||||
|
||||
struct ircd::m::imports
|
||||
:std::map<std::string, ircd::module, std::less<>>
|
||||
{
|
||||
void init();
|
||||
};
|
||||
|
||||
template<class prototype>
|
||||
struct ircd::m::import
|
||||
:mods::import<prototype>
|
||||
{
|
||||
std::string modname;
|
||||
std::string symname;
|
||||
|
||||
void reload();
|
||||
|
||||
public:
|
||||
template<class... args> auto operator()(args&&... a);
|
||||
prototype *operator->();
|
||||
prototype &operator*();
|
||||
operator prototype &();
|
||||
|
||||
import(std::string modname, std::string symname);
|
||||
};
|
||||
|
||||
template<class prototype>
|
||||
ircd::m::import<prototype>::import(std::string modname,
|
||||
std::string symname)
|
||||
:mods::import<prototype>{}
|
||||
,modname{std::move(modname)}
|
||||
,symname{std::move(symname)}
|
||||
{}
|
||||
|
||||
template<class prototype>
|
||||
ircd::m::import<prototype>::operator
|
||||
prototype &()
|
||||
{
|
||||
return this->operator*();
|
||||
}
|
||||
|
||||
template<class prototype>
|
||||
prototype &
|
||||
ircd::m::import<prototype>::operator*()
|
||||
{
|
||||
return *this->operator->();
|
||||
}
|
||||
|
||||
template<class prototype>
|
||||
prototype *
|
||||
ircd::m::import<prototype>::operator->()
|
||||
{
|
||||
if(unlikely(!*this))
|
||||
reload();
|
||||
|
||||
return mods::import<prototype>::operator->();
|
||||
}
|
||||
|
||||
template<class prototype>
|
||||
template<class... args>
|
||||
auto
|
||||
ircd::m::import<prototype>::operator()(args&&... a)
|
||||
{
|
||||
if(unlikely(!*this))
|
||||
reload();
|
||||
|
||||
return mods::import<prototype>::operator()(std::forward<args>(a)...);
|
||||
}
|
||||
|
||||
template<class prototype>
|
||||
void
|
||||
ircd::m::import<prototype>::reload()
|
||||
try
|
||||
{
|
||||
auto &import(static_cast<mods::import<prototype> &>(*this));
|
||||
import = { imports.at(modname), symname };
|
||||
}
|
||||
catch(const std::out_of_range &e)
|
||||
{
|
||||
throw m::UNAVAILABLE
|
||||
{
|
||||
"Sorry, %s in %s is currently unavailable.",
|
||||
symname,
|
||||
modname
|
||||
};
|
||||
}
|
|
@ -30,7 +30,6 @@ namespace ircd::m::vm
|
|||
|
||||
#include "name.h"
|
||||
#include "error.h"
|
||||
#include "import.h"
|
||||
#include "self.h"
|
||||
#include "id.h"
|
||||
#include "event.h"
|
||||
|
|
|
@ -14,14 +14,25 @@
|
|||
namespace ircd::mods
|
||||
{
|
||||
template<class T> struct import;
|
||||
struct imports extern imports;
|
||||
}
|
||||
|
||||
struct ircd::mods::imports
|
||||
:std::map<std::string, mods::module, std::less<>>
|
||||
{};
|
||||
|
||||
/// Representation of a symbol in a loaded shared library
|
||||
///
|
||||
template<class T>
|
||||
struct ircd::mods::import
|
||||
:sym_ptr
|
||||
{
|
||||
std::string module_name;
|
||||
std::string symbol_name;
|
||||
|
||||
void reload();
|
||||
|
||||
public:
|
||||
template<class... args> auto operator()(args&&... a) const;
|
||||
template<class... args> auto operator()(args&&... a);
|
||||
|
||||
|
@ -33,26 +44,67 @@ struct ircd::mods::import
|
|||
T &operator*();
|
||||
operator T &();
|
||||
|
||||
using sym_ptr::sym_ptr;
|
||||
explicit import(const mods::module &, std::string symbol_name);
|
||||
import(std::string module_name, std::string symbol_name);
|
||||
};
|
||||
|
||||
template<class T>
|
||||
ircd::mods::import<T>::operator T &()
|
||||
ircd::mods::import<T>::import(std::string module_name,
|
||||
std::string symbol_name)
|
||||
:sym_ptr
|
||||
{
|
||||
return sym_ptr::operator*<T>();
|
||||
// Note sym_ptr is purposely default constructed; this makes the import
|
||||
// "lazy" and will be loaded via miss on first use. This is useful in
|
||||
// the general use-case of static construction.
|
||||
}
|
||||
,module_name
|
||||
{
|
||||
std::move(module_name)
|
||||
}
|
||||
,symbol_name
|
||||
{
|
||||
std::move(symbol_name)
|
||||
}
|
||||
{}
|
||||
|
||||
template<class T>
|
||||
ircd::mods::import<T>::import(const mods::module &module,
|
||||
std::string symbol_name)
|
||||
:sym_ptr
|
||||
{
|
||||
module, symbol_name
|
||||
}
|
||||
,module_name
|
||||
{
|
||||
module.name()
|
||||
}
|
||||
,symbol_name
|
||||
{
|
||||
std::move(symbol_name)
|
||||
}
|
||||
{}
|
||||
|
||||
template<class T>
|
||||
ircd::mods::import<T>::operator
|
||||
T &()
|
||||
{
|
||||
return this->operator*();
|
||||
}
|
||||
|
||||
template<class T>
|
||||
T &
|
||||
ircd::mods::import<T>::operator*()
|
||||
{
|
||||
return sym_ptr::operator*<T>();
|
||||
return *this->operator->();
|
||||
}
|
||||
|
||||
template<class T>
|
||||
T *
|
||||
ircd::mods::import<T>::operator->()
|
||||
{
|
||||
if(unlikely(!*this))
|
||||
reload();
|
||||
|
||||
return sym_ptr::operator-><T>();
|
||||
}
|
||||
|
||||
|
@ -61,7 +113,7 @@ ircd::mods::import<T>::operator
|
|||
const T &()
|
||||
const
|
||||
{
|
||||
return sym_ptr::operator*<T>();
|
||||
return this->operator*();
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
@ -69,7 +121,7 @@ const T &
|
|||
ircd::mods::import<T>::operator*()
|
||||
const
|
||||
{
|
||||
return sym_ptr::operator*<T>();
|
||||
return this->operator->();
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
@ -85,6 +137,9 @@ template<class... args>
|
|||
auto
|
||||
ircd::mods::import<T>::operator()(args&&... a)
|
||||
{
|
||||
if(unlikely(!*this))
|
||||
reload();
|
||||
|
||||
return sym_ptr::operator()<T>(std::forward<args>(a)...);
|
||||
}
|
||||
|
||||
|
@ -96,3 +151,30 @@ const
|
|||
{
|
||||
return sym_ptr::operator()<T>(std::forward<args>(a)...);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void
|
||||
ircd::mods::import<T>::reload()
|
||||
try
|
||||
{
|
||||
auto &module
|
||||
{
|
||||
imports.at(module_name)
|
||||
};
|
||||
|
||||
auto &sp
|
||||
{
|
||||
static_cast<sym_ptr &>(*this)
|
||||
};
|
||||
|
||||
sp = { module, symbol_name };
|
||||
}
|
||||
catch(const std::out_of_range &e)
|
||||
{
|
||||
throw unavailable
|
||||
{
|
||||
"Sorry, %s in %s is currently unavailable.",
|
||||
symbol_name,
|
||||
module_name
|
||||
};
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ namespace ircd::mods
|
|||
IRCD_EXCEPTION(error, invalid_export)
|
||||
IRCD_EXCEPTION(error, expired_symbol)
|
||||
IRCD_EXCEPTION(error, undefined_symbol)
|
||||
IRCD_EXCEPTION(expired_symbol, unavailable)
|
||||
|
||||
string_view name(const mod &);
|
||||
string_view path(const mod &);
|
||||
|
|
|
@ -24,7 +24,7 @@ ircd::m::pretty(std::ostream &s,
|
|||
const event &e)
|
||||
{
|
||||
using prototype = void (std::ostream &, const event &);
|
||||
static import<prototype> pretty
|
||||
thread_local mods::import<prototype> pretty
|
||||
{
|
||||
"m_event", "pretty__event"
|
||||
};
|
||||
|
@ -51,7 +51,7 @@ ircd::m::pretty_oneline(std::ostream &s,
|
|||
const bool &content_keys)
|
||||
{
|
||||
using prototype = void (std::ostream &, const event &, const bool &);
|
||||
static import<prototype> pretty_oneline
|
||||
thread_local mods::import<prototype> pretty_oneline
|
||||
{
|
||||
"m_event", "pretty_oneline__event"
|
||||
};
|
||||
|
@ -76,7 +76,7 @@ ircd::m::pretty_msgline(std::ostream &s,
|
|||
const event &e)
|
||||
{
|
||||
using prototype = void (std::ostream &, const event &);
|
||||
static import<prototype> pretty_msgline
|
||||
thread_local mods::import<prototype> pretty_msgline
|
||||
{
|
||||
"m_event", "pretty_msgline__event"
|
||||
};
|
||||
|
@ -101,7 +101,7 @@ ircd::m::pretty(std::ostream &s,
|
|||
const event::prev &prev)
|
||||
{
|
||||
using prototype = void (std::ostream &, const event &);
|
||||
static import<prototype> pretty
|
||||
thread_local mods::import<prototype> pretty
|
||||
{
|
||||
"m_event", "pretty__prev"
|
||||
};
|
||||
|
@ -126,7 +126,7 @@ ircd::m::pretty_oneline(std::ostream &s,
|
|||
const event::prev &prev)
|
||||
{
|
||||
using prototype = void (std::ostream &, const event::prev &);
|
||||
static import<prototype> pretty_oneline
|
||||
thread_local mods::import<prototype> pretty_oneline
|
||||
{
|
||||
"m_event", "pretty_oneline__prev"
|
||||
};
|
||||
|
|
158
ircd/m/m.cc
158
ircd/m/m.cc
|
@ -53,8 +53,6 @@ catch(const m::error &e)
|
|||
{
|
||||
log, "%s %s", e.what(), e.content
|
||||
};
|
||||
|
||||
assert(m::imports.empty());
|
||||
}
|
||||
catch(const std::exception &e)
|
||||
{
|
||||
|
@ -62,8 +60,6 @@ catch(const std::exception &e)
|
|||
{
|
||||
log, "%s", e.what()
|
||||
};
|
||||
|
||||
assert(m::imports.empty());
|
||||
}
|
||||
|
||||
ircd::m::init::~init()
|
||||
|
@ -72,7 +68,7 @@ noexcept try
|
|||
if(!std::current_exception())
|
||||
presence::set(me, "offline", me_offline_status_msg);
|
||||
|
||||
m::imports.clear();
|
||||
mods::imports.clear();
|
||||
}
|
||||
catch(const m::error &e)
|
||||
{
|
||||
|
@ -87,20 +83,20 @@ catch(const m::error &e)
|
|||
void
|
||||
ircd::m::init::close()
|
||||
{
|
||||
m::imports.erase("s_listen"s);
|
||||
mods::imports.erase("s_listen"s);
|
||||
}
|
||||
|
||||
void
|
||||
ircd::m::init::init_keys()
|
||||
try
|
||||
{
|
||||
m::imports.emplace("s_keys"s, "s_keys"s);
|
||||
mods::imports.emplace("s_keys"s, "s_keys"s);
|
||||
const unwind::exceptional uw{[]
|
||||
{
|
||||
m::imports.erase("s_keys"s);
|
||||
mods::imports.erase("s_keys"s);
|
||||
}};
|
||||
|
||||
m::import<void ()> init_my_keys
|
||||
mods::import<void ()> init_my_keys
|
||||
{
|
||||
"s_keys", "init_my_keys"
|
||||
};
|
||||
|
@ -132,14 +128,33 @@ try
|
|||
return;
|
||||
}
|
||||
|
||||
m::imports.init();
|
||||
// Manually load first modules
|
||||
mods::imports.emplace("vm"s, "vm"s);
|
||||
mods::imports.emplace("vm_fetch"s, "vm_fetch"s);
|
||||
|
||||
// The order of these prefixes will be the loading order. Order of
|
||||
// specific modules within a prefix is not determined here.
|
||||
static const string_view prefixes[]
|
||||
{
|
||||
"s_", "m_", "key_", "media_", "client_", "federation_"
|
||||
};
|
||||
|
||||
// Load modules by prefix.
|
||||
for(const auto &prefix : prefixes)
|
||||
for(const auto &name : mods::available())
|
||||
if(startswith(name, prefix))
|
||||
mods::imports.emplace(name, name);
|
||||
|
||||
// Manually load last modules
|
||||
mods::imports.emplace("webroot"s, "webroot"s);
|
||||
|
||||
if(db::sequence(*dbs::events) == 0)
|
||||
bootstrap();
|
||||
}
|
||||
catch(const std::exception &e)
|
||||
{
|
||||
const ctx::exception_handler eh;
|
||||
m::imports.clear();
|
||||
mods::imports.clear();
|
||||
throw m::error
|
||||
{
|
||||
"M_INIT_ERROR", "%s", e.what()
|
||||
|
@ -148,7 +163,7 @@ catch(const std::exception &e)
|
|||
catch(const ctx::terminated &)
|
||||
{
|
||||
const ctx::exception_handler eh;
|
||||
m::imports.clear();
|
||||
mods::imports.clear();
|
||||
throw ctx::terminated{};
|
||||
}
|
||||
|
||||
|
@ -370,7 +385,7 @@ ircd::m::feds::state::state(const m::room::id &room_id,
|
|||
const milliseconds &,
|
||||
const std::function<closure_prototype> &);
|
||||
|
||||
static m::import<prototype> feds__state
|
||||
thread_local mods::import<prototype> feds__state
|
||||
{
|
||||
"federation_federation", "feds__state"
|
||||
};
|
||||
|
@ -614,7 +629,7 @@ ircd::m::vm::eval::operator()(const room &room,
|
|||
{
|
||||
using prototype = fault (eval &, const m::room &, json::iov &, const json::iov &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"vm", "eval__commit_room"
|
||||
};
|
||||
|
@ -630,7 +645,7 @@ ircd::m::vm::eval::operator()(json::iov &event,
|
|||
{
|
||||
using prototype = fault (eval &, json::iov &, const json::iov &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"vm", "eval__commit"
|
||||
};
|
||||
|
@ -644,7 +659,7 @@ try
|
|||
{
|
||||
using prototype = fault (eval &, const m::event &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"vm", "eval__event"
|
||||
};
|
||||
|
@ -738,7 +753,7 @@ ircd::m::verify(const m::keys &keys)
|
|||
{
|
||||
using prototype = bool (const m::keys &) noexcept;
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"s_keys", "verify__keys"
|
||||
};
|
||||
|
@ -764,7 +779,7 @@ ircd::m::keys::get(const string_view &server_name,
|
|||
{
|
||||
using prototype = void (const string_view &, const string_view &, const closure &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"s_keys", "get__keys"
|
||||
};
|
||||
|
@ -779,7 +794,7 @@ ircd::m::keys::query(const string_view &query_server,
|
|||
{
|
||||
using prototype = bool (const string_view &, const queries &, const closure_bool &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"s_keys", "query__keys"
|
||||
};
|
||||
|
@ -816,7 +831,7 @@ ircd::m::visible(const event &event,
|
|||
{
|
||||
using prototype = bool (const m::event &, const string_view &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"m_room_history_visibility", "visible"
|
||||
};
|
||||
|
@ -845,7 +860,7 @@ ircd::m::receipt::read(const id::room &room_id,
|
|||
{
|
||||
using prototype = event::id::buf (const id::room &, const id::user &, const id::event &, const time_t &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "commit__m_receipt_m_read"
|
||||
};
|
||||
|
@ -876,7 +891,7 @@ ircd::m::receipt::read(const id::room &room_id,
|
|||
{
|
||||
using prototype = bool (const id::room &, const id::user &, const id::event::closure &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"m_receipt", "last_receipt__event_id"
|
||||
};
|
||||
|
@ -894,7 +909,7 @@ ircd::m::typing::set(const m::typing &object)
|
|||
{
|
||||
using prototype = event::id::buf (const m::typing &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "commit__m_typing"
|
||||
};
|
||||
|
@ -934,7 +949,7 @@ ircd::m::presence::set(const presence &object)
|
|||
{
|
||||
using prototype = event::id::buf (const presence &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"m_presence", "commit__m_presence"
|
||||
};
|
||||
|
@ -998,7 +1013,7 @@ ircd::m::presence::get(std::nothrow_t,
|
|||
{
|
||||
using prototype = bool (std::nothrow_t, const m::user &, const event_closure &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"m_presence", "get__m_presence"
|
||||
};
|
||||
|
@ -1011,7 +1026,7 @@ ircd::m::presence::valid_state(const string_view &state)
|
|||
{
|
||||
using prototype = bool (const string_view &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"m_presence", "presence_valid_state"
|
||||
};
|
||||
|
@ -1047,7 +1062,7 @@ ircd::m::create(const id::node &node_id,
|
|||
{
|
||||
using prototype = node (const id::node &, const json::members &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"s_node", "create_node"
|
||||
};
|
||||
|
@ -1061,7 +1076,7 @@ ircd::m::exists(const node::id &node_id)
|
|||
{
|
||||
using prototype = bool (const node::id &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"s_node", "exists__nodeid"
|
||||
};
|
||||
|
@ -1598,7 +1613,7 @@ ircd::m::create(const id::user &user_id,
|
|||
{
|
||||
using prototype = user (const id::user &, const json::members &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_user", "user_create"
|
||||
};
|
||||
|
@ -1677,7 +1692,7 @@ ircd::m::user::activate()
|
|||
{
|
||||
using prototype = event::id::buf (const m::user &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_account", "activate__user"
|
||||
};
|
||||
|
@ -1690,7 +1705,7 @@ ircd::m::user::deactivate()
|
|||
{
|
||||
using prototype = event::id::buf (const m::user &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_account", "deactivate__user"
|
||||
};
|
||||
|
@ -1704,7 +1719,7 @@ const
|
|||
{
|
||||
using prototype = bool (const m::user &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_account", "is_active__user"
|
||||
};
|
||||
|
@ -1718,7 +1733,7 @@ ircd::m::user::filter(const json::object &filter,
|
|||
{
|
||||
using prototype = event::id::buf (const m::user &, const json::object &, const mutable_buffer &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_user", "filter_set"
|
||||
};
|
||||
|
@ -1775,7 +1790,7 @@ const
|
|||
{
|
||||
using prototype = bool (std::nothrow_t, const m::user &, const string_view &, const filter_closure &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_user", "filter_get"
|
||||
};
|
||||
|
@ -1791,7 +1806,7 @@ ircd::m::user::account_data(const m::room &room,
|
|||
{
|
||||
using prototype = event::id::buf (const m::user &, const m::room &, const m::user &, const string_view &, const json::object &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_user", "room_account_data_set"
|
||||
};
|
||||
|
@ -1806,7 +1821,7 @@ ircd::m::user::account_data(const m::user &sender,
|
|||
{
|
||||
using prototype = event::id::buf (const m::user &, const m::user &, const string_view &, const json::object &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_user", "account_data_set"
|
||||
};
|
||||
|
@ -1882,7 +1897,7 @@ const
|
|||
{
|
||||
using prototype = void (const m::user &, const m::room &, const string_view &, const account_data_closure &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_user", "room_account_data_get"
|
||||
};
|
||||
|
@ -1897,7 +1912,7 @@ const
|
|||
{
|
||||
using prototype = void (const m::user &, const string_view &, const account_data_closure &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_user", "account_data_get"
|
||||
};
|
||||
|
@ -1911,7 +1926,7 @@ ircd::m::user::_account_data_type(const mutable_buffer &out,
|
|||
{
|
||||
using prototype = string_view (const mutable_buffer &, const m::room::id &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_user", "room_account_data_type"
|
||||
};
|
||||
|
@ -1926,7 +1941,7 @@ ircd::m::user::profile(const m::user &sender,
|
|||
{
|
||||
using prototype = event::id::buf (const m::user &, const m::user &, const string_view &, const string_view &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_profile", "profile_set"
|
||||
};
|
||||
|
@ -1970,7 +1985,7 @@ const
|
|||
{
|
||||
using prototype = void (const m::user &, const string_view &, const profile_closure &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_profile", "profile_get"
|
||||
};
|
||||
|
@ -1983,7 +1998,7 @@ ircd::m::user::password(const string_view &password)
|
|||
{
|
||||
using prototype = event::id::buf (const m::user::id &, const string_view &) noexcept;
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_account", "set_password"
|
||||
};
|
||||
|
@ -1997,7 +2012,7 @@ const noexcept try
|
|||
{
|
||||
using prototype = bool (const m::user::id &, const string_view &) noexcept;
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_account", "is_password"
|
||||
};
|
||||
|
@ -2473,7 +2488,7 @@ ircd::m::create(const id::room &room_id,
|
|||
{
|
||||
using prototype = room (const id::room &, const id::user &, const string_view &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_createroom", "createroom__type"
|
||||
};
|
||||
|
@ -2489,7 +2504,7 @@ ircd::m::create(const id::room &room_id,
|
|||
{
|
||||
using prototype = room (const id::room &, const id::user &, const id::room &, const string_view &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_createroom", "createroom__parent_type"
|
||||
};
|
||||
|
@ -2503,7 +2518,7 @@ ircd::m::join(const id::room_alias &room_alias,
|
|||
{
|
||||
using prototype = event::id::buf (const id::room_alias &, const id::user &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "join__alias_user"
|
||||
};
|
||||
|
@ -2517,7 +2532,7 @@ ircd::m::join(const room &room,
|
|||
{
|
||||
using prototype = event::id::buf (const m::room &, const id::user &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "join__room_user"
|
||||
};
|
||||
|
@ -2531,7 +2546,7 @@ ircd::m::leave(const room &room,
|
|||
{
|
||||
using prototype = event::id::buf (const m::room &, const id::user &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "leave__room_user"
|
||||
};
|
||||
|
@ -2546,7 +2561,7 @@ ircd::m::invite(const room &room,
|
|||
{
|
||||
using prototype = event::id::buf (const m::room &, const id::user &, const id::user &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "invite__room_user"
|
||||
};
|
||||
|
@ -2562,7 +2577,7 @@ ircd::m::redact(const room &room,
|
|||
{
|
||||
using prototype = event::id::buf (const m::room &, const id::user &, const id::event &, const string_view &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "redact__"
|
||||
};
|
||||
|
@ -2655,7 +2670,7 @@ ircd::m::send(const room &room,
|
|||
{
|
||||
using prototype = event::id::buf (const m::room &, const id::user &, const string_view &, const string_view &, const json::iov &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "state__iov"
|
||||
};
|
||||
|
@ -2693,7 +2708,7 @@ ircd::m::send(const room &room,
|
|||
{
|
||||
using prototype = event::id::buf (const m::room &, const id::user &, const string_view &, const json::iov &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_rooms", "send__iov"
|
||||
};
|
||||
|
@ -2771,7 +2786,7 @@ ircd::m::count_since(const room &r,
|
|||
const event::idx &,
|
||||
const event::idx &);
|
||||
|
||||
static m::import<prototype> _count_since
|
||||
thread_local mods::import<prototype> _count_since
|
||||
{
|
||||
"m_room", "count_since"
|
||||
};
|
||||
|
@ -2815,7 +2830,7 @@ ircd::m::room_id(const mutable_buffer &out,
|
|||
{
|
||||
using prototype = id::room (const mutable_buffer &, const id::room_alias &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_directory_room", "room_id__room_alias"
|
||||
};
|
||||
|
@ -2829,7 +2844,7 @@ ircd::m::exists(const id::room_alias &room_alias,
|
|||
{
|
||||
using prototype = bool (const id::room_alias, const bool &);
|
||||
|
||||
static import<prototype> function
|
||||
thread_local mods::import<prototype> function
|
||||
{
|
||||
"client_directory_room", "room_alias_exists"
|
||||
};
|
||||
|
@ -3540,39 +3555,6 @@ ircd::m::_hook_match(const m::event &matching,
|
|||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// m/import.h
|
||||
//
|
||||
|
||||
decltype(ircd::m::imports)
|
||||
ircd::m::imports
|
||||
{};
|
||||
|
||||
void
|
||||
ircd::m::imports::init()
|
||||
{
|
||||
// Manually load first modules
|
||||
this->emplace("vm"s, "vm"s);
|
||||
this->emplace("vm_fetch"s, "vm_fetch"s);
|
||||
|
||||
// The order of these prefixes will be the loading order. Order of
|
||||
// specific modules within a prefix is not determined here.
|
||||
static const string_view prefixes[]
|
||||
{
|
||||
"s_", "m_", "key_", "media_", "client_", "federation_"
|
||||
};
|
||||
|
||||
// Load modules by prefix.
|
||||
for(const auto &prefix : prefixes)
|
||||
for(const auto &name : mods::available())
|
||||
if(startswith(name, prefix))
|
||||
this->emplace(name, name);
|
||||
|
||||
// Manually load last modules
|
||||
this->emplace("webroot"s, "webroot"s);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// m/error.h
|
||||
|
|
|
@ -1797,7 +1797,7 @@ const
|
|||
const m::room::origins::closure &,
|
||||
const m::room::origins::closure_bool &);
|
||||
|
||||
static m::import<prototype> random_origin
|
||||
thread_local mods::import<prototype> random_origin
|
||||
{
|
||||
"m_room", "random_origin"
|
||||
};
|
||||
|
|
|
@ -197,6 +197,15 @@ ircd::mods::loaded(const string_view &name)
|
|||
return mod::loaded.count(name);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// mods/import.h
|
||||
//
|
||||
|
||||
decltype(ircd::mods::imports)
|
||||
ircd::mods::imports
|
||||
{};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// mods/sym_ptr.h
|
||||
|
|
|
@ -508,6 +508,13 @@ catch(const json::error &e)
|
|||
http::BAD_REQUEST, "M_NOT_JSON", "%s", e.what()
|
||||
};
|
||||
}
|
||||
catch(const mods::unavailable &e)
|
||||
{
|
||||
throw m::UNAVAILABLE
|
||||
{
|
||||
"%s", e.what()
|
||||
};
|
||||
}
|
||||
catch(const std::out_of_range &e)
|
||||
{
|
||||
throw m::error
|
||||
|
|
|
@ -599,7 +599,7 @@ console_cmd__conf__set(opt &out, const string_view &line)
|
|||
const string_view &key,
|
||||
const string_view &val);
|
||||
|
||||
static m::import<prototype> set_conf_item
|
||||
thread_local mods::import<prototype> set_conf_item
|
||||
{
|
||||
"s_conf", "set_conf_item"
|
||||
};
|
||||
|
@ -649,7 +649,7 @@ bool
|
|||
console_cmd__conf__rehash(opt &out, const string_view &line)
|
||||
{
|
||||
using prototype = void (const bool &);
|
||||
static m::import<prototype> rehash_conf
|
||||
thread_local mods::import<prototype> rehash_conf
|
||||
{
|
||||
"s_conf", "rehash_conf"
|
||||
};
|
||||
|
@ -666,7 +666,7 @@ bool
|
|||
console_cmd__conf__reload(opt &out, const string_view &line)
|
||||
{
|
||||
using prototype = void ();
|
||||
static m::import<prototype> reload_conf
|
||||
thread_local mods::import<prototype> reload_conf
|
||||
{
|
||||
"s_conf", "reload_conf"
|
||||
};
|
||||
|
@ -683,7 +683,7 @@ bool
|
|||
console_cmd__conf__reset(opt &out, const string_view &line)
|
||||
{
|
||||
using prototype = void ();
|
||||
static m::import<prototype> refresh_conf
|
||||
thread_local mods::import<prototype> refresh_conf
|
||||
{
|
||||
"s_conf", "refresh_conf"
|
||||
};
|
||||
|
@ -794,7 +794,7 @@ console_cmd__mod__reload(opt &out, const string_view &line)
|
|||
for(auto it(names.begin()); it != names.end(); ++it)
|
||||
{
|
||||
const auto &name{*it};
|
||||
if(m::imports.erase(std::string{name}))
|
||||
if(mods::imports.erase(std::string{name}))
|
||||
out << name << " unloaded." << std::endl;
|
||||
else
|
||||
out << name << " is not loaded." << std::endl;
|
||||
|
@ -803,7 +803,7 @@ console_cmd__mod__reload(opt &out, const string_view &line)
|
|||
for(auto it(names.rbegin()); it != names.rend(); ++it)
|
||||
{
|
||||
const auto &name{*it};
|
||||
if(m::imports.emplace(std::string{name}, name).second)
|
||||
if(mods::imports.emplace(std::string{name}, name).second)
|
||||
out << name << " loaded." << std::endl;
|
||||
else
|
||||
out << name << " is already loaded." << std::endl;
|
||||
|
@ -818,13 +818,13 @@ console_cmd__mod__load(opt &out, const string_view &line)
|
|||
tokens(line, ' ', [&out]
|
||||
(const string_view &name)
|
||||
{
|
||||
if(m::imports.find(name) != end(m::imports))
|
||||
if(mods::imports.find(name) != end(mods::imports))
|
||||
{
|
||||
out << name << " is already loaded." << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
m::imports.emplace(std::string{name}, name);
|
||||
mods::imports.emplace(std::string{name}, name);
|
||||
out << name << " loaded." << std::endl;
|
||||
});
|
||||
|
||||
|
@ -837,7 +837,7 @@ console_cmd__mod__unload(opt &out, const string_view &line)
|
|||
tokens(line, ' ', [&out]
|
||||
(const string_view &name)
|
||||
{
|
||||
if(!m::imports.erase(std::string{name}))
|
||||
if(!mods::imports.erase(std::string{name}))
|
||||
{
|
||||
out << name << " is not loaded." << std::endl;
|
||||
return;
|
||||
|
@ -2745,7 +2745,7 @@ console_cmd__net__listen__list(opt &out, const string_view &line)
|
|||
{
|
||||
using list = std::list<net::listener>;
|
||||
|
||||
static m::import<list> listeners
|
||||
thread_local mods::import<list> listeners
|
||||
{
|
||||
"s_listen", "listeners"
|
||||
};
|
||||
|
@ -2803,7 +2803,7 @@ console_cmd__net__listen__load(opt &out, const string_view &line)
|
|||
{
|
||||
using prototype = bool (const string_view &);
|
||||
|
||||
static m::import<prototype> load_listener
|
||||
thread_local mods::import<prototype> load_listener
|
||||
{
|
||||
"s_listen", "load_listener"
|
||||
};
|
||||
|
@ -2826,7 +2826,7 @@ console_cmd__net__listen__unload(opt &out, const string_view &line)
|
|||
{
|
||||
using prototype = bool (const string_view &);
|
||||
|
||||
static m::import<prototype> unload_listener
|
||||
thread_local mods::import<prototype> unload_listener
|
||||
{
|
||||
"s_listen", "unload_listener"
|
||||
};
|
||||
|
@ -3007,7 +3007,7 @@ bool
|
|||
console_cmd__key__crt__sign(opt &out, const string_view &line)
|
||||
{
|
||||
using prototype = void (const m::event &);
|
||||
static m::import<prototype> create_my_key
|
||||
thread_local mods::import<prototype> create_my_key
|
||||
{
|
||||
"s_keys", "create_my_key"
|
||||
};
|
||||
|
@ -3168,7 +3168,7 @@ console_cmd__stage__make_prev(opt &out, const string_view &line)
|
|||
const mutable_buffer &,
|
||||
const size_t &,
|
||||
const bool &);
|
||||
static m::import<prototype> make_prev__buf
|
||||
thread_local mods::import<prototype> make_prev__buf
|
||||
{
|
||||
"m_room", "make_prev__buf"
|
||||
};
|
||||
|
@ -3216,7 +3216,7 @@ console_cmd__stage__make_auth(opt &out, const string_view &line)
|
|||
const vector_view<const string_view> &,
|
||||
const string_view &);
|
||||
|
||||
static m::import<prototype> make_auth__buf
|
||||
thread_local mods::import<prototype> make_auth__buf
|
||||
{
|
||||
"m_room", "make_auth__buf"
|
||||
};
|
||||
|
@ -3993,7 +3993,7 @@ console_cmd__event__fetch(opt &out, const string_view &line)
|
|||
const m::event::id &,
|
||||
const mutable_buffer &);
|
||||
|
||||
static m::import<prototype> acquire
|
||||
thread_local mods::import<prototype> acquire
|
||||
{
|
||||
"vm_fetch", "acquire"
|
||||
};
|
||||
|
@ -4523,7 +4523,7 @@ console_cmd__room__head__rebuild(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = size_t (const m::room &);
|
||||
static m::import<prototype> head__rebuild
|
||||
thread_local mods::import<prototype> head__rebuild
|
||||
{
|
||||
"m_room", "head__rebuild"
|
||||
};
|
||||
|
@ -4551,7 +4551,7 @@ console_cmd__room__head__add(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = void (const m::event::id &, const db::op &, const bool &);
|
||||
static m::import<prototype> head__modify
|
||||
thread_local mods::import<prototype> head__modify
|
||||
{
|
||||
"m_room", "head__modify"
|
||||
};
|
||||
|
@ -4575,7 +4575,7 @@ console_cmd__room__head__del(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = void (const m::event::id &, const db::op &, const bool &);
|
||||
static m::import<prototype> head__modify
|
||||
thread_local mods::import<prototype> head__modify
|
||||
{
|
||||
"m_room", "head__modify"
|
||||
};
|
||||
|
@ -4604,7 +4604,7 @@ console_cmd__room__herd(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = void (const m::room &, const m::user &, const milliseconds &);
|
||||
static m::import<prototype> room_herd
|
||||
thread_local mods::import<prototype> room_herd
|
||||
{
|
||||
"m_room", "room_herd"
|
||||
};
|
||||
|
@ -4633,7 +4633,7 @@ console_cmd__room__head__reset(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = size_t (const m::room &);
|
||||
static m::import<prototype> head__reset
|
||||
thread_local mods::import<prototype> head__reset
|
||||
{
|
||||
"m_room", "head__reset"
|
||||
};
|
||||
|
@ -4666,7 +4666,7 @@ console_cmd__room__complete(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = std::pair<bool, int64_t> (const m::room &);
|
||||
static m::import<prototype> is_complete
|
||||
thread_local mods::import<prototype> is_complete
|
||||
{
|
||||
"m_room", "is_complete"
|
||||
};
|
||||
|
@ -5141,7 +5141,7 @@ console_cmd__room__state__force(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = bool (const m::event &);
|
||||
static m::import<prototype> state__force_present
|
||||
thread_local mods::import<prototype> state__force_present
|
||||
{
|
||||
"m_room", "state__force_present"
|
||||
};
|
||||
|
@ -5174,7 +5174,7 @@ console_cmd__room__state__rebuild__present(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = size_t (const m::room &);
|
||||
static m::import<prototype> state__rebuild_present
|
||||
thread_local mods::import<prototype> state__rebuild_present
|
||||
{
|
||||
"m_room", "state__rebuild_present"
|
||||
};
|
||||
|
@ -5207,7 +5207,7 @@ console_cmd__room__state__rebuild__history(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = size_t (const m::room &);
|
||||
static m::import<prototype> state__rebuild_history
|
||||
thread_local mods::import<prototype> state__rebuild_history
|
||||
{
|
||||
"m_room", "state__rebuild_history"
|
||||
};
|
||||
|
@ -5731,7 +5731,7 @@ console_cmd__room__purge(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = size_t (const m::room &);
|
||||
static m::import<prototype> purge
|
||||
thread_local mods::import<prototype> purge
|
||||
{
|
||||
"m_room", "purge"
|
||||
};
|
||||
|
@ -5764,7 +5764,7 @@ console_cmd__room__dagree(opt &out, const string_view &line)
|
|||
};
|
||||
|
||||
using prototype = size_t (const m::room &, std::vector<size_t> &);
|
||||
static m::import<prototype> dagree_histogram
|
||||
thread_local mods::import<prototype> dagree_histogram
|
||||
{
|
||||
"m_room", "dagree_histogram"
|
||||
};
|
||||
|
@ -5824,7 +5824,7 @@ console_cmd__user__register(opt &out, const string_view &line)
|
|||
const client *const &,
|
||||
const bool &);
|
||||
|
||||
static m::import<prototype> register_user
|
||||
thread_local mods::import<prototype> register_user
|
||||
{
|
||||
"client_register", "register_user"
|
||||
};
|
||||
|
@ -6385,7 +6385,7 @@ console_cmd__feds__version(opt &out, const string_view &line)
|
|||
const milliseconds &,
|
||||
const std::function<closure_prototype> &);
|
||||
|
||||
static m::import<prototype> feds__version
|
||||
thread_local mods::import<prototype> feds__version
|
||||
{
|
||||
"federation_federation", "feds__version"
|
||||
};
|
||||
|
@ -6499,7 +6499,7 @@ console_cmd__feds__event(opt &out, const string_view &line)
|
|||
using prototype = void (const m::event::id &,
|
||||
std::ostream &);
|
||||
|
||||
static m::import<prototype> feds__event
|
||||
thread_local mods::import<prototype> feds__event
|
||||
{
|
||||
"federation_federation", "feds__event"
|
||||
};
|
||||
|
@ -6535,7 +6535,7 @@ console_cmd__feds__head(opt &out, const string_view &line)
|
|||
const milliseconds &,
|
||||
const std::function<closure_prototype> &);
|
||||
|
||||
static m::import<prototype> feds__head
|
||||
thread_local mods::import<prototype> feds__head
|
||||
{
|
||||
"federation_federation", "feds__head"
|
||||
};
|
||||
|
@ -6596,7 +6596,7 @@ console_cmd__feds__auth(opt &out, const string_view &line)
|
|||
const milliseconds &,
|
||||
const std::function<closure_prototype> &);
|
||||
|
||||
static m::import<prototype> feds__head
|
||||
thread_local mods::import<prototype> feds__head
|
||||
{
|
||||
"federation_federation", "feds__head"
|
||||
};
|
||||
|
@ -6656,7 +6656,7 @@ console_cmd__feds__heads(opt &out, const string_view &line)
|
|||
const milliseconds &,
|
||||
const std::function<closure_prototype> &);
|
||||
|
||||
static m::import<prototype> feds__head
|
||||
thread_local mods::import<prototype> feds__head
|
||||
{
|
||||
"federation_federation", "feds__head"
|
||||
};
|
||||
|
@ -6743,7 +6743,7 @@ console_cmd__feds__perspective(opt &out, const string_view &line)
|
|||
const milliseconds &,
|
||||
const std::function<closure_prototype> &);
|
||||
|
||||
static m::import<prototype> feds__perspective
|
||||
thread_local mods::import<prototype> feds__perspective
|
||||
{
|
||||
"federation_federation", "feds__perspective"
|
||||
};
|
||||
|
@ -6799,7 +6799,7 @@ console_cmd__feds__backfill(opt &out, const string_view &line)
|
|||
const size_t &,
|
||||
std::ostream &);
|
||||
|
||||
static m::import<prototype> feds__backfill
|
||||
thread_local mods::import<prototype> feds__backfill
|
||||
{
|
||||
"federation_federation", "feds__backfill"
|
||||
};
|
||||
|
@ -8067,7 +8067,7 @@ console_cmd__file__room(opt &out, const string_view &line)
|
|||
const string_view &server,
|
||||
const string_view &file);
|
||||
|
||||
static m::import<prototype> file_room_id
|
||||
thread_local mods::import<prototype> file_room_id
|
||||
{
|
||||
"media_media", "file_room_id"
|
||||
};
|
||||
|
@ -8115,7 +8115,7 @@ console_cmd__file__download(opt &out, const string_view &line)
|
|||
const m::user::id &,
|
||||
const net::hostport &remote);
|
||||
|
||||
static m::import<prototype> download
|
||||
thread_local mods::import<prototype> download
|
||||
{
|
||||
"media_media", "download"
|
||||
};
|
||||
|
|
|
@ -657,7 +657,7 @@ room_herd(const m::room &room,
|
|||
const milliseconds &,
|
||||
const std::function<closure_prototype> &);
|
||||
|
||||
static m::import<prototype> feds__head
|
||||
thread_local mods::import<prototype> feds__head
|
||||
{
|
||||
"federation_federation", "feds__head"
|
||||
};
|
||||
|
|
|
@ -88,7 +88,7 @@ _join_room_hookfn
|
|||
};
|
||||
|
||||
using invite_foreign_proto = m::event::id::buf (const m::event &);
|
||||
m::import<invite_foreign_proto>
|
||||
thread_local mods::import<invite_foreign_proto>
|
||||
invite__foreign
|
||||
{
|
||||
"client_rooms", "invite__foreign"
|
||||
|
|
|
@ -71,9 +71,9 @@ noexcept try
|
|||
};
|
||||
|
||||
using prototype = int (std::ostream &, const string_view &, const string_view &);
|
||||
const mods::import<prototype> command
|
||||
mods::import<prototype> command
|
||||
{
|
||||
*console_module, "console_command"
|
||||
console_module, "console_command"s
|
||||
};
|
||||
|
||||
std::ostringstream out;
|
||||
|
|
|
@ -148,7 +148,7 @@ ircd::m::vm::eval__commit_room(eval &eval,
|
|||
const mutable_buffer &,
|
||||
const size_t &,
|
||||
const bool &);
|
||||
static m::import<prev_prototype> make_prev__buf
|
||||
thread_local mods::import<prev_prototype> make_prev__buf
|
||||
{
|
||||
"m_room", "make_prev__buf"
|
||||
};
|
||||
|
@ -181,7 +181,7 @@ ircd::m::vm::eval__commit_room(eval &eval,
|
|||
const vector_view<const string_view> &,
|
||||
const string_view &);
|
||||
|
||||
static m::import<auth_prototype> make_auth__buf
|
||||
thread_local mods::import<auth_prototype> make_auth__buf
|
||||
{
|
||||
"m_room", "make_auth__buf"
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue