summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeavey <peavey@e03df62e-2008-0410-955e-edbf42e46eb7>2006-12-26 01:48:55 +0000
committerpeavey <peavey@e03df62e-2008-0410-955e-edbf42e46eb7>2006-12-26 01:48:55 +0000
commitf3f570b4fa14dd375ad4a06bddca8f365fb32c55 (patch)
tree0f229c738f8af1a0451b109c6e8c64448ed734c1
parent513917fccef70a34ecdc3db2952edfa84910c7b7 (diff)
Also add support for default values for ConfValueBool and ConfValueInteger in configreader, and for ReadFlag and ReadInteger in modules.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6116 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--include/configreader.h5
-rw-r--r--include/modules.h29
-rw-r--r--src/configreader.cpp45
-rw-r--r--src/modules.cpp17
4 files changed, 81 insertions, 15 deletions
diff --git a/include/configreader.h b/include/configreader.h
index d814a398e..5e8c62e06 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -152,6 +152,7 @@ struct MultiConfig
{
const char* tag;
char* items[12];
+ char* items_default[12];
int datatype[12];
MultiNotify init_function;
MultiValidator validation_function;
@@ -581,16 +582,20 @@ class ServerConfig : public Extensible
/** 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
*/
diff --git a/include/modules.h b/include/modules.h
index 8f5462b3a..9928ad326 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -1397,21 +1397,30 @@ class ConfigReader : public classbase
/** Retrieves a value from the config file.
* This method retrieves a value from the config file. Where multiple copies of the tag
- * exist in the config file, index indicates which of the values to retrieve. If the
- * tag is not found the default value is returned instead.
+ * exist in the config file, index indicates which of the values to retrieve.
*/
- std::string ReadValue(const std::string &tag, const std::string &name, const std::string &default_value, int index, bool allow_linefeeds = false);
+ std::string ReadValue(const std::string &tag, const std::string &name, int index, bool allow_linefeeds = false);
/** Retrieves a value from the config file.
* This method retrieves a value from the config file. Where multiple copies of the tag
- * exist in the config file, index indicates which of the values to retrieve.
+ * exist in the config file, index indicates which of the values to retrieve. If the
+ * tag is not found the default value is returned instead.
*/
- std::string ReadValue(const std::string &tag, const std::string &name, int index, bool allow_linefeeds = false);
+ std::string ReadValue(const std::string &tag, const std::string &name, const std::string &default_value, int index, bool allow_linefeeds = false);
+
/** Retrieves a boolean value from the config file.
* This method retrieves a boolean value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
* and "true" in the config file count as true to ReadFlag, and any other value counts as false.
*/
bool ReadFlag(const std::string &tag, const std::string &name, int index);
+ /** Retrieves a boolean value from the config file.
+ * This method retrieves a boolean value from the config file. Where multiple copies of the tag
+ * exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
+ * and "true" in the config file count as true to ReadFlag, and any other value counts as false.
+ * If the tag is not found, the default value is used instead.
+ */
+ bool ReadFlag(const std::string &tag, const std::string &name, const std::string &default_value, int index);
+
/** Retrieves an integer value from the config file.
* This method retrieves an integer value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. Any invalid integer
@@ -1421,6 +1430,16 @@ class ConfigReader : public classbase
* will return CONF_NOT_UNSIGNED
*/
long ReadInteger(const std::string &tag, const std::string &name, int index, bool needs_unsigned);
+ /** Retrieves an integer value from the config file.
+ * This method retrieves an integer value from the config file. Where multiple copies of the tag
+ * exist in the config file, index indicates which of the values to retrieve. Any invalid integer
+ * values in the tag will cause the objects error value to be set, and any call to GetError() will
+ * return CONF_INVALID_NUMBER to be returned. needs_unsigned is set if the number must be unsigned.
+ * If a signed number is placed into a tag which is specified unsigned, 0 will be returned and GetError()
+ * will return CONF_NOT_UNSIGNED. If the tag is not found, the default value is used instead.
+ */
+ long ReadInteger(const std::string &tag, const std::string &name, const std::string &default_value, int index, bool needs_unsigned);
+
/** Returns the last error to occur.
* Valid errors can be found by looking in modules.h. Any nonzero value indicates an error condition.
* A call to GetError() resets the error flag back to 0.
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 0c5949e49..7741b9d9f 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -643,52 +643,62 @@ void ServerConfig::Read(bool bail, userrec* user)
{"connect",
{"allow", "deny", "password", "timeout", "pingfreq", "flood",
"threshold", "sendq", "recvq", "localmax", "globalmax", NULL},
+ {"", "", "", "", "", "", "", "", "", "", "", NULL},
{DT_CHARPTR, DT_CHARPTR, DT_CHARPTR, DT_INTEGER, DT_INTEGER, DT_INTEGER,
DT_INTEGER, DT_INTEGER, DT_INTEGER, DT_INTEGER, DT_INTEGER},
InitConnect, DoConnect, DoneConnect},
{"uline",
{"server", NULL},
+ {"", NULL},
{DT_CHARPTR},
InitULine,DoULine,DoneULine},
{"banlist",
{"chan", "limit", NULL},
+ {"", "", NULL},
{DT_CHARPTR, DT_INTEGER},
InitMaxBans, DoMaxBans, DoneMaxBans},
{"module",
{"name", NULL},
+ {"", NULL},
{DT_CHARPTR},
InitModule, DoModule, DoneModule},
{"badip",
{"reason", "ipmask", NULL},
+ {"", "", NULL},
{DT_CHARPTR, DT_CHARPTR},
InitXLine, DoZLine, DoneXLine},
{"badnick",
{"reason", "nick", NULL},
+ {"", "", NULL},
{DT_CHARPTR, DT_CHARPTR},
InitXLine, DoQLine, DoneXLine},
{"badhost",
{"reason", "host", NULL},
+ {"", "", NULL},
{DT_CHARPTR, DT_CHARPTR},
InitXLine, DoKLine, DoneXLine},
{"exception",
{"reason", "host", NULL},
+ {"", "", NULL},
{DT_CHARPTR, DT_CHARPTR},
InitXLine, DoELine, DoneXLine},
{"type",
{"name", "classes", NULL},
+ {"", "", NULL},
{DT_CHARPTR, DT_CHARPTR},
InitTypes, DoType, DoneClassesAndTypes},
{"class",
{"name", "commands", NULL},
+ {"", "", NULL},
{DT_CHARPTR, DT_CHARPTR},
InitClasses, DoClass, DoneClassesAndTypes},
@@ -791,7 +801,7 @@ void ServerConfig::Read(bool bail, userrec* user)
case DT_CHARPTR:
{
char item[MAXBUF];
- if (ConfValue(this->config_data, MultiValues[Index].tag, MultiValues[Index].items[valuenum], tagnum, item, MAXBUF, allow_newlines))
+ if (ConfValue(this->config_data, MultiValues[Index].tag, MultiValues[Index].items[valuenum], MultiValues[Index].items_default[valuenum], tagnum, item, MAXBUF, allow_newlines))
vl.push_back(ValueItem(item));
else
vl.push_back(ValueItem(""));
@@ -800,7 +810,7 @@ void ServerConfig::Read(bool bail, userrec* user)
case DT_INTEGER:
{
int item = 0;
- if (ConfValueInteger(this->config_data, MultiValues[Index].tag, MultiValues[Index].items[valuenum], tagnum, item))
+ if (ConfValueInteger(this->config_data, MultiValues[Index].tag, MultiValues[Index].items[valuenum], MultiValues[Index].items_default[valuenum], tagnum, item))
vl.push_back(ValueItem(item));
else
vl.push_back(ValueItem(0));
@@ -808,7 +818,7 @@ void ServerConfig::Read(bool bail, userrec* user)
break;
case DT_BOOLEAN:
{
- bool item = ConfValueBool(this->config_data, MultiValues[Index].tag, MultiValues[Index].items[valuenum], tagnum);
+ bool item = ConfValueBool(this->config_data, MultiValues[Index].tag, MultiValues[Index].items[valuenum], MultiValues[Index].items_default[valuenum], tagnum);
vl.push_back(ValueItem(item));
}
break;
@@ -1325,29 +1335,50 @@ bool ServerConfig::ConfValue(ConfigDataHash &target, const std::string &tag, con
bool ServerConfig::ConfValueInteger(ConfigDataHash &target, const char* tag, const char* var, int index, int &result)
{
- return ConfValueInteger(target, std::string(tag), std::string(var), index, result);
+ return ConfValueInteger(target, std::string(tag), std::string(var), "", index, result);
+}
+
+bool ServerConfig::ConfValueInteger(ConfigDataHash &target, const char* tag, const char* var, const char* default_value, int index, int &result)
+{
+ return ConfValueInteger(target, std::string(tag), std::string(var), std::string(default_value), index, result);
}
bool ServerConfig::ConfValueInteger(ConfigDataHash &target, const std::string &tag, const std::string &var, int index, int &result)
{
+ return ConfValueInteger(target, tag, var, "", index, result);
+}
+
+bool ServerConfig::ConfValueInteger(ConfigDataHash &target, const std::string &tag, const std::string &var, const std::string &default_value, int index, int &result)
+{
std::string value;
std::istringstream stream;
- bool r = ConfValue(target, tag, var, index, value);
+ bool r = ConfValue(target, tag, var, default_value, index, value);
stream.str(value);
if(!(stream >> result))
return false;
return r;
}
+
bool ServerConfig::ConfValueBool(ConfigDataHash &target, const char* tag, const char* var, int index)
{
- return ConfValueBool(target, std::string(tag), std::string(var), index);
+ return ConfValueBool(target, std::string(tag), std::string(var), "", index);
+}
+
+bool ServerConfig::ConfValueBool(ConfigDataHash &target, const char* tag, const char* var, const char* default_value, int index)
+{
+ return ConfValueBool(target, std::string(tag), std::string(var), std::string(default_value), index);
}
bool ServerConfig::ConfValueBool(ConfigDataHash &target, const std::string &tag, const std::string &var, int index)
{
+ return ConfValueBool(target, tag, var, "", index);
+}
+
+bool ServerConfig::ConfValueBool(ConfigDataHash &target, const std::string &tag, const std::string &var, const std::string &default_value, int index)
+{
std::string result;
- if(!ConfValue(target, tag, var, index, result))
+ if(!ConfValue(target, tag, var, default_value, index, result))
return false;
return ((result == "yes") || (result == "true") || (result == "1"));
diff --git a/src/modules.cpp b/src/modules.cpp
index 18b2bf618..69506c7a6 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -643,16 +643,22 @@ std::string ConfigReader::ReadValue(const std::string &tag, const std::string &n
return ReadValue(tag, name, "", index, allow_linefeeds);
}
+bool ConfigReader::ReadFlag(const std::string &tag, const std::string &name, const std::string &default_value, int index)
+{
+ return ServerInstance->Config->ConfValueBool(*this->data, tag, name, default_value, index);
+}
+
bool ConfigReader::ReadFlag(const std::string &tag, const std::string &name, int index)
{
- return ServerInstance->Config->ConfValueBool(*this->data, tag, name, index);
+ return ReadFlag(tag, name, "", index);
}
-long ConfigReader::ReadInteger(const std::string &tag, const std::string &name, int index, bool needs_unsigned)
+
+long ConfigReader::ReadInteger(const std::string &tag, const std::string &name, const std::string &default_value, int index, bool needs_unsigned)
{
int result;
- if(!ServerInstance->Config->ConfValueInteger(*this->data, tag, name, index, result))
+ if(!ServerInstance->Config->ConfValueInteger(*this->data, tag, name, default_value, index, result))
{
this->error = CONF_VALUE_NOT_FOUND;
return 0;
@@ -667,6 +673,11 @@ long ConfigReader::ReadInteger(const std::string &tag, const std::string &name,
return result;
}
+long ConfigReader::ReadInteger(const std::string &tag, const std::string &name, int index, bool needs_unsigned)
+{
+ return ReadInteger(tag, name, "", index, needs_unsigned);
+}
+
long ConfigReader::GetError()
{
long olderr = this->error;