]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Remove <options:ircumsgprefix> entirely
[user/henk/code/inspircd.git] / include / modules.h
index 1fd1c7e004bd2d3897ea6a6156f8670fb5fb1602..93e5c05a0fd56f9f1c65da2877bab4239f440d08 100644 (file)
@@ -39,7 +39,6 @@
  */
 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
@@ -1036,9 +1035,6 @@ class CoreExport ModuleManager : public fakederef<ModuleManager>
                PRIO_STATE_LAST
        } prioritizationState;
 
-       /** Internal unload module hook */
-       bool CanUnload(Module*);
-
        /** Loads all core modules (cmd_*)
         */
        void LoadCoreModules(std::map<std::string, ServiceList>& servicemap);
@@ -1069,6 +1065,13 @@ class CoreExport ModuleManager : public fakederef<ModuleManager>
         */
        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();
@@ -1159,18 +1162,19 @@ class CoreExport ModuleManager : public fakederef<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
@@ -1209,6 +1213,17 @@ class CoreExport ModuleManager : public fakederef<ModuleManager>
         * @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