diff options
-rw-r--r-- | include/configreader.h | 59 | ||||
-rw-r--r-- | include/users.h | 2 | ||||
-rw-r--r-- | src/users.cpp | 14 |
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; } |