]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Include explicit parameter list in ProtocolInterface::SendMode
[user/henk/code/inspircd.git] / include / modules.h
index e7085277ab1258e0ac1dd25ce38f423e23066c8b..b58cbbc206e55307a54e81786bfde4637974d39d 100644 (file)
@@ -388,14 +388,14 @@ enum Priority { PRIORITY_FIRST, PRIORITY_DONTCARE, PRIORITY_LAST, PRIORITY_BEFOR
 enum Implementation
 {
        I_BEGIN,
-       I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart, I_OnRehash, I_OnServerRaw, I_OnSendSnotice,
+       I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart, I_OnRehash, I_OnSendSnotice,
        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_OnAddLine,
        I_OnDelLine, I_OnExpireLine, I_OnCleanup, I_OnUserPostNick, I_OnAccessCheck, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule, I_OnUnloadModule,
        I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite, I_OnRawMode,
-       I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckExtBan, I_OnCheckStringExtBan, I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, 
+       I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckExtBan, I_OnCheckStringExtBan, I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos,
        I_OnLocalTopicChange, I_OnPostLocalTopicChange, I_OnEvent, I_OnRequest, I_OnGlobalOper, I_OnPostConnect, I_OnAddBan, I_OnDelBan,
        I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister,
        I_OnChannelPreDelete, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnUserList,
@@ -518,19 +518,6 @@ class CoreExport Module : public Extensible
         */
        virtual void OnRehash(User* user, const std::string &parameter);
 
-       /** Called when a raw command is transmitted or received.
-        * This method is the lowest level of handler available to a module. It will be called with raw
-        * data which is passing through a connected socket. If you wish, you may munge this data by changing
-        * the string parameter "raw". If you do this, after your function exits it will immediately be
-        * cut down to 510 characters plus a carriage return and linefeed. For INBOUND messages only (where
-        * inbound is set to true) the value of user will be the User of the connection sending the
-        * data. This is not possible for outbound data because the data may be being routed to multiple targets.
-        * @param raw The raw string in RFC1459 format
-        * @param inbound A flag to indicate wether the data is coming into the daemon or going out to the user
-        * @param user The user record sending the text, when inbound == true.
-        */
-       virtual void OnServerRaw(std::string &raw, bool inbound, User* user);
-
        /** Called whenever a snotice is about to be sent to a snomask.
         * snomask and type may both be modified; the message may not.
         * @param snomask The snomask the message is going to (e.g. 'A')
@@ -561,7 +548,7 @@ class CoreExport Module : public Extensible
         * @return 1 To prevent the join, 0 to allow it.
         */
        virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven);
-       
+
        /** Called whenever a user is about to be kicked.
         * Returning a value of 1 from this function stops the process immediately, causing no
         * output to be sent to the user by the core. If you do this you must produce your own numerics,
@@ -603,7 +590,7 @@ class CoreExport Module : public Extensible
         * @param opertype The opers type name
         */
        virtual void OnPostOper(User* user, const std::string &opername, const std::string &opertype);
-       
+
        /** Called whenever a user types /INFO.
         * The User will contain the information of the user who typed the command. Modules may use this
         * method to output their own credits in /INFO (which is the ircd's version of an about box).
@@ -615,7 +602,7 @@ class CoreExport Module : public Extensible
         * @param user The user issuing /INFO
         */
        virtual void OnInfo(User* user);
-       
+
        /** Called whenever a /WHOIS is performed on a local user.
         * The source parameter contains the details of the user who issued the WHOIS command, and
         * the dest parameter contains the information of the user they are whoising.
@@ -623,7 +610,7 @@ class CoreExport Module : public Extensible
         * @param dest The user who is being WHOISed
         */
        virtual void OnWhois(User* source, User* dest);
-       
+
        /** Called whenever a user is about to invite another user into a channel, before any processing is done.
         * Returning 1 from this function stops the process immediately, causing no
         * output to be sent to the user by the core. If you do this you must produce your own numerics,
@@ -635,7 +622,7 @@ class CoreExport Module : public Extensible
         * @return 1 to deny the invite, 0 to check whether or not the user has permission to invite, -1 to explicitly allow the invite
         */
        virtual int OnUserPreInvite(User* source,User* dest,Channel* channel, time_t timeout);
-       
+
        /** Called after a user has been successfully invited to a channel.
         * You cannot prevent the invite from occuring using this function, to do that,
         * use OnUserPreInvite instead.
@@ -645,7 +632,7 @@ class CoreExport Module : public Extensible
         * @param timeout The time the invite will expire (0 == never)
         */
        virtual void OnUserInvite(User* source,User* dest,Channel* channel, time_t timeout);
-       
+
        /** Called whenever a user is about to PRIVMSG A user or a channel, before any processing is done.
         * Returning any nonzero value from this function stops the process immediately, causing no
         * output to be sent to the user by the core. If you do this you must produce your own numerics,
@@ -695,7 +682,7 @@ class CoreExport Module : public Extensible
         * @param text The original message text causing the exempt list to be built
         */
        virtual void OnBuildExemptList(MessageType message_type, Channel* chan, User* sender, char status, CUList &exempt_list, const std::string &text);
-       
+
        /** Called before any nickchange, local or remote. This can be used to implement Q-lines etc.
         * Please note that although you can see remote nickchanges through this function, you should
         * NOT make any changes to the User if the user is a remote user as this may cause a desnyc.
@@ -752,8 +739,9 @@ class CoreExport Module : public Extensible
         * @param dest The target of the modes (User* or Channel*)
         * @param target_type The type of target (TYPE_USER or TYPE_CHANNEL)
         * @param text The actual modes and their parameters if any
+        * @param translate The translation types of the mode parameters
         */
-       virtual void OnMode(User* user, void* dest, int target_type, const std::string &text);
+       virtual void OnMode(User* user, void* dest, int target_type, const std::deque<std::string> &text, const std::deque<TranslateType> &translate);
 
        /** Allows modules to alter or create server descriptions
         * Whenever a module requires a server description, for example for display in
@@ -860,8 +848,9 @@ class CoreExport Module : public Extensible
         * @param target_type The type of item to decode data for, TYPE_USER or TYPE_CHANNEL
         * @param target The Channel* or User* that modes should be sent for
         * @param modeline The modes and parameters to be sent
+        * @param translate The translation types of the mode parameters
         */
-       virtual void ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const std::string &modeline);
+       virtual void ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const std::deque<std::string> &modeline, const std::deque<TranslateType> &translate);
 
        /** Implemented by modules which provide the ability to link servers.
         * These modules will implement this method, which allows metadata (extra data added to
@@ -878,7 +867,7 @@ class CoreExport Module : public Extensible
         * @param extdata Encoded data for this extension name, which will be encoded at the oppsite end by an identical module using OnDecodeMetaData
         */
        virtual void ProtoSendMetaData(void* opaque, TargetTypeFlags target_type, void* target, const std::string &extname, const std::string &extdata);
