summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configreader.h59
-rw-r--r--include/users.h2
-rw-r--r--src/users.cpp14
3 files changed, 58 insertions, 17 deletions
diff --git a/include/configreader.h b/include/configreader.h
index 44551b132..be952f051 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -31,10 +31,18 @@
class ServerConfig;
class InspIRCd;
+/** A callback for validating a single value
+ */
typedef bool (*Validator)(ServerConfig* conf, const char*, const char*, void*);
+/** A callback for validating multiple value entries
+ */
typedef bool (*MultiValidator)(ServerConfig* conf, const char*, char**, void**, int*);
+/** A callback indicating the end of a group of entries
+ */
typedef bool (*MultiNotify)(ServerConfig* conf, const char*);
+/** Types of data in the core config
+ */
enum ConfigDataType { DT_NOTHING, DT_INTEGER, DT_CHARPTR, DT_BOOLEAN };
/** Holds a core configuration item and its callbacks
@@ -61,6 +69,15 @@ struct MultiConfig
MultiNotify finish_function;
};
+/** A set of oper types
+ */
+typedef std::map<irc::string,char*> opertype_t;
+
+/** A Set of oper classes
+ */
+typedef opertype_t operclass_t;
+
+
/** This class holds the bulk of the runtime configuration for the ircd.
* It allows for reading new config values, accessing configuration files,
* and storage of the configuration data needed to run the ircd, such as
@@ -69,6 +86,8 @@ struct MultiConfig
class ServerConfig : public Extensible
{
private:
+ /** Creator/owner
+ */
InspIRCd* ServerInstance;
/** This variable holds the names of all
@@ -84,6 +103,8 @@ class ServerConfig : public Extensible
*/
bool ParseLine(ConfigDataHash &target, std::string &line, long linenumber, std::ostringstream &errorstream);
+ /** Process an include directive
+ */
bool DoInclude(ConfigDataHash &target, const std::string &file, std::ostringstream &errorstream);
/** Check that there is only one of each configuration item
@@ -371,6 +392,16 @@ class ServerConfig : public Extensible
*/
bool CycleHosts;
+ /* All oper type definitions from the config file
+ */
+ opertype_t opertypes;
+
+ /** All oper class definitions from the config file
+ */
+ operclass_t operclass;
+
+ /** Construct a new ServerConfig
+ */
ServerConfig(InspIRCd* Instance);
/** Clears the include stack in preperation for a Read() call.
@@ -391,28 +422,46 @@ class ServerConfig : public Extensible
* 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.
+ */
bool LoadConf(ConfigDataHash &target, const std::string &filename, std::ostringstream &errorstream);
/* Both these return true if the value existed or false otherwise */
- /* Writes 'length' chars into 'result' as a string */
+ /** Writes 'length' chars into 'result' as a string
+ */
bool ConfValue(ConfigDataHash &target, const char* tag, const char* var, int index, char* result, int length);
+ /** 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);
- /* Tries to convert the value to an integer and write it to 'result' */
+ /** 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);
+ /** 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);
- /* Returns true if the value exists and has a true value, false otherwise */
+ /** 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);
+ /** 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);
- /* Returns the number of occurences of tag in the config file */
+ /** Returns the number of occurences of tag in the config file
+ */
int ConfValueEnum(ConfigDataHash &target, const char* tag);
+ /** Returns the number of occurences of tag in the config file
+ */
int ConfValueEnum(ConfigDataHash &target, const std::string &tag);
- /* Returns the numbers of vars inside the index'th 'tag in the config file */
+ /** Returns the numbers of vars inside the index'th 'tag in the config file
+ */
int ConfVarEnum(ConfigDataHash &target, const char* tag, int index);
+ /** Returns the numbers of vars inside the index'th 'tag in the config file
+ */
int ConfVarEnum(ConfigDataHash &target, const std::string &tag, int index);
Module* GetIOHook(int port);
diff --git a/include/users.h b/include/users.h
index a682554f1..1dc0aa43e 100644
--- a/include/users.h
+++ b/include/users.h
@@ -65,8 +65,6 @@ class Invited : public classbase
irc::string channel;
};
-
-
class InspIRCd;
/** Derived from Resolver, and performs user forward/reverse lookups.
diff --git a/src/users.cpp b/src/users.cpp
index 51692958c..0cef0121a 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -26,18 +26,12 @@
static unsigned long already_sent[MAX_DESCRIPTORS] = {0};
-typedef std::map<irc::string,char*> opertype_t;
-typedef opertype_t operclass_t;
-
-opertype_t opertypes;
-operclass_t operclass;
-
/* XXX: Used for speeding up WriteCommon operations */
unsigned long uniq_id = 0;
bool InitTypes(ServerConfig* conf, const char* tag)
{
- for (opertype_t::iterator n = opertypes.begin(); n != opertypes.end(); n++)
+ for (opertype_t::iterator n = conf->opertypes.begin(); n != conf->opertypes.end(); n++)
{
if (n->second)
delete[] n->second;
@@ -49,7 +43,7 @@ bool InitTypes(ServerConfig* conf, const char* tag)
bool InitClasses(ServerConfig* conf, const char* tag)
{
- for (operclass_t::iterator n = operclass.begin(); n != operclass.end(); n++)
+ for (operclass_t::iterator n = conf->operclass.begin(); n != conf->operclass.end(); n++)
{
if (n->second)
delete[] n->second;
@@ -64,7 +58,7 @@ bool DoType(ServerConfig* conf, const char* tag, char** entries, void** values,
char* TypeName = (char*)values[0];
char* Classes = (char*)values[1];
- opertypes[TypeName] = strdup(Classes);
+ conf->opertypes[TypeName] = strdup(Classes);
conf->GetInstance()->Log(DEBUG,"Read oper TYPE '%s' with classes '%s'",TypeName,Classes);
return true;
}
@@ -74,7 +68,7 @@ bool DoClass(ServerConfig* conf, const char* tag, char** entries, void** values,
char* ClassName = (char*)values[0];
char* CommandList = (char*)values[1];
- operclass[ClassName] = strdup(CommandList);
+ conf->operclass[ClassName] = strdup(CommandList);
conf->GetInstance()->Log(DEBUG,"Read oper CLASS '%s' with commands '%s'",ClassName,CommandList);
return true;
}