/** 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
* @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
/** 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.
*/
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.
+ * @param 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<std::string>& params, User* user, Membership* memb, std::string& line);
+ virtual ModResult OnSendWhoLine(User* source, const std::vector<std::string>& 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.
*/
typedef std::vector<Module*> IntModuleList;
-/** An event handler iterator
- */
-typedef IntModuleList::iterator EventHandlerIter;
-
/** ModuleManager takes care of all things module-related
* in the core.
*/
PRIO_STATE_LAST
} prioritizationState;
- /** Internal unload module hook */
- bool CanUnload(Module*);
-
/** Loads all core modules (cmd_*)
*/
void LoadCoreModules(std::map<std::string, ServiceList>& servicemap);
*/
bool PrioritizeHooks();
+ /** 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
+ */
+ void UnregisterModes(Module* mod, ModeType modetype);
+
public:
typedef std::map<std::string, Module*> ModuleMap;
*/
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
#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*);
} \
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
{ \
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<c>)