]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Added RemoveSocket as a test fix for merwins bug
[user/henk/code/inspircd.git] / include / modules.h
index f52c1653b4fa70eda9859065a88706043fc9460a..a7fc2e732505b4ee11dde1a2c7beb862e7a31901 100644 (file)
@@ -61,6 +61,7 @@
 #include <string>
 #include <deque>
 #include <sstream>
+#include <typeinfo>
 
 class Server;
 class ServerConfig;
@@ -79,7 +80,12 @@ typedef std::deque<userrec*> 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,15 +93,19 @@ typedef std::deque<userrec*> 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; \
+                               } \
                        } \
                } \
-       } 
+       } \
+ }
    
 // *********************************************************************************************
 
@@ -264,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
@@ -290,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
@@ -877,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
@@ -961,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.
@@ -1303,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.
@@ -1527,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);