X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules.h;h=a7fc2e732505b4ee11dde1a2c7beb862e7a31901;hb=2a81a5a0026396e7c476f648a25016443e002d85;hp=b86576296373d99b2370a4291058f48f4a59a903;hpb=064d18536159e5f907f8ccfd1147281c8ec93bc4;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules.h b/include/modules.h index b86576296..a7fc2e732 100644 --- a/include/modules.h +++ b/include/modules.h @@ -61,6 +61,7 @@ #include #include #include +#include class Server; class ServerConfig; @@ -79,7 +80,12 @@ typedef std::deque chanuserlist; // loaded modules in a readable simple way, e.g.: // 'FOREACH_MOD OnConnect(user);' -#define FOREACH_MOD for (int _i = 0; _i <= MODCOUNT; _i++) modules[_i]-> +#define FOREACH_MOD(y,x) if (Config->global_implementation[y] > 0) { \ + for (int _i = 0; _i <= MODCOUNT; _i++) { \ + if (Config->implement_lists[_i][y]) \ + modules[_i]->x ; \ + } \ + } // This define is similar to the one above but returns a result in MOD_RESULT. // The first module to return a nonzero result is the value to be accepted, @@ -87,20 +93,41 @@ typedef std::deque chanuserlist; // ********************************************************************************************* -#define FOREACH_RESULT(x) { MOD_RESULT = 0; \ +#define FOREACH_RESULT(y,x) { if (Config->global_implementation[y] > 0) { \ + MOD_RESULT = 0; \ for (int _i = 0; _i <= MODCOUNT; _i++) { \ - int res = modules[_i]->x ; \ - if (res != 0) { \ - MOD_RESULT = res; \ - break; \ + if (Config->implement_lists[_i][y]) {\ + int res = modules[_i]->x ; \ + if (res != 0) { \ + MOD_RESULT = res; \ + break; \ + } \ } \ } \ - } + } \ + } // ********************************************************************************************* #define FD_MAGIC_NUMBER -42 +// useful macros + +#define IS_LOCAL(x) (x->fd > -1) +#define IS_REMOTE(x) (x->fd < 0) +#define IS_MODULE_CREATED(x) (x->fd == FD_MAGIC_NUMBER) + +// flags for use with WriteMode + +#define WM_AND 1 +#define WM_OR 2 + +// flags for use with OnUserPreMessage and OnUserPreNotice + +#define TYPE_USER 1 +#define TYPE_CHANNEL 2 +#define TYPE_SERVER 3 + /*extern void createcommand(char* cmd, handlerfunc f, char flags, int minparams, char* source); extern void server_mode(char **parameters, int pcnt, userrec *user);*/ @@ -247,6 +274,21 @@ class ExtMode : public classbase }; +enum Priority { PRIORITY_FIRST, PRIORITY_DONTCARE, PRIORITY_LAST }; + +enum Implementation { I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart, I_OnRehash, I_OnServerRaw, + I_OnExtendedMode, I_OnUserPreJoin, I_OnUserPreKick, I_OnUserKick, I_OnOper, I_OnInfo, I_OnWhois, I_OnUserPreInvite, + I_OnUserInvite, I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserPreNick, I_OnUserMessage, I_OnUserNotice, I_OnMode, + I_OnGetServerDescription, I_OnSyncUser, I_OnSyncChannel, I_OnSyncChannelMetaData, I_OnSyncUserMetaData, + I_OnDecodeMetaData, I_ProtoSendMode, I_ProtoSendMetaData, I_OnWallops, I_OnChangeHost, I_OnChangeName, I_OnAddGLine, + I_OnAddZLine, I_OnAddQLine, I_OnAddKLine, I_OnAddELine, I_OnDelGLine, I_OnDelZLine, I_OnDelKLine, I_OnDelELine, I_OnDelQLine, + I_OnCleanup, I_OnUserPostNick, I_OnAccessCheck, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule, I_OnUnloadModule, + I_OnBackgroundTimer, I_OnSendList, I_OnPreCommand, I_OnCheckReady, I_OnUserRrgister, I_OnRawMode, I_OnCheckInvite, + I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, I_OnLocalTopicChange, + I_OnPostLocalTopicChange, I_OnEvent, I_OnRequest, I_OnOperCompre, I_OnGlobalOper, I_OnGlobalConnect, I_OnAddBan, I_OnDelBan, + I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister, + I_OnOperCompare }; + /** Base class for all InspIRCd modules * This class is the base class for InspIRCd modules. All modules must inherit from this class, * its methods will be called when irc server events occur. class inherited from module must be @@ -273,6 +315,10 @@ class Module : public classbase */ virtual Version GetVersion(); + virtual void Implements(char* Implements); + + virtual Priority Prioritize(); + /** Called when a user connects. * The details of the connecting user are available to you in the parameter userrec *user * @param user The user who is connecting @@ -860,9 +906,10 @@ class Module : public classbase * @param parameters An array of array of characters containing the parameters for the command * @param pcnt The nuimber of parameters passed to the command * @param user the user issuing the command + * @param validated True if the command has passed all checks, e.g. it is recognised, has enough parameters, the user has permission to execute it, etc. * @return 1 to block the command, 0 to allow */ - virtual int OnPreCommand(std::string command, char **parameters, int pcnt, userrec *user); + virtual int OnPreCommand(std::string command, char **parameters, int pcnt, userrec *user, bool validated); /** 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 @@ -944,8 +991,10 @@ class Module : public classbase /** 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 + * @user the user issuing the /STATS command + * @return 1 to block the /STATS from being processed by the core, 0 to allow it */ - virtual void OnStats(char symbol); + virtual int OnStats(char symbol, userrec* user); /** Called whenever a change of a local users displayed host is attempted. * Return 1 to deny the host change, or 0 to allow it. @@ -1286,7 +1335,7 @@ class Server : public classbase * extension) e.g. "m_blarp.so". If you place the wrong identifier here, you can cause crashes if your module * is unloaded. */ - virtual void AddCommand(char* cmd, handlerfunc f, char flags, int minparams, char* source); + virtual void AddCommand(command_t *f); /** Sends a servermode. * you must format the parameters array with the target, modes and parameters for those modes. @@ -1510,6 +1559,10 @@ class Server : public classbase */ virtual void AddSocket(InspSocket* sock); + /** Forcibly removes a class derived from InspSocket from the servers socket engine. + */ + virtual void RemoveSocket(InspSocket* sock); + /** Deletes a class derived from InspSocket from the server's socket engine. */ virtual void DelSocket(InspSocket* sock);