]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
m_ssl_openssl Implement custom BIO methods that call SocketEngine methods
[user/henk/code/inspircd.git] / include / modules.h
index de0faf6d4a6bcbe5f412408fcb7118d30cfe6a23..c938e6a9d0749f91e44ecb420ede9e40f5a400c9 100644 (file)
@@ -39,7 +39,6 @@
  */
 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_COMMON = 4,          // module needs to be common on all servers in a network to link
        VF_OPTCOMMON = 8,       // module should be common on all servers for unsurprising behavior
@@ -206,34 +205,6 @@ class CoreExport Version
        virtual ~Version() {}
 };
 
-/** The Event class is a unicast message directed at all modules.
- * When the class is properly instantiated it may be sent to all modules
- * using the Send() method, which will trigger the OnEvent method in
- * all modules passing the object as its parameter.
- */
-class CoreExport Event : public classbase
-{
- public:
-       /** This is a pointer to the sender of the message, which can be used to
-        * directly trigger events, or to create a reply.
-        */
-       ModuleRef source;
-       /** The event identifier.
-        * This is arbitary text which should be used to distinguish
-        * one type of event from another.
-        */
-       const std::string id;
-
-       /** Create a new Event
-        */
-       Event(Module* src, const std::string &eventid);
-       /** Send the Event.
-        * The return result of an Event::Send() will always be NULL as
-        * no replies are expected.
-        */
-       void Send();
-};
-
 class CoreExport DataProvider : public ServiceProvider
 {
  public:
@@ -249,9 +220,8 @@ enum Priority { PRIORITY_FIRST, PRIORITY_LAST, PRIORITY_BEFORE, PRIORITY_AFTER }
  */
 enum Implementation
 {
-       I_BEGIN,
        I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart,
-       I_OnSendSnotice, I_OnUserPreJoin, I_OnUserPreKick, I_OnUserKick, I_OnOper, I_OnInfo, I_OnWhois,
+       I_OnSendSnotice, I_OnUserPreJoin, I_OnUserPreKick, I_OnUserKick, I_OnOper, I_OnInfo,
        I_OnUserPreInvite, I_OnUserInvite, I_OnUserPreMessage, I_OnUserPreNick,
        I_OnUserMessage, I_OnMode, I_OnSyncUser,
        I_OnSyncChannel, I_OnDecodeMetaData, I_OnAcceptConnection, I_OnUserInit,
@@ -260,10 +230,10 @@ enum Implementation
        I_OnUnloadModule, I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite,
        I_OnRawMode, I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckChannelBan, I_OnExtBanCheck,
        I_OnStats, I_OnChangeLocalUserHost, I_OnPreTopicChange,
-       I_OnPostTopicChange, I_OnEvent, I_OnGlobalOper, I_OnPostConnect,
+       I_OnPostTopicChange, I_OnPostConnect,
        I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete,
        I_OnPostOper, I_OnSyncNetwork, I_OnSetAway, I_OnPostCommand, I_OnPostJoin,
-       I_OnWhoisLine, I_OnBuildNeighborList, I_OnGarbageCollect, I_OnSetConnectClass,
+       I_OnBuildNeighborList, I_OnGarbageCollect, I_OnSetConnectClass,
        I_OnText, I_OnPassCompare, I_OnNamesListItem, I_OnNumeric,
        I_OnPreRehash, I_OnModuleRehash, I_OnSendWhoLine, I_OnChangeIdent, I_OnSetUserIP,
        I_END
@@ -498,14 +468,6 @@ class CoreExport Module : public classbase, public usecountbase
         */
        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.
-        * @param source The user issuing the WHOIS command
-        * @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,
@@ -709,7 +671,7 @@ class CoreExport Module : public classbase, public usecountbase
         */
        virtual void OnUserPostNick(User* user, const std::string &oldnick);
 
-       /** Called before any mode change, to allow a single access check for
+       /** Called before a mode change via the MODE command, to allow a single access check for
         * a full mode change (use OnRawMode to check individual modes)
         *
         * Returning MOD_RES_ALLOW will skip prefix level checks, but can be overridden by
@@ -718,9 +680,9 @@ class CoreExport Module : public classbase, public usecountbase
         * @param source the user making the mode change
         * @param dest the user destination of the umode change (NULL if a channel mode)
         * @param channel the channel destination of the mode change
-        * @param parameters raw mode parameters; parameters[0] is the user/channel being changed
+        * @param modes Modes being changed, can be edited
         */
-       virtual ModResult OnPreMode(User* source, User* dest, Channel* channel, const std::vector<std::string>& parameters);
+       virtual ModResult OnPreMode(User* source, User* dest, Channel* channel, Modes::ChangeList& modes);
 
        /** Called when a 005 numeric is about to be output.
         * The module should modify the 005 numeric if needed to indicate its features.
@@ -952,12 +914,6 @@ class CoreExport Module : public classbase, public usecountbase
         */
        virtual void OnPostTopicChange(User* user, Channel* chan, const std::string &topic);
 
-       /** Called whenever an Event class is sent to all modules by another module.
-        * You should *always* check the value of Event::id to determine the event type.
-        * @param event The Event class being received
-        */
-       virtual void OnEvent(Event& event);
-
        /** Called whenever a password check is to be made. Replaces the old OldOperCompare API.
         * The password field (from the config file) is in 'password' and is to be compared against
         * 'input'. This method allows for encryption of passwords (oper, connect:allow, die/restart, etc).
@@ -970,14 +926,6 @@ class CoreExport Module : public classbase, public usecountbase
         */
        virtual ModResult OnPassCompare(Extensible* ex, const std::string &password, const std::string &input, const std::string& hashtype);
 
-       /** Called whenever a user is given usermode +o, anywhere on the network.
-        * You cannot override this and prevent it from happening as it is already happened and
-        * such a task must be performed by another server. You can however bounce modes by sending
-        * servermodes out to reverse mode changes.
-        * @param user The user who is opering
-        */
-       virtual void OnGlobalOper(User* user);
-
        /** 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.
@@ -1005,19 +953,6 @@ class CoreExport Module : public classbase, public usecountbase
         */
        virtual ModResult OnSetAway(User* user, const std::string &awaymsg);
 
-       /** 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
-        * the values numeric and text, but you cannot change the user the
-        * numeric is sent to. You may however change the user's User values.
-        * @param user The user the numeric is being sent to
-        * @param dest The user being WHOISed
-        * @param numeric The numeric of the line being sent
-        * @param text The text of the numeric, including any parameters
-        * @return nonzero to drop the line completely so that the user does not
-        * receive it, or zero to allow the line to be sent.
-        */
-       virtual ModResult OnWhoisLine(User* user, User* dest, int &numeric, std::string &text);
-
        /** Called at intervals for modules to garbage-collect any hashes etc.
         * Certain data types such as hash_map 'leak' buckets, which must be
         * tidied up and freed by copying into a new item every so often. This
@@ -1133,6 +1068,13 @@ class CoreExport ModuleManager : public fakederef<ModuleManager>
         */
        ServiceList* NewServices;
 
+       /** Expands the name of a module by prepending "m_" and appending ".so".
+        * No-op if the name already has the ".so" extension.
+        * @param modname Module name to expand
+        * @return Module name starting with "m_" and ending with ".so"
+        */
+       static std::string ExpandModName(const std::string& modname);
+
        /** Simple, bog-standard, boring constructor.
         */
        ModuleManager();
@@ -1159,12 +1101,6 @@ class CoreExport ModuleManager : public fakederef<ModuleManager>
         */
        bool SetPriority(Module* mod, Implementation i, Priority s, Module* which = NULL);
 
-       /** Backwards compat interface */
-       inline bool SetPriority(Module* mod, Implementation i, Priority s, Module** dptr)
-       {
-               return SetPriority(mod, i, s, *dptr);
-       }
-
        /** Change the priority of all events in a module.
         * @param mod The module to set the priority of
         * @param s The priority of all events in the module.
@@ -1173,7 +1109,7 @@ class CoreExport ModuleManager : public fakederef<ModuleManager>
         * SetPriority method for this, where you may specify other modules to
         * be prioritized against.
         */
-       bool SetPriority(Module* mod, Priority s);
+       void SetPriority(Module* mod, Priority s);
 
        /** Attach an event to a module.
         * You may later detatch the event with ModuleManager::Detach().
@@ -1332,7 +1268,8 @@ struct AllModuleList {
                                break; \
                } \
                return TRUE; \
-       }
+       } \
+       extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION " " INSPIRCD_REVISION;
 
 #else