]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/configreader.h
Add counter system for umodes to get rid of some O(n)
[user/henk/code/inspircd.git] / include / configreader.h
index 115f205c519d1374b263b1f25344ded3d8d25fc5..5e8c62e0620d9e38bca9a8384b750bdfe37f7969 100644 (file)
@@ -30,7 +30,14 @@ class InspSocket;
 
 /** Types of data in the core config
  */
-enum ConfigDataType { DT_NOTHING, DT_INTEGER, DT_CHARPTR, DT_BOOLEAN };
+enum ConfigDataType
+{
+       DT_NOTHING       = 0,
+       DT_INTEGER       = 1,
+       DT_CHARPTR       = 2,
+       DT_BOOLEAN       = 3,
+       DT_ALLOW_NEWLINE = 128
+};
 
 /** Holds a config value, either string, integer or boolean.
  * Callback functions receive one or more of these, either on
@@ -132,6 +139,7 @@ struct InitialConfig
 {
        char* tag;
        char* value;
+       char* default_value;
        ValueContainerBase* val;
        ConfigDataType datatype;
        Validator validation_function;
@@ -144,6 +152,7 @@ struct MultiConfig
 {
        const char*     tag;
        char*           items[12];
+       char*           items_default[12];
        int             datatype[12];
        MultiNotify     init_function;
        MultiValidator  validation_function;
@@ -472,6 +481,10 @@ class ServerConfig : public Extensible
         */
        std::map<std::string,int> maxbans;
 
+       /** Directory where the inspircd binary resides
+        */
+       std::string MyDir;
+
        /** If set to true, no user DNS lookups are to be performed
         */
        bool NoUserDns;
@@ -485,6 +498,11 @@ class ServerConfig : public Extensible
         */
        bool CycleHosts;
 
+       /** If set to true, prefixed channel NOTICEs and PRIVMSGs will have the prefix
+        *  added to the outgoing text for undernet style msg prefixing.
+        */
+       bool UndernetMsgPrefix;
+
        /** All oper type definitions from the config file
         */
        opertype_t opertypes;
@@ -493,6 +511,14 @@ class ServerConfig : public Extensible
         */
        operclass_t operclass;
 
+       /** Saved argv from startup
+        */
+       char** argv;
+
+       /** Saved argc from startup
+        */
+       int argc;
+
        /** Construct a new ServerConfig
         */
        ServerConfig(InspIRCd* Instance);
@@ -519,10 +545,23 @@ class ServerConfig : public Extensible
         */
        bool ReadFile(file_cache &F, const char* fname);
 
+       /** Load 'filename' into 'target', with the new config parser everything is parsed into
+        * tag/key/value at load-time rather than at read-value time.
+        */
+
+       /** Report a configuration error given in errormessage.
+        * @param bail If this is set to true, the error is sent to the console, and the program exits
+        * @param user If this is set to a non-null value, and bail is false, the errors are spooled to
+        * this user as SNOTICEs.
+        * If the parameter is NULL, the messages are spooled to all users via WriteOpers as SNOTICEs.
+        */
+       void ReportConfigError(const std::string &errormessage, bool bail, userrec* user);
+
        /** Load 'filename' into 'target', with the new config parser everything is parsed into
         * tag/key/value at load-time rather than at read-value time.
         */
        bool LoadConf(ConfigDataHash &target, const char* filename, std::ostringstream &errorstream);
+
        /** Load 'filename' into 'target', with the new config parser everything is parsed into
         * tag/key/value at load-time rather than at read-value time.
         */
@@ -532,24 +571,31 @@ class ServerConfig : public Extensible
        
        /** Writes 'length' chars into 'result' as a string
         */
-       bool ConfValue(ConfigDataHash &target, const char* tag, const char* var, int index, char* result, int length);
+       bool ConfValue(ConfigDataHash &target, const char* tag, const char* var, int index, char* result, int length, bool allow_linefeeds = false);
+       bool ConfValue(ConfigDataHash &target, const char* tag, const char* var, const char* default_value, int index, char* result, int length, bool allow_linefeeds = false);
+
        /** Writes 'length' chars into 'result' as a string
         */
-       bool ConfValue(ConfigDataHash &target, const std::string &tag, const std::string &var, int index, std::string &result);
+       bool ConfValue(ConfigDataHash &target, const std::string &tag, const std::string &var, int index, std::string &result, bool allow_linefeeds = false);
+       bool ConfValue(ConfigDataHash &target, const std::string &tag, const std::string &var, const std::string &default_value, int index, std::string &result, bool allow_linefeeds = false);
        
        /** Tries to convert the value to an integer and write it to 'result'
         */
        bool ConfValueInteger(ConfigDataHash &target, const char* tag, const char* var, int index, int &result);
+       bool ConfValueInteger(ConfigDataHash &target, const char* tag, const char* var, const char* default_value, int index, int &result);
        /** Tries to convert the value to an integer and write it to 'result'
         */
        bool ConfValueInteger(ConfigDataHash &target, const std::string &tag, const std::string &var, int index, int &result);
+       bool ConfValueInteger(ConfigDataHash &target, const std::string &tag, const std::string &var, const std::string &default_value, int index, int &result);
        
        /** Returns true if the value exists and has a true value, false otherwise
         */
        bool ConfValueBool(ConfigDataHash &target, const char* tag, const char* var, int index);
+       bool ConfValueBool(ConfigDataHash &target, const char* tag, const char* var, const char* default_value, int index);
        /** Returns true if the value exists and has a true value, false otherwise
         */
        bool ConfValueBool(ConfigDataHash &target, const std::string &tag, const std::string &var, int index);
+       bool ConfValueBool(ConfigDataHash &target, const std::string &tag, const std::string &var, const std::string &default_value, int index);
        
        /** Returns the number of occurences of tag in the config file
         */