]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Add m_taxonomy and api minor tweak to make it work, enable some modules for it.
[user/henk/code/inspircd.git] / include / modules.h
index 8c4b55a95b36be0f7ecdd996f01a0d54e0b3c8c9..fe921a5405d729e53eb28f7a2df454a2e07b1049 100644 (file)
@@ -75,7 +75,7 @@ enum MessageType {
  * ipv4 servers, so this value will be ten times as
  * high on ipv6 servers.
  */
-#define NATIVE_API_VERSION 11010
+#define NATIVE_API_VERSION 11022
 #ifdef IPV6
 #define API_VERSION (NATIVE_API_VERSION * 10)
 #else
@@ -191,6 +191,8 @@ typedef std::map<std::string, std::pair<int, modulelist> > interfacelist;
 #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)
+#define IS_OPER(x) (*x->oper)
+#define IS_AWAY(x) (*x->awaymsg)
 
 /** Holds a module's Version information
  *  The four members (set by the constructor only) indicate details as to the version number
@@ -394,7 +396,7 @@ enum Implementation {       I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUse
                        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_OnUserList,
-                       I_OnPostCommand, I_OnPostJoin, I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect };
+                       I_OnPostCommand, I_OnPostJoin, I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect, I_OnBufferFlushed };
 
 /** Base class for all InspIRCd modules
  *  This class is the base class for InspIRCd modules. All modules must inherit from this class,
@@ -471,9 +473,10 @@ class Module : public Extensible
         * This event is only called when the user is fully registered when they quit. To catch
         * raw disconnections, use the OnUserDisconnect method.
         * @param user The user who is quitting
-        * @param message The user's quit message
+        * @param message The user's quit message (as seen by non-opers)
+        * @param oper_message The user's quit message (as seen by opers)
         */
-       virtual void OnUserQuit(userrec* user, const std::string &message);
+       virtual void OnUserQuit(userrec* user, const std::string &message, const std::string &oper_message);
 
        /** Called whenever a user's socket is closed.
         * The details of the exiting user are available to you in the parameter userrec *user
@@ -493,8 +496,10 @@ class Module : public Extensible
         * and the details of the channel they have joined is available in the variable chanrec *channel
         * @param user The user who is joining
         * @param channel The channel being joined
+        * @param silent Change this to true if you want to conceal the JOIN command from the other users
+        * of the channel (useful for modules such as auditorium)
         */
-       virtual void OnUserJoin(userrec* user, chanrec* channel);
+       virtual void OnUserJoin(userrec* user, chanrec* channel, bool &silent);
 
        /** Called after a user joins a channel
         * Identical to OnUserJoin, but called immediately afterwards, when any linking module has
@@ -510,8 +515,10 @@ class Module : public Extensible
         * @param user The user who is parting
         * @param channel The channel being parted
         * @param partmessage The part message, or an empty string
+        * @param silent Change this to true if you want to conceal the PART command from the other users
+        * of the channel (useful for modules such as auditorium)
         */
-       virtual void OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage);
+       virtual void OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage, bool &silent);
 
        /** Called on rehash.
         * This method is called prior to a /REHASH or when a SIGHUP is received from the operating
@@ -577,8 +584,10 @@ class Module : public Extensible
         * @param user The user being kicked
         * @param chan The channel the user is being kicked from
         * @param reason The kick reason
+        * @param silent Change this to true if you want to conceal the PART command from the other users
+        * of the channel (useful for modules such as auditorium)
         */
-       virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason);
+       virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason, bool &silent);
 
        /** Called whenever a user opers locally.
         * The userrec will contain the oper mode 'o' as this function is called after any modifications
@@ -782,8 +791,10 @@ class Module : public Extensible
         * @param proto A pointer to the module handling network protocol
         * @param opaque An opaque pointer set by the protocol module, should not be modified!
         * @param extname The extensions name which is being searched for
+        * @param displayable If this value is true, the data is going to be displayed to a user,
+        * and not sent across the network. Use this to determine wether or not to show sensitive data.
         */
-       virtual void OnSyncChannelMetaData(chanrec* chan, Module* proto,void* opaque, const std::string &extname);
+       virtual void OnSyncChannelMetaData(chanrec* chan, Module* proto,void* opaque, const std::string &extname, bool displayable = false);
 
        /* Allows modules to syncronize metadata related to users over the network during a netburst.
         * Whenever the linking module wants to send out data, but doesnt know what the data
@@ -795,8 +806,10 @@ class Module : public Extensible
         * @param proto A pointer to the module handling network protocol
         * @param opaque An opaque pointer set by the protocol module, should not be modified!
         * @param extname The extensions name which is being searched for
+        * @param displayable If this value is true, the data is going to be displayed to a user,
+        * and not sent across the network. Use this to determine wether or not to show sensitive data.
         */
-       virtual void OnSyncUserMetaData(userrec* user, Module* proto,void* opaque, const std::string &extname);
+       virtual void OnSyncUserMetaData(userrec* user, Module* proto,void* opaque, const std::string &extname, bool displayable = false);
 
        /* Allows modules to syncronize metadata not related to users or channels, over the network during a netburst.
         * Whenever the linking module wants to send out data, but doesnt know what the data
@@ -806,8 +819,10 @@ class Module : public Extensible
         * if it belongs to your module.
         * @param proto A pointer to the module handling network protocol
         * @param opaque An opaque pointer set by the protocol module, should not be modified!
+        * @param displayable If this value is true, the data is going to be displayed to a user,
+        * and not sent across the network. Use this to determine wether or not to show sensitive data.
         */
-       virtual void OnSyncOtherMetaData(Module* proto, void* opaque);
+       virtual void OnSyncOtherMetaData(Module* proto, void* opaque, bool displayable = false);
 
        /** Allows module data, sent via ProtoSendMetaData, to be decoded again by a receiving module.
         * Please see src/modules/m_swhois.cpp for a working example of how to use this method call.
@@ -1329,7 +1344,7 @@ class Module : public Extensible
         * 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);
+       virtual int OnUserList(userrec* user, chanrec* Ptr, CUList* &userlist);
 
        /** Called whenever a line of WHOIS output is sent to a user.
         * You may change the numeric and the text of the output by changing
@@ -1350,6 +1365,15 @@ class Module : public Extensible
         * method is called when it is time to do that.
         */
        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(userrec* user);
 };