*/
enum ModuleFlags {
VF_NONE = 0, // module is not special at all
- VF_STATIC = 1, // module is static, cannot be /unloadmodule'd
VF_VENDOR = 2, // module is a vendor module (came in the original tarball, not 3rd party)
VF_COMMON = 4, // module needs to be common on all servers in a network to link
VF_OPTCOMMON = 8, // module should be common on all servers for unsurprising behavior
PRIO_STATE_LAST
} prioritizationState;
- /** Internal unload module hook */
- bool CanUnload(Module*);
-
/** Loads all core modules (cmd_*)
*/
void LoadCoreModules(std::map<std::string, ServiceList>& servicemap);
*/
ServiceList* NewServices;
+ /** Expands the name of a module by prepending "m_" and appending ".so".
+ * No-op if the name already has the ".so" extension.
+ * @param modname Module name to expand
+ * @return Module name starting with "m_" and ending with ".so"
+ */
+ static std::string ExpandModName(const std::string& modname);
+
/** Simple, bog-standard, boring constructor.
*/
ModuleManager();
*/
bool Unload(Module* module);
- /** Run an asynchronous reload of the given module. When the reload is
- * complete, the callback will be run with true if the reload succeeded
- * and false if it did not.
- */
- void Reload(Module* module, HandlerBase1<void, bool>* callback);
-
/** Called by the InspIRCd constructor to load all modules from the config file.
*/
void LoadAll();
void UnloadAll();
void DoSafeUnload(Module*);
+ /** Check if a module can be unloaded and if yes, prepare it for unload
+ * @param mod Module to be unloaded
+ * @return True if the module is unloadable, false otherwise.
+ * If true the module must be unloaded in the current main loop iteration.
+ */
+ bool CanUnload(Module* mod);
+
/** Find a module by name, and return a Module* to it.
* This is preferred over iterating the module lists yourself.
* @param name The module name to look up
* @return A ModuleMap containing all loaded modules
*/
const ModuleMap& GetModules() const { return Modules; }
+
+ /** Make a service referenceable by dynamic_references
+ * @param name Name that will be used by dynamic_references to find the object
+ * @param service Service to make referenceable by dynamic_references
+ */
+ void AddReferent(const std::string& name, ServiceProvider* service);
+
+ /** Make a service no longer referenceable by dynamic_references
+ * @param service Service to make no longer referenceable by dynamic_references
+ */
+ void DelReferent(ServiceProvider* service);
};
/** Do not mess with these functions unless you know the C preprocessor