X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules.h;h=3ad0258b8455a56bce58dd63189c602353335823;hb=c5d9b2d6c14414b8933c2e7f60995ca7b01a2d05;hp=7944aa609cdc8d631066297e43c1e3d39f2ad61b;hpb=7bb75e575b5f6a555a0651057c0cb5b30f93a9d9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules.h b/include/modules.h index 7944aa609..3ad0258b8 100644 --- a/include/modules.h +++ b/include/modules.h @@ -201,8 +201,6 @@ class CoreExport Version /** Complex version information, including linking compatability data */ Version(const std::string &desc, int flags, const std::string& linkdata); - - virtual ~Version() {} }; class CoreExport DataProvider : public ServiceProvider @@ -278,7 +276,7 @@ class CoreExport Module : public classbase, public usecountbase /** Clean up prior to destruction * If you override, you must call this AFTER your module's cleanup */ - virtual CullResult cull(); + virtual CullResult cull() CXX11_OVERRIDE; /** Default destructor. * destroys a module class @@ -487,8 +485,10 @@ class CoreExport Module : public classbase, public usecountbase * @param dest The user being invited * @param channel The channel the user is being invited to * @param timeout The time the invite will expire (0 == never) + * @param notifyrank Rank required to get an invite announcement (if enabled) + * @param notifyexcepts List of users to not send the default NOTICE invite announcement to */ - virtual void OnUserInvite(User* source,User* dest,Channel* channel, time_t timeout); + virtual void OnUserInvite(User* source, User* dest, Channel* channel, time_t timeout, unsigned int notifyrank, CUList& notifyexcepts); /** Called whenever a user is about to PRIVMSG A user or a channel, before any processing is done. * Returning any nonzero value from this function stops the process immediately, causing no @@ -871,14 +871,10 @@ class CoreExport Module : public classbase, public usecountbase /** Called on all /STATS commands * This method is triggered for all /STATS use, including stats symbols handled by the core. - * @param symbol the symbol provided to /STATS - * @param user the user issuing the /STATS command - * @param results A string_list to append results into. You should put all your results - * into this string_list, rather than displaying them directly, so that your handler will - * work when remote STATS queries are received. + * @param stats Context of the /STATS request, contains requesting user, list of answer rows etc. * @return 1 to block the /STATS from being processed by the core, 0 to allow it */ - virtual ModResult OnStats(char symbol, User* user, string_list &results); + virtual ModResult OnStats(Stats::Context& stats); /** Called whenever a change of a local users displayed host is attempted. * Return 1 to deny the host change, or 0 to allow it. @@ -985,16 +981,17 @@ class CoreExport Module : public classbase, public usecountbase */ virtual ModResult OnNamesListItem(User* issuer, Membership* item, std::string& prefixes, std::string& nick); - virtual ModResult OnNumeric(User* user, unsigned int numeric, const std::string &text); + virtual ModResult OnNumeric(User* user, const Numeric::Numeric& numeric); /** Called whenever a result from /WHO is about to be returned * @param source The user running the /WHO query * @param params The parameters to the /WHO query * @param user The user that this line of the query is about * @param memb The member shown in this line, NULL if no channel is in this line - * @param line The raw line to send; modifiable, if empty no line will be returned. + * @param numeric Numeric to send; modifiable. + * @return MOD_RES_PASSTHRU to allow the line to be displayed, MOD_RES_DENY to hide it */ - virtual void OnSendWhoLine(User* source, const std::vector& params, User* user, Membership* memb, std::string& line); + virtual ModResult OnSendWhoLine(User* source, const std::vector& params, User* user, Membership* memb, Numeric::Numeric& numeric); /** Called whenever a local user's IP is set for the first time, or when a local user's IP changes due to * a module like m_cgiirc changing it. @@ -1007,10 +1004,6 @@ class CoreExport Module : public classbase, public usecountbase */ typedef std::vector IntModuleList; -/** An event handler iterator - */ -typedef IntModuleList::iterator EventHandlerIter; - /** ModuleManager takes care of all things module-related * in the core. */ @@ -1035,10 +1028,7 @@ class CoreExport ModuleManager : public fakederef PRIO_STATE_LAST } prioritizationState; - /** Internal unload module hook */ - bool CanUnload(Module*); - - /** Loads all core modules (cmd_*) + /** Loads all core modules (core_*) */ void LoadCoreModules(std::map& servicemap); @@ -1047,12 +1037,11 @@ class CoreExport ModuleManager : public fakederef */ bool PrioritizeHooks(); - /** 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" + /** Unregister all user modes or all channel modes owned by a module + * @param mod Module whose modes to unregister + * @param modetype MODETYPE_USER to unregister user modes, MODETYPE_CHANNEL to unregister channel modes */ - static std::string ExpandModName(const std::string& modname); + void UnregisterModes(Module* mod, ModeType modetype); public: typedef std::map ModuleMap; @@ -1075,6 +1064,13 @@ class CoreExport ModuleManager : public fakederef */ 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(); @@ -1165,18 +1161,19 @@ class CoreExport ModuleManager : public fakederef */ 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* 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 @@ -1215,6 +1212,17 @@ class CoreExport ModuleManager : public fakederef * @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 @@ -1227,7 +1235,7 @@ class CoreExport ModuleManager : public fakederef #define MODULE_INIT_SYM_FN_2(x,y) MODULE_INIT_SYM_FN_1(x,y) #define MODULE_INIT_SYM_FN_1(x,y) inspircd_module_ ## x ## _ ## y -#ifdef PURE_STATIC +#ifdef INSPIRCD_STATIC struct AllCommandList { typedef Command* (*fn)(Module*); @@ -1269,7 +1277,7 @@ struct AllModuleList { } \ return TRUE; \ } \ - extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION " " INSPIRCD_REVISION; + extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION; #else @@ -1278,7 +1286,7 @@ struct AllModuleList { { \ return new y; \ } \ - extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION " " INSPIRCD_REVISION; + extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION; #endif #define COMMAND_INIT(c) MODULE_INIT(CommandModule)