-       
+
        /** Called after every WALLOPS command.
         * @param user The user sending the WALLOPS
         * @param text The content of the WALLOPS message
@@ -1183,7 +1172,7 @@ class CoreExport Module : public Extensible
         * @param newhost The new GECOS
         * @return 1 to deny the GECOS change, 0 to allow
         */
-       virtual int OnChangeLocalUserGECOS(User* user, const std::string &newhost); 
+       virtual int OnChangeLocalUserGECOS(User* user, const std::string &newhost);
 
        /** Called whenever a topic is changed by a local user.
         * Return 1 to deny the topic change, 0 to check details on the change, -1 to let it through with no checks
@@ -1429,7 +1418,7 @@ class CoreExport ConfigReader : public classbase
        /** Error code
         */
        long error;
-       
+
   public:
        /** Default constructor.
         * This constructor initialises the ConfigReader class to read the inspircd.conf file
@@ -1584,7 +1573,7 @@ class CoreExport FileReader : public classbase
         * This function will return false if the file could not be opened.
         */
        bool Exists();
+
        /** Retrieve one line from the file.
         * This method retrieves one line from the text file. If an empty non-NULL string is returned,
         * the index was out of bounds, or the line had no data on it.
@@ -1615,17 +1604,6 @@ typedef std::vector<Module*> IntModuleList;
  */
 typedef IntModuleList::iterator EventHandlerIter;
 
