X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fconfigreader.h;h=622c44d0d9ae61b8138c418c1afb437ec533a5ab;hb=f240285155d115ee3a0fd437944f2bec05a0c14c;hp=cce4e0f9dd85999efe3ce04dab95292eb4ca829b;hpb=fad82c2e0d400aee8c11a51962cf0a522efa5d66;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/configreader.h b/include/configreader.h index cce4e0f9d..622c44d0d 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -30,28 +30,113 @@ class ServerConfig; class InspIRCd; +class InspSocket; + +/** Types of data in the core config + */ +enum ConfigDataType { DT_NOTHING, DT_INTEGER, DT_CHARPTR, DT_BOOLEAN }; + +/** Holds a config value, either string, integer or boolean. + * Callback functions receive one or more of these, either on + * their own as a reference, or in a reference to a deque of them. + * The callback function can then alter the values of the ValueItem + * classes to validate the settings. + */ +class ValueItem +{ + std::string v; + public: + ValueItem(int value); + ValueItem(bool value); + ValueItem(char* value); + void Set(char* value); + void Set(const char* val); + void Set(int value); + int GetInteger(); + char* GetString(); + bool GetBool(); +}; + +/** The base class of the container 'ValueContainer' + * used internally by the core to hold core values. + */ +class ValueContainerBase +{ + public: + ValueContainerBase() { } + virtual ~ValueContainerBase() { } +}; + +/** ValueContainer is used to contain pointers to different + * core values such as the server name, maximum number of + * clients etc. + * It is specialized to hold a data type, then pointed at + * a value in the ServerConfig class. When the value has been + * read and validated, the Set method is called to write the + * value safely in a type-safe manner. + */ +template class ValueContainer : public ValueContainerBase +{ + T val; + + public: + + ValueContainer() + { + val = NULL; + } + + ValueContainer(T Val) + { + val = Val; + } + + void Set(T newval, size_t s) + { + memcpy(val, newval, s); + } +}; + +/** A specialization of ValueContainer to hold a pointer to a bool + */ +typedef ValueContainer ValueContainerBool; + +/** A specialization of ValueContainer to hold a pointer to + * an unsigned int + */ +typedef ValueContainer ValueContainerUInt; + +/** A specialization of ValueContainer to hold a pointer to + * a char array. + */ +typedef ValueContainer ValueContainerChar; + +/** A specialization of ValueContainer to hold a pointer to + * an int + */ +typedef ValueContainer ValueContainerInt; + +/** A set of ValueItems used by multi-value validator functions + */ +typedef std::deque ValueList; /** A callback for validating a single value */ -typedef bool (*Validator)(ServerConfig* conf, const char*, const char*, void*); +typedef bool (*Validator)(ServerConfig* conf, const char*, const char*, ValueItem&); /** A callback for validating multiple value entries */ -typedef bool (*MultiValidator)(ServerConfig* conf, const char*, char**, void**, int*); +typedef bool (*MultiValidator)(ServerConfig* conf, const char*, char**, ValueList&, 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 */ struct InitialConfig { char* tag; char* value; - void* val; + ValueContainerBase* val; ConfigDataType datatype; Validator validation_function; }; @@ -61,9 +146,9 @@ struct InitialConfig */ struct MultiConfig { - const char* tag; - char* items[12]; - int datatype[12]; + const char* tag; + char* items[12]; + int datatype[12]; MultiNotify init_function; MultiValidator validation_function; MultiNotify finish_function; @@ -75,7 +160,7 @@ typedef std::map opertype_t; /** A Set of oper classes */ -typedef opertype_t operclass_t; +typedef std::map operclass_t; /** This class holds the bulk of the runtime configuration for the ircd. @@ -120,6 +205,19 @@ class ServerConfig : public Extensible */ ConfigDataHash config_data; + /** Max number of WhoWas entries per user. + */ + int WhoWasGroupSize; + + /** Max number of cumulative user-entries in WhoWas. + * When max reached and added to, push out oldest entry FIFO style. + */ + int WhoWasMaxGroups; + + /** Max seconds a user is kept in WhoWas before being pruned. + */ + int WhoWasMaxKeep; + /** Holds the server name of the local server * as defined by the administrator. */ @@ -195,10 +293,6 @@ class ServerConfig : public Extensible */ char ModPath[1024]; - /** The temporary directory where modules are copied - */ - char TempDir[1024]; - /** The full pathname to the executable, as * given in argv[0] when the program starts. */ @@ -352,11 +446,14 @@ class ServerConfig : public Extensible */ std::map IOHookModule; + std::map SocketIOHookModule; + /** The 005 tokens of this server (ISUPPORT) * populated/repopulated upon loading or unloading * modules. */ std::string data005; + std::vector isupport; /** STATS characters in this list are available * only to operators. @@ -392,7 +489,7 @@ class ServerConfig : public Extensible */ bool CycleHosts; - /* All oper type definitions from the config file + /** All oper type definitions from the config file */ opertype_t opertypes; @@ -408,6 +505,14 @@ class ServerConfig : public Extensible */ void ClearStack(); + /** Update the 005 vector + */ + void Update005(); + + /** Send the 005 numerics (ISUPPORT) to a user + */ + void Send005(userrec* user); + /** Read the entire configuration into memory * and initialize this class. All other methods * should be used only by the core. @@ -467,6 +572,9 @@ class ServerConfig : public Extensible Module* GetIOHook(int port); bool AddIOHook(int port, Module* iomod); bool DelIOHook(int port); + Module* GetIOHook(InspSocket* is); + bool AddIOHook(Module* iomod, InspSocket* is); + bool DelIOHook(InspSocket* is); static std::string GetFullProgDir(char** argv, int argc); static bool DirValid(const char* dirandfile); @@ -477,4 +585,10 @@ class ServerConfig : public Extensible bool InitializeDisabledCommands(const char* data, InspIRCd* ServerInstance); +bool InitTypes(ServerConfig* conf, const char* tag); +bool InitClasses(ServerConfig* conf, const char* tag); +bool DoType(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types); +bool DoClass(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types); +bool DoneClassesAndTypes(ServerConfig* conf, const char* tag); + #endif