X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules.h;h=93e5c05a0fd56f9f1c65da2877bab4239f440d08;hb=489ba0ad54bf6bdd80d5f539f67f03241ddfe77b;hp=41dec1194c4046a54e49462fea4e61f38b3597bb;hpb=8ff409cb9a393559ebda3990ab2926c9a42d87a1;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules.h b/include/modules.h index 41dec1194..93e5c05a0 100644 --- a/include/modules.h +++ b/include/modules.h @@ -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 @@ -222,7 +221,7 @@ enum Priority { PRIORITY_FIRST, PRIORITY_LAST, PRIORITY_BEFORE, PRIORITY_AFTER } enum Implementation { I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart, - I_OnSendSnotice, I_OnUserPreJoin, I_OnUserPreKick, I_OnUserKick, I_OnOper, I_OnInfo, I_OnWhois, + I_OnSendSnotice, I_OnUserPreJoin, I_OnUserPreKick, I_OnUserKick, I_OnOper, I_OnInfo, I_OnUserPreInvite, I_OnUserInvite, I_OnUserPreMessage, I_OnUserPreNick, I_OnUserMessage, I_OnMode, I_OnSyncUser, I_OnSyncChannel, I_OnDecodeMetaData, I_OnAcceptConnection, I_OnUserInit, @@ -234,7 +233,7 @@ enum Implementation I_OnPostTopicChange, I_OnPostConnect, I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete, I_OnPostOper, I_OnSyncNetwork, I_OnSetAway, I_OnPostCommand, I_OnPostJoin, - I_OnWhoisLine, I_OnBuildNeighborList, I_OnGarbageCollect, I_OnSetConnectClass, + I_OnBuildNeighborList, I_OnGarbageCollect, I_OnSetConnectClass, I_OnText, I_OnPassCompare, I_OnNamesListItem, I_OnNumeric, I_OnPreRehash, I_OnModuleRehash, I_OnSendWhoLine, I_OnChangeIdent, I_OnSetUserIP, I_END @@ -469,14 +468,6 @@ class CoreExport Module : public classbase, public usecountbase */ virtual void OnInfo(User* user); - /** Called whenever a /WHOIS is performed on a local user. - * The source parameter contains the details of the user who issued the WHOIS command, and - * the dest parameter contains the information of the user they are whoising. - * @param source The user issuing the WHOIS command - * @param dest The user who is being WHOISed - */ - virtual void OnWhois(User* source, User* dest); - /** Called whenever a user is about to invite another user into a channel, before any processing is done. * Returning 1 from this function stops the process immediately, causing no * output to be sent to the user by the core. If you do this you must produce your own numerics, @@ -962,19 +953,6 @@ class CoreExport Module : public classbase, public usecountbase */ virtual ModResult OnSetAway(User* user, const std::string &awaymsg); - /** Called whenever a line of WHOIS output is sent to a user. - * You may change the numeric and the text of the output by changing - * the values numeric and text, but you cannot change the user the - * numeric is sent to. You may however change the user's User values. - * @param user The user the numeric is being sent to - * @param dest The user being WHOISed - * @param numeric The numeric of the line being sent - * @param text The text of the numeric, including any parameters - * @return nonzero to drop the line completely so that the user does not - * receive it, or zero to allow the line to be sent. - */ - virtual ModResult OnWhoisLine(User* user, User* dest, int &numeric, std::string &text); - /** Called at intervals for modules to garbage-collect any hashes etc. * Certain data types such as hash_map 'leak' buckets, which must be * tidied up and freed by copying into a new item every so often. This @@ -1057,9 +1035,6 @@ class CoreExport ModuleManager : public fakederef PRIO_STATE_LAST } prioritizationState; - /** Internal unload module hook */ - bool CanUnload(Module*); - /** Loads all core modules (cmd_*) */ void LoadCoreModules(std::map& servicemap); @@ -1090,6 +1065,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(); @@ -1180,18 +1162,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 @@ -1230,6 +1213,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 @@ -1283,7 +1277,8 @@ struct AllModuleList { break; \ } \ return TRUE; \ - } + } \ + extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION " " INSPIRCD_REVISION; #else