-/** Module priority states
- */
-enum PriorityState
-{
-       PRIO_DONTCARE,
-       PRIO_FIRST,
-       PRIO_LAST,
-       PRIO_AFTER,
-       PRIO_BEFORE
-};
-
 /** ModuleManager takes care of all things module-related
  * in the core.
  */
@@ -1635,7 +1613,7 @@ class CoreExport ModuleManager : public classbase
        /** Holds a string describing the last module error to occur
         */
        std::string LastModuleError;
+
        /** The feature names published by various modules
         */
        featurelist Features;
@@ -1643,11 +1621,11 @@ class CoreExport ModuleManager : public classbase
        /** The interface names published by various modules
         */
        interfacelist Interfaces;
+
        /** Total number of modules loaded into the ircd
         */
-       int ModCount; 
-       
+       int ModCount;
+
        /** Our pointer to the main insp instance
         */
        InspIRCd* Instance;
@@ -1670,7 +1648,7 @@ class CoreExport ModuleManager : public classbase
 
        /** Destructor
         */
-       ~ModuleManager(); 
+       ~ModuleManager();
 
        /** Change the priority of one event in a module.
         * Each module event has a list of modules which are attached to that event type.
@@ -1685,7 +1663,7 @@ class CoreExport ModuleManager : public classbase
         * set it to be the last called, or PRIO_BEFORE and PRIO_AFTER
         * to set it to be before or after one or more other modules.
         * @param modules If PRIO_BEFORE or PRIO_AFTER is set in parameter 's',
-        * then this contains a list of one or more modules your module must be 
+        * then this contains a list of one or more modules your module must be
         * placed before or after. Your module will be placed before the highest
         * priority module in this list for PRIO_BEFORE, or after the lowest
         * priority module in this list for PRIO_AFTER.
@@ -1693,7 +1671,7 @@ class CoreExport ModuleManager : public classbase
         * Defaults to 1, as most of the time you will only want to prioritize your module
         * to be before or after one other module.
         */
-       bool SetPriority(Module* mod, Implementation i, PriorityState s, Module** modules = NULL, size_t sz = 1);
+       bool SetPriority(Module* mod, Implementation i, Priority s, Module** modules = NULL, size_t sz = 1);
 
        /** Change the priority of all events in a module.
         * @param mod The module to set the priority of
@@ -1703,7 +1681,7 @@ class CoreExport ModuleManager : public classbase
         * SetPriority method for this, where you may specify other modules to
         * be prioritized against.
         */
-       bool SetPriority(Module* mod, PriorityState s);
+       bool SetPriority(Module* mod, Priority s);
 
        /** Attach an event to a module.
         * You may later detatch the event with ModuleManager::Detach().
@@ -1733,7 +1711,7 @@ class CoreExport ModuleManager : public classbase
         * @param mod Module to detach from
         */
        void DetachAll(Module* mod);
+
        /** Returns text describing the last module error
         * @return The last error message to occur
         */
@@ -1750,11 +1728,11 @@ class CoreExport ModuleManager : public classbase
         * @return True if the module was unloaded
         */
        bool Unload(const char* filename);
-       
+
        /** Called by the InspIRCd constructor to load all modules from the config file.
         */
        void LoadAll();
-       
+
        /** Get the total number of currently loaded modules
         * @return The number of loaded modules
         */
@@ -1762,14 +1740,14 @@ class CoreExport ModuleManager : public classbase
        {
                return this->ModCount;
        }
-       
+
        /** Find a module by name, and return a Module* to it.
         * This is preferred over iterating the module lists yourself.
         * @param name The module name to look up
         * @return A pointer to the module, or NULL if the module cannot be found
         */
        Module* Find(const std::string &name);
+
        /** Publish a 'feature'.
         * There are two ways for a module to find another module it depends on.
         * Either by name, using InspIRCd::FindModule, or by feature, using this