]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Now supports multiple commands seperated with \n. NOTE: These \n's are translated...
[user/henk/code/inspircd.git] / include / modules.h
index 6142af17a95b6d13f9a2b4de33398cb24a85a181..95dbd764ee20c1e3815a4930a5fbe9961acb659d 100644 (file)
@@ -64,7 +64,6 @@ enum TargetTypeFlags {
 #include <string>
 #include <deque>
 #include <sstream>
-#include <typeinfo>
 #include "timer.h"
 #include "mode.h"
 #include "dns.h"
@@ -97,7 +96,7 @@ typedef std::map<std::string,Module*> featurelist;
                } \
                catch (ModuleException& modexcept) \
                { \
-                       log(DEBUG,"Module exception caught: %s",modexcept.GetReason()); \
+                       ServerInstance->Log(DEBUG,"Module exception caught: %s",modexcept.GetReason()); \
                } \
        } \
   }
@@ -111,7 +110,7 @@ typedef std::map<std::string,Module*> featurelist;
                } \
                catch (ModuleException& modexcept) \
                { \
-                       ilog(z,DEBUG,"Module exception caught: %s",modexcept.GetReason()); \
+                       z->Log(DEBUG,"Module exception caught: %s",modexcept.GetReason()); \
                } \
        } \
 }
@@ -134,7 +133,7 @@ typedef std::map<std::string,Module*> featurelist;
                                } \
                                catch (ModuleException& modexcept) \
                                { \
-                                       log(DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
+                                       ServerInstance->Log(DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
                                } \
                        } \
                } \
@@ -155,7 +154,7 @@ typedef std::map<std::string,Module*> featurelist;
                                } \
                                catch (ModuleException& modexcept) \
                                { \
-                                       ilog(z,DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
+                                       z->Log(DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
                                } \
                        } \
                } \
@@ -166,9 +165,9 @@ typedef std::map<std::string,Module*> featurelist;
 
 // useful macros
 
-#define IS_LOCAL(x) ((x->fd > -1) && (x->fd <= MAX_DESCRIPTORS))
-#define IS_REMOTE(x) (x->fd < 0)
-#define IS_MODULE_CREATED(x) (x->fd == FD_MAGIC_NUMBER)
+#define IS_LOCAL(x) ((x->GetFd() > -1) && (x->GetFd() <= MAX_DESCRIPTORS))
+#define IS_REMOTE(x) (x->GetFd() < 0)
+#define IS_MODULE_CREATED(x) (x->GetFd() == FD_MAGIC_NUMBER)
 
 /** Holds a module's Version information
  *  The four members (set by the constructor only) indicate details as to the version number
@@ -185,7 +184,7 @@ class Version : public classbase
  * This class is used to represent a basic data structure which is passed
  * between modules for safe inter-module communications.
  */
-class ModuleMessage : public classbase
+class ModuleMessage : public Extensible
 {
  public:
        virtual ~ModuleMessage() {};
@@ -341,9 +340,9 @@ enum Implementation {       I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUse
                        I_OnCleanup, I_OnUserPostNick, I_OnAccessCheck, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule, I_OnUnloadModule,
                        I_OnBackgroundTimer, 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_OnPostLocalTopicChange, I_OnEvent, I_OnRequest, I_OnOperCompre, I_OnGlobalOper, I_OnPostConnect, I_OnAddBan, I_OnDelBan,
                        I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister,
-                       I_OnOperCompare, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnCancelAway };
+                       I_OnOperCompare, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnCancelAway, I_OnUserList, I_OnPostCommand };
 
 /** Base class for all InspIRCd modules
  *  This class is the base class for InspIRCd modules. All modules must inherit from this class,
@@ -986,8 +985,8 @@ class Module : public Extensible
 
        /** Called whenever any command is about to be executed.
         * This event occurs for all registered commands, wether they are registered in the core,
-        * or another module, but it will not occur for invalid commands (e.g. ones which do not
-        * exist within the command table). By returning 1 from this method you may prevent the
+        * or another module, and for invalid commands. Invalid commands may only be sent to this
+        * function when the value of validated is false. By returning 1 from this method you may prevent the
         * command being executed. If you do this, no output is created by the core, and it is
         * down to your module to produce any output neccessary.
         * Note that unless you return 1, you should not destroy any structures (e.g. by using
@@ -998,9 +997,24 @@ class Module : public Extensible
         * @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.
+        * @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, userrec *user, bool validated);
+       virtual int OnPreCommand(const std::string &command, const char** parameters, int pcnt, userrec *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,
+        * or another module, but it will not occur for invalid commands (e.g. ones which do not
+        * exist within the command table). The result code returned by the command handler is
+        * provided.
+        * @param command The command being executed
+        * @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 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, userrec *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
@@ -1083,7 +1097,9 @@ class Module : public Extensible
         * 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
+        * @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.
         * @return 1 to block the /STATS from being processed by the core, 0 to allow it
         */
        virtual int OnStats(char symbol, userrec* user, string_list &results);
@@ -1157,12 +1173,12 @@ class Module : public Extensible
         */
        virtual void OnGlobalOper(userrec* user);
 
-       /**  Called whenever a user connects, anywhere on the network.
+       /** Called after a user has fully connected and all modules have executed OnUserConnect
         * This event is informational only. You should not change any user information in this
         * event. To do so, use the OnUserConnect method to change the state of local users.
         * @param user The user who is connecting
         */
-       virtual void OnGlobalConnect(userrec* user);
+       virtual void OnPostConnect(userrec* user);
 
        /** Called whenever a ban is added to a channel's list.
         * Return a non-zero value to 'eat' the mode change and prevent the ban from being added.
@@ -1237,6 +1253,13 @@ class Module : public Extensible
        /** Called when a user cancels their away state.
         */
        virtual void OnCancelAway(userrec* user);
+
+       /** Called whenever a NAMES list is requested.
+        * You can produce the nameslist yourself, overriding the current list,
+        * and if you do you must return 1. If you do not handle the names list,
+        * return 0.
+        */
+       virtual int OnUserList(userrec* user, chanrec* Ptr);
 };
 
 
@@ -1408,7 +1431,7 @@ class FileReader : public classbase
 };
 
 
-/** Instantiates classes inherited from Module
+/** Instantiates classes inherited from Module.
  * This class creates a class inherited from type Module, using new. This is to allow for modules
  * to create many different variants of Module, dependent on architecture, configuration, etc.
  * In most cases, the simple class shown in the example module m_foobar.so will suffice for most
@@ -1417,7 +1440,11 @@ class FileReader : public classbase
 class ModuleFactory : public classbase
 {
  public:
+       /** The default constructor does nothing.
+        */
        ModuleFactory() { }
+       /** The default destructor does nothing
+        */
        virtual ~ModuleFactory() { }
        /** Creates a new module.
         * Your inherited class of ModuleFactory must return a pointer to your Module class
@@ -1426,9 +1453,16 @@ class ModuleFactory : public classbase
        virtual Module * CreateModule(InspIRCd* Me) = 0;
 };
 
-
+/** A DLLFactory (designed to load shared objects) containing a ModuleFactory.
+ */
 typedef DLLFactory<ModuleFactory> ircd_module;
+
+/** A list of loaded Modules
+ */
 typedef std::vector<Module*> ModuleList;
+
+/** A list of loaded ModuleFactories
+ */
 typedef std::vector<ircd_module*> FactoryList;
 
 #endif