]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Remove an extern, partly because it's unused, partly because it then gets shadowed...
[user/henk/code/inspircd.git] / include / modules.h
index 2a8c42dfd33496c4d1ceb742d69cfe5cbe21caf9..f15341e017baa3c53e2a2fb6addfd5f140a24f2b 100644 (file)
@@ -64,10 +64,11 @@ enum TargetTypeFlags {
        TYPE_OTHER
 };
 
+#include "globals.h"
 #include "dynamic.h"
 #include "base.h"
 #include "ctables.h"
-#include "socket.h"
+#include "inspsocket.h"
 #include <string>
 #include <deque>
 #include <sstream>
@@ -87,10 +88,11 @@ typedef file_cache string_list;
 typedef std::deque<userrec*> chanuserlist;
 
 
-// This #define allows us to call a method in all
-// loaded modules in a readable simple way, e.g.:
-// 'FOREACH_MOD OnConnect(user);'
-
+/**
+ * This #define allows us to call a method in all
+ * loaded modules in a readable simple way, e.g.:
+ * 'FOREACH_MOD(I_OnXonnwxr,OnConnect(user));'
+ */
 #define FOREACH_MOD(y,x) if (Config->global_implementation[y] > 0) { \
        for (int _i = 0; _i <= MODCOUNT; _i++) { \
        if (Config->implement_lists[_i][y]) \
@@ -100,17 +102,16 @@ typedef std::deque<userrec*> chanuserlist;
                } \
                catch (ModuleException& modexcept) \
                { \
-                       log(DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
+                       log(DEBUG,"Module exception caught: %s",modexcept.GetReason()); \
                } \
        } \
   }
 
-// This define is similar to the one above but returns a result in MOD_RESULT.
-// The first module to return a nonzero result is the value to be accepted,
-// and any modules after are ignored.
-
-// *********************************************************************************************
-
+/**
+ *  This define is similar to the one above but returns a result in MOD_RESULT.
+ * The first module to return a nonzero result is the value to be accepted,
+ * and any modules after are ignored.
+ */
 #define FOREACH_RESULT(y,x) { if (Config->global_implementation[y] > 0) { \
                        MOD_RESULT = 0; \
                        for (int _i = 0; _i <= MODCOUNT; _i++) { \
@@ -131,8 +132,6 @@ typedef std::deque<userrec*> chanuserlist;
                } \
        } \
  }
-   
-// *********************************************************************************************
 
 #define FD_MAGIC_NUMBER -42
 
@@ -142,12 +141,6 @@ typedef std::deque<userrec*> chanuserlist;
 #define IS_REMOTE(x) (x->fd < 0)
 #define IS_MODULE_CREATED(x) (x->fd == FD_MAGIC_NUMBER)
 
-/*extern void createcommand(char* cmd, handlerfunc f, char flags, int minparams, char* source);
-extern void server_mode(char **parameters, int pcnt, userrec *user);*/
-
-// class Version holds the version information of a Module, returned
-// by Module::GetVersion (thanks RD)
-
 /** Holds a module's Version information
  *  The four members (set by the constructor only) indicate details as to the version number
  *  of a module. A class of type Version is returned by the GetVersion method of the Module class.
@@ -171,13 +164,9 @@ class Admin : public classbase
         Admin(std::string name, std::string email, std::string nick);
 };
 
-
 // Forward-delacare module for ModuleMessage etc
 class Module;
 
-// Thanks to Rob (from anope) for the idea of this message passing API
-// (its been done before, but this seemed a very neat and tidy way...
-
 /** The ModuleMessage class is the base class of Request and Event
  * This class is used to represent a basic data structure which is passed
  * between modules for safe inter-module communications.
@@ -342,7 +331,7 @@ enum Implementation {       I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUse
 /** Base class for all InspIRCd modules
  *  This class is the base class for InspIRCd modules. All modules must inherit from this class,
  *  its methods will be called when irc server events occur. class inherited from module must be
- *  instantiated by the ModuleFactory class (see relevent section) for the plugin to be initialised.
+ *  instantiated by the ModuleFactory class (see relevent section) for the module to be initialised.
  */
 class Module : public classbase
 {
@@ -1248,8 +1237,14 @@ class Module : public classbase
         */
        virtual int OnRawSocketRead(int fd, char* buffer, unsigned int count, int &readresult);
 
+       /** Called whenever a user sets away.
+        * This method has no parameter for the away message, as it is available in the
+        * user record as userrec::awaymsg.
+        */
        virtual void OnSetAway(userrec* user);
 
+       /** Called when a user cancels their away state.
+        */
        virtual void OnCancelAway(userrec* user);
 };
 
