X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules.h;h=ef2e4b0e46cbd8981e5d7ea2b34bac1d100e0d51;hb=8c2d96013084de950e3a63be4ae6ed626c4093ab;hp=1cb3d36c500a05c2972a3fbe269b833d0595de26;hpb=20bea3078d67a090ebcca64bf3cdbd7e6ab6adb6;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules.h b/include/modules.h index 1cb3d36c5..ef2e4b0e4 100644 --- a/include/modules.h +++ b/include/modules.h @@ -135,7 +135,7 @@ typedef std::map > interfacelist; } \ catch (CoreException& modexcept) \ { \ - ServerInstance->Log(DEFAULT,"Exception caught: %s",modexcept.GetReason()); \ + ServerInstance->Logs->Log("MODULE",DEFAULT,"Exception caught: %s",modexcept.GetReason()); \ } \ _i = safei; \ } \ @@ -159,7 +159,7 @@ typedef std::map > interfacelist; } \ catch (CoreException& modexcept) \ { \ - z->Log(DEFAULT,"Exception caught: %s",modexcept.GetReason()); \ + z->Logs->Log("MODULE",DEFAULT,"Exception caught: %s",modexcept.GetReason()); \ } \ _i = safei; \ } \ @@ -188,7 +188,7 @@ do { \ } \ catch (CoreException& modexcept) \ { \ - ServerInstance->Log(DEFAULT,"Exception caught: %s",modexcept.GetReason()); \ + ServerInstance->Logs->Log("MODULE",DEFAULT,"Exception caught: %s",modexcept.GetReason()); \ } \ _i = safei; \ } \ @@ -218,7 +218,7 @@ do { \ } \ catch (CoreException& modexcept) \ { \ - z->Log(DEBUG,"Exception caught: %s",modexcept.GetReason()); \ + z->Logs->Log("MODULE",DEBUG,"Exception caught: %s",modexcept.GetReason()); \ } \ _i = safei; \ } \ @@ -230,13 +230,9 @@ do { \ #define FD_MAGIC_NUMBER -42 /* Useful macros */ -#ifdef WINDOWS + /** Is a local user */ #define IS_LOCAL(x) ((x->GetFd() > -1)) -#else -/** Is a local user */ -#define IS_LOCAL(x) ((x->GetFd() > -1) && (x->GetFd() <= MAX_DESCRIPTORS)) -#endif /** Is a remote user */ #define IS_REMOTE(x) (x->GetFd() < 0) /** Is a module created user */ @@ -335,7 +331,7 @@ class CoreExport Request : public ModuleMessage * sent the request to. It is up to your module to know what this data is and * how to deal with it. */ - char* Send(); + const char* Send(); }; @@ -399,9 +395,9 @@ enum Implementation I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, I_OnLocalTopicChange, I_OnPostLocalTopicChange, I_OnEvent, I_OnRequest, I_OnGlobalOper, I_OnPostConnect, I_OnAddBan, I_OnDelBan, I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister, - I_OnChannelPreDelete, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnCancelAway, I_OnUserList, + I_OnChannelPreDelete, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnUserList, I_OnPostCommand, I_OnPostJoin, I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect, I_OnBufferFlushed, - I_OnText, I_OnReadConfig, I_OnDownloadFile, I_OnPassCompare, + I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookUserIO, I_END }; @@ -436,10 +432,6 @@ class CoreExport Module : public Extensible { } - virtual void OnReadConfig(ServerConfig* config, ConfigReader* coreconf); - - virtual int OnDownloadFile(const std::string &filename, std::istream* &filedata); - /** Returns the version number of a Module. * The method should return a Version object with its version information assigned via * Version::Version @@ -553,9 +545,10 @@ class CoreExport Module : public Extensible * @param cname The channel name being joined. For new channels this is valid where chan is not. * @param privs A string containing the users privilages when joining the channel. For new channels this will contain "@". * You may alter this string to alter the user's modes on the channel. + * @param keygiven The key given to join the channel, or an empty string if none was provided * @return 1 To prevent the join, 0 to allow it. */ - virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs); + virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven); /** Called whenever a user is about to be kicked. * Returning a value of 1 from this function stops the process immediately, causing no @@ -626,9 +619,10 @@ class CoreExport Module : public Extensible * @param source The user who is issuing the INVITE * @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) * @return 1 to deny the invite, 0 to allow */ - virtual int OnUserPreInvite(User* source,User* dest,Channel* channel); + virtual int OnUserPreInvite(User* source,User* dest,Channel* channel, time_t timeout); /** Called after a user has been successfully invited to a channel. * You cannot prevent the invite from occuring using this function, to do that, @@ -636,8 +630,9 @@ class CoreExport Module : public Extensible * @param source The user who is issuing the INVITE * @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) */ - virtual void OnUserInvite(User* source,User* dest,Channel* channel); + virtual void OnUserInvite(User* source,User* dest,Channel* channel, time_t timeout); /** 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 @@ -1042,7 +1037,7 @@ class CoreExport Module : public Extensible * @param original_line The entire original line as passed to the parser from the user * @return 1 to block the command, 0 to allow */ - virtual int OnPreCommand(const std::string &command, const char** parameters, int pcnt, User *user, bool validated, const std::string &original_line); + virtual int OnPreCommand(const std::string &command, const char* const* parameters, int pcnt, User *user, bool validated, const std::string &original_line); /** Called after any command has been executed. * This event occurs for all registered commands, wether they are registered in the core, @@ -1056,7 +1051,7 @@ class CoreExport Module : public Extensible * @param result The return code given by the command handler, one of CMD_SUCCESS or CMD_FAILURE * @param original_line The entire original line as passed to the parser from the user */ - virtual void OnPostCommand(const std::string &command, const char** parameters, int pcnt, User *user, CmdResult result, const std::string &original_line); + virtual void OnPostCommand(const std::string &command, const char* const* parameters, int pcnt, User *user, CmdResult result, const std::string &original_line); /** Called to check if a user who is connecting can now be allowed to register * If any modules return false for this function, the user is held in the waiting @@ -1099,9 +1094,11 @@ class CoreExport Module : public Extensible * @param param The parameter for the mode or an empty string * @param adding true of the mode is being added, false if it is being removed * @param pcnt The parameter count for the mode (0 or 1) - * @return 1 to deny the mode, 0 to allow + * @return ACR_DENY to deny the mode, ACR_DEFAULT to do standard mode checking, and ACR_ALLOW + * to skip all permission checking. Please note that for remote mode changes, your return value + * will be ignored! */ - virtual int OnRawMode(User* user, Channel* chan, const char mode, const std::string ¶m, bool adding, int pcnt); + virtual int OnRawMode(User* user, Channel* chan, const char mode, const std::string ¶m, bool adding, int pcnt, bool servermode = true); /** Called whenever a user joins a channel, to determine if key checks should go ahead or not. * This method will always be called for each join, wether or not the channel is actually +k, and @@ -1130,7 +1127,8 @@ class CoreExport Module : public Extensible * return 1 to explicitly allow the join to go ahead or 0 to ignore the event. * @param user The user joining the channel * @param chan The channel being joined - * @return 1 to explicitly allow the join, 0 to proceed as normal + * @return 1 to explicitly allow the join, 0 to proceed as normal. Return -1 to explicitly deny the + * join to the channel. */ virtual int OnCheckBan(User* user, Channel* chan); @@ -1193,7 +1191,7 @@ class CoreExport Module : public Extensible * may be able to use for pre-determined purposes (e.g. the results of an SQL query, etc). * @param request The Request class being received */ - virtual char* OnRequest(Request* request); + virtual const char* OnRequest(Request* request); /** Called whenever a password check is to be made. Replaces the old OldOperCompare API. * The password field (from the config file) is in 'password' and is to be compared against @@ -1241,6 +1239,8 @@ class CoreExport Module : public Extensible */ virtual int OnDelBan(User* source, Channel* channel,const std::string &banmask); + virtual void OnHookUserIO(User* user, const std::string &targetip); + /** Called immediately after any connection is accepted. This is intended for raw socket * processing (e.g. modules which wrap the tcp connection within another library) and provides * no information relating to a user record as the connection has not been assigned yet. @@ -1293,17 +1293,15 @@ class CoreExport Module : public Extensible */ virtual int OnRawSocketRead(int fd, char* buffer, unsigned int count, int &readresult); - /** Called whenever a user sets away. - * This method has no parameter for the away message, as it is available in the - * user record as User::awaymsg. + /** Called whenever a user sets away or returns from being away. + * The away message is available as a parameter, but should not be modified. + * At this stage, it has already been copied into the user record. + * If awaymsg is empty, the user is returning from away. * @param user The user setting away + * @param awaymsg The away message of the user, or empty if returning from away + * @return nonzero if the away message should be blocked - should ONLY be nonzero for LOCAL users (IS_LOCAL) (no output is returned by core) */ - virtual void OnSetAway(User* user); - - /** Called when a user cancels their away state. - * @param user The user returning from away - */ - virtual void OnCancelAway(User* user); + virtual int OnSetAway(User* user, const std::string &awaymsg); /** Called whenever a NAMES list is requested. * You can produce the nameslist yourself, overriding the current list, @@ -1348,6 +1346,19 @@ class CoreExport Module : public Extensible * @param user The user who's buffer is now empty. */ virtual void OnBufferFlushed(User* user); + + /** Add test suite hooks here. These are used for testing functionality of a module + * via the --testsuite debugging parameter. + */ + virtual void OnRunTestSuite(); + + /** Called for every item in a NAMES list, so that modules may reformat portions of it as they see fit. + * For example NAMESX, channel mode +u and +I, and UHNAMES. If the nick is set to an empty string by any + * module, then this will cause the nickname not to be displayed at all. + */ + virtual void OnNamesListItem(User* issuer, User* user, Channel* channel, std::string &prefixes, std::string &nick); + + virtual int OnNumeric(User* user, unsigned int numeric, const std::string &text); }; @@ -1824,6 +1835,14 @@ class CoreExport ModuleManager : public classbase */ modulelist* FindInterface(const std::string &InterfaceName); + /** Determine if a module has published the named interface. + * This could be used in, for example, OnLoadModule to pick up other modules that can be used. + * @param mod The module to check. + * @param InterfaceName the interface you want to check for + * @return True if the module provides the interface, false otherwise. + */ + bool ModuleHasInterface(Module* mod, const std::string& InterfaceName); + /** Given a pointer to a Module, return its filename * @param m The module pointer to identify * @return The module name or an empty string @@ -1843,10 +1862,31 @@ class CoreExport ModuleManager : public classbase * and functions needed to make a module loadable by the OS. * It defines the class factory and external init_module function. */ +#ifdef WINDOWS + #define MODULE_INIT(y) \ extern "C" DllExport Module * init_module(InspIRCd* Me) \ { \ return new y(Me); \ + } \ + BOOLEAN WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved) \ + { \ + switch ( nReason ) \ + { \ + case DLL_PROCESS_ATTACH: \ + case DLL_PROCESS_DETACH: \ + break; \ + } \ + return TRUE; \ } +#else + +#define MODULE_INIT(y) \ + extern "C" DllExport Module * init_module(InspIRCd* Me) \ + { \ + return new y(Me); \ + } +#endif + #endif