]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Sort the module list to give a useful indicator of compile progress
[user/henk/code/inspircd.git] / include / modules.h
index 982d83754a12e7c9127a8c8d98699524e091ee1f..ff52cd600eba13df60f2e8bfa9d593152b439709 100644 (file)
@@ -30,6 +30,7 @@ class XLine;
 /** Used to define a set of behavior bits for a module
  */
 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_SERVICEPROVIDER = 4, // module provides a service to other modules (can be a dependency)
@@ -156,40 +157,16 @@ typedef std::map<std::string, std::pair<int, modulelist> > interfacelist;
        } \
 } while (0);
 
-/**
- * This #define allows us to call a method in all
- * loaded modules in a readable simple way and pass
- * an instance pointer to the macro. e.g.:
- * 'FOREACH_MOD_I(Instance, OnConnect, OnConnect(user));'
- */
-#define FOREACH_MOD_I(z,y,x) do { \
-       EventHandlerIter safei; \
-       for (EventHandlerIter _i = z->Modules->EventHandlers[y].begin(); _i != z->Modules->EventHandlers[y].end(); ) \
-       { \
-               safei = _i; \
-               ++safei; \
-               try \
-               { \
-                       (*_i)->x ; \
-               } \
-               catch (CoreException& modexcept) \
-               { \
-                       z->Logs->Log("MODULE",DEFAULT,"Exception caught: %s",modexcept.GetReason()); \
-               } \
-               _i = safei; \
-       } \
-} while (0);
-
 /**
  * Custom module result handling loop. This is a paired macro, and should only
  * be used with while_each_hook.
  *
  * See src/channels.cpp for an example of use.
  */
-#define DO_EACH_HOOK(z,n,v,args) \
+#define DO_EACH_HOOK(n,v,args) \
 do { \
-       EventHandlerIter iter_ ## n = z->Modules->EventHandlers[I_ ## n].begin(); \
-       while (iter_ ## n != z->Modules->EventHandlers[I_ ## n].end()) \
+       EventHandlerIter iter_ ## n = ServerInstance->Modules->EventHandlers[I_ ## n].begin(); \
+       while (iter_ ## n != ServerInstance->Modules->EventHandlers[I_ ## n].end()) \
        { \
                Module* mod_ ## n = *iter_ ## n; \
                iter_ ## n ++; \
@@ -197,11 +174,11 @@ do { \
                { \
                        v = (mod_ ## n)->n args;
 
-#define WHILE_EACH_HOOK(z,n) \
+#define WHILE_EACH_HOOK(n) \
                } \
                catch (CoreException& except_ ## n) \
                { \
-                       z->Logs->Log("MODULE",DEFAULT,"Exception caught: %s", (except_ ## n).GetReason()); \
+                       ServerInstance->Logs->Log("MODULE",DEFAULT,"Exception caught: %s", (except_ ## n).GetReason()); \
                        (void) mod_ ## n; /* catch mismatched pairs */ \
                } \
        } \
@@ -212,16 +189,16 @@ do { \
  * Runs the given hook until some module returns a useful result.
  *
  * Example: ModResult result;
- * FIRST_MOD_RESULT(ServerInstance, OnUserPreNick, result, (user, newnick))
+ * FIRST_MOD_RESULT(OnUserPreNick, result, (user, newnick))
  */
-#define FIRST_MOD_RESULT(z,n,v,args) do { \
+#define FIRST_MOD_RESULT(n,v,args) do { \
        v = MOD_RES_PASSTHRU; \
-       DO_EACH_HOOK(z,n,v,args) \
+       DO_EACH_HOOK(n,v,args) \
        { \
                if (v != MOD_RES_PASSTHRU) \
                        break; \
        } \
-       WHILE_EACH_HOOK(z,n); \
+       WHILE_EACH_HOOK(n); \
 } while (0)
 
 /** Represents a non-local user.
@@ -239,7 +216,7 @@ do { \
 /** Is a remote user */
 #define IS_REMOTE(x) (x->GetFd() < 0)
 /** Is a fake user */
-#define IS_FAKE(x) (x->GetFd() == FD_FAKEUSER_NUMBER)
+#define IS_SERVER(x) (x->GetFd() == FD_FAKEUSER_NUMBER)
 /** Is a module created user */
 #define IS_MODULE_CREATED(x) (x->GetFd() == FD_MAGIC_NUMBER)
 /** Is an oper */
@@ -257,6 +234,9 @@ do { \
 class CoreExport Version : public classbase
 {
  public:
+       /** Module description
+        */
+       const std::string description;
        /** Version information.
         */
        const std::string version;
@@ -267,7 +247,7 @@ class CoreExport Version : public classbase
 
        /** Initialize version class
         */
-       Version(const std::string &customver, int flags,
+       Version(const std::string &desc, int flags,
                int api_ver = API_VERSION, const std::string& src_rev = VERSION " r" REVISION);
 };
 
@@ -383,7 +363,7 @@ class CoreExport Event : public ModuleMessage
         * The return result of an Event::Send() will always be NULL as
         * no replies are expected.
         */
-       char* Send(InspIRCd* ServerInstance);
+       char* Send();
 };
 
 /** Priority types which can be returned from Module::Prioritize()
@@ -408,7 +388,7 @@ enum Implementation
        I_OnPostTopicChange, I_OnEvent, I_OnRequest, I_OnGlobalOper, I_OnPostConnect, I_OnAddBan,
        I_OnDelBan, I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete,
        I_OnPostOper, I_OnSyncNetwork, I_OnSetAway, I_OnUserList, I_OnPostCommand, I_OnPostJoin,
-       I_OnWhoisLine, I_OnBuildExemptList, I_OnGarbageCollect, I_OnBufferFlushed,
+       I_OnWhoisLine, I_OnBuildExemptList, I_OnGarbageCollect,
        I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookIO,
        I_OnHostCycle, I_OnPreRehash, I_OnModuleRehash, I_OnSendWhoLine, I_OnChangeIdent,
        I_END
@@ -433,7 +413,7 @@ class CoreExport Module : public Extensible
         * @param Me An instance of the InspIRCd class which will be saved into ServerInstance for your use
         * \exception ModuleException Throwing this class, or any class derived from ModuleException, causes loading of the module to abort.
         */
-       Module(InspIRCd* Me = ServerInstance);
+       Module();
 
        /** Default destructor.
         * destroys a module class
@@ -448,7 +428,7 @@ class CoreExport Module : public Extensible
         * The method should return a Version object with its version information assigned via
         * Version::Version
         */
-       virtual Version GetVersion();
+       virtual Version GetVersion() = 0;
 
        /** Called when a user connects.
         * The details of the connecting user are available to you in the parameter User *user
@@ -1325,15 +1305,6 @@ class CoreExport Module : public Extensible
         */
        virtual void OnGarbageCollect();
 
-       /** Called whenever a user's write buffer has been completely sent.
-        * This is called when the user's write buffer is completely empty, and
-        * there are no more pending bytes to be written and no pending write events
-        * in the socket engine's queue. This may be used to refill the buffer with
-        * data which is being spooled in a controlled manner, e.g. LIST lines.
-        * @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.
         */
@@ -1388,7 +1359,7 @@ class CoreExport ConfigReader : public classbase
         * This constructor initialises the ConfigReader class to read the inspircd.conf file
         * as specified when running ./configure.
         */
-       ConfigReader(InspIRCd* Instance = ServerInstance);
+       ConfigReader();
        /** Default destructor.
         * This method destroys the ConfigReader class.
         */
@@ -1487,14 +1458,14 @@ class CoreExport FileReader : public classbase
         * This method does not load any file into memory, you must use the LoadFile method
         * after constructing the class this way.
         */
-       FileReader(InspIRCd* Instance = ServerInstance);
+       FileReader();
 
        /** Secondary constructor.
         * This method initialises the class with a file loaded into it ready for GetLine and
         * and other methods to be called. If the file could not be loaded, FileReader::FileSize
         * returns 0.
         */
-       FileReader(InspIRCd* Instance, const std::string &filename);
+       FileReader(const std::string &filename);
 
        /** Default destructor.
         * This deletes the memory allocated to the file.
@@ -1823,9 +1794,9 @@ class CoreExport ModuleManager : public classbase
 #ifdef WINDOWS
 
 #define MODULE_INIT(y) \
-       extern "C" DllExport Module * init_module(InspIRCd* Me) \
+       extern "C" DllExport Module * init_module() \
        { \
-               return new y(Me); \
+               return new y; \
        } \
        BOOLEAN WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved) \
        { \
@@ -1841,9 +1812,9 @@ class CoreExport ModuleManager : public classbase
 #else
 
 #define MODULE_INIT(y) \
-       extern "C" DllExport Module * init_module(InspIRCd* Me) \
+       extern "C" DllExport Module * init_module() \
        { \
-               return new y(Me); \
+               return new y; \
        }
 #endif