@@ -1373,7 +1368,7 @@ class Server : public classbase
         * back to the user from which it originated, as seen in NICK (see RFC 1459). Otherwise, it
         * is only sent to the other recipients, as seen in QUIT.
         */
-       virtual void SendCommon(userrec* User, std::string text, bool IncludeSender);
+       virtual void SendCommon(userrec* User, const std::string &text, bool IncludeSender);
 
        /** Sends a WALLOPS message.
         * This method writes a WALLOPS message to all users with the +w flag, originating from the
@@ -1608,14 +1603,14 @@ class Server : public classbase
         * dhost member of userrec, as any change applied via this method will be propogated to any
         * linked servers.
         */     
-       virtual void ChangeHost(userrec* user, std::string host);
+       virtual void ChangeHost(userrec* user, const std::string &host);
        
        /** Change GECOS (fullname) of a user.
         * You should always call this method to change a user's GECOS rather than writing directly to the
         * fullname member of userrec, as any change applied via this method will be propogated to any
         * linked servers.
         */     
-       virtual void ChangeGECOS(userrec* user, std::string gecos);
+       virtual void ChangeGECOS(userrec* user, const std::string &gecos);
        
        /** Returns true if the servername you give is ulined.
         * ULined servers have extra privilages. They are allowed to change nicknames on remote servers,
@@ -1661,7 +1656,7 @@ class Server : public classbase
         * to indicate who or what sent the data, usually this is the nickname of a person, or a server
         * name.
         */
-       virtual void AddQLine(long duration, const std::string &source, const std::string &reason, const std::string nickname);
+       virtual void AddQLine(long duration, const std::string &source, const std::string &reason, const std::string &nickname);
 
        /** Adds a Z-line
         * The Z-line is propogated to all of the servers in the mesh and enforced as soon as it is added.
@@ -1739,13 +1734,28 @@ class Server : public classbase
         */
        virtual void DelSocket(InspSocket* sock);
 
+       /** Causes the local server to rehash immediately.
+        * WARNING: Do not call this method from within your rehash method, for
+        * obvious reasons!
+        */
        virtual void RehashServer();
 
+       /** This method returns the total number of channels on the network.
+        */
        virtual long GetChannelCount();
 
+       /** This method returns a channel whos index is greater than or equal to 0 and less than the number returned by Server::GetChannelCount().
+        * This is slower (by factors of dozens) than requesting a channel by name with Server::FindChannel(), however there are times when
+        * you wish to safely iterate the channel list, saving your position, with large amounts of time in between, which is what this function
+        * is useful for.
+        */
        virtual chanrec* GetChannelIndex(long index);
 
-       void DumpText(userrec* User, std::string LinePrefix, stringstream &TextStream);
+       /** Dumps text (in a stringstream) to a user. The stringstream should not contain linefeeds, as it will be split
+        * automatically by the function into safe amounts. The line prefix given is prepended onto each line (e.g. a servername
+        * and a numeric).
+        */
+       void DumpText(userrec* User, const std::string &LinePrefix, stringstream &TextStream);
 };
 
 
@@ -1769,10 +1779,11 @@ class ConfigReader : public classbase
         * core is changed). It will contain a pointer to the configuration file data with unneeded data
         * (such as comments) stripped from it.
         */
-       std::stringstream *cache;
-       std::stringstream *errorlog;
+       ConfigDataHash* data;
+       std::ostringstream* errorlog;;
        /** Used to store errors
         */
+       bool privatehash; // If we're using our own config data hash or not.
        bool readerror;
        long error;
        
@@ -1852,6 +1863,8 @@ class ConfigReader : public classbase
  */
 class FileReader : public classbase
 {
+       /** The file contents
+        */
        file_cache fc;
  public:
         /** Default constructor.
@@ -1919,6 +1932,8 @@ class ModuleFactory : public classbase
 
 
 typedef DLLFactory<ModuleFactory> ircd_module;
+typedef std::vector<Module*> ModuleList;
+typedef std::vector<ircd_module*> FactoryList;
 
 bool ModeDefined(char c, int i);
 bool ModeDefinedOper(char c, int i);