X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fconfigreader.h;h=76ca6084ac62b42c6c33257a82d82327e17e5c63;hb=7fe5347210730622badcb6ed32d90114bd8cbeb4;hp=7c55924324fd5e1822816962fbba4e66f0004a55;hpb=9f1cefca61befadcb4bde6202385c79cd1e605cb;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/configreader.h b/include/configreader.h index 7c5592432..76ca6084a 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -34,7 +34,7 @@ /* Required forward definitions */ class ServerConfig; class InspIRCd; -class InspSocket; +class BufferedSocket; /** Types of data in the core config */ @@ -44,7 +44,12 @@ enum ConfigDataType DT_INTEGER = 1, /* Integer */ DT_CHARPTR = 2, /* Char pointer */ DT_BOOLEAN = 3, /* Boolean */ - DT_ALLOW_NEWLINE = 128 /* New line characters allowed */ + DT_HOSTNAME = 4, /* Hostname syntax */ + DT_NOSPACES = 5, /* No spaces */ + DT_IPADDRESS = 6, /* IP address (v4, v6) */ + DT_CHANNEL = 7, /* Channel name */ + DT_ALLOW_WILD = 64, /* Allow wildcards/CIDR in DT_IPADDRESS */ + DT_ALLOW_NEWLINE = 128 /* New line characters allowed in DT_CHARPTR */ }; /** Holds a config value, either string, integer or boolean. @@ -182,11 +187,11 @@ struct MultiConfig /** Tag name */ const char* tag; /** One or more items within tag */ - char* items[15]; + char* items[17]; /** One or more defaults for items within tags */ - char* items_default[15]; + char* items_default[17]; /** One or more data types */ - int datatype[15]; + int datatype[17]; /** Initialization function */ MultiNotify init_function; /** Validation function */ @@ -235,11 +240,14 @@ class CoreExport ServerConfig : public Extensible /** Check that there is only one of each configuration item */ - bool CheckOnce(char* tag, bool bail, userrec* user); + bool CheckOnce(char* tag); public: - /* Pointer to function that validates dns server addresses (can be changed depending on platform) */ + /** Used to indicate who we announce invites to on a channel */ + enum InviteAnnounceState { INVITE_ANNOUNCE_NONE, INVITE_ANNOUNCE_ALL, INVITE_ANNOUNCE_OPS, INVITE_ANNOUNCE_DYNAMIC }; + + /** Pointer to function that validates dns server addresses (can be changed depending on platform) */ Validator DNSServerValidator; InspIRCd* GetInstance(); @@ -459,7 +467,7 @@ class CoreExport ServerConfig : public Extensible /** Announce invites to the channel with a server notice */ - bool AnnounceInvites; + InviteAnnounceState AnnounceInvites; /** If this is enabled then operators will * see invisible (+i) channels in /whois. @@ -491,11 +499,6 @@ class CoreExport ServerConfig : public Extensible */ ClassVector Classes; - /** A list of module names (names only, no paths) - * which are currently loaded by the server. - */ - std::vector module_names; - /** A list of the classes for listening client ports */ std::vector ports; @@ -512,7 +515,7 @@ class CoreExport ServerConfig : public Extensible */ std::map IOHookModule; - std::map SocketIOHookModule; + std::map SocketIOHookModule; /** The 005 tokens of this server (ISUPPORT) * populated/repopulated upon loading or unloading @@ -600,6 +603,13 @@ class CoreExport ServerConfig : public Extensible */ unsigned int OperMaxChans; + /** TS6-like server ID. + * NOTE: 000...999 are usable for InspIRCd servers. This + * makes code simpler. 0AA, 1BB etc with letters are reserved + * for services use. + */ + int sid; + /** Construct a new ServerConfig */ ServerConfig(InspIRCd* Instance); @@ -608,19 +618,23 @@ class CoreExport ServerConfig : public Extensible */ void ClearStack(); + /** Get server ID as string with required leading zeroes + */ + std::string GetSID(); + /** Update the 005 vector */ void Update005(); /** Send the 005 numerics (ISUPPORT) to a user */ - void Send005(userrec* user); + void Send005(User* user); /** Read the entire configuration into memory * and initialize this class. All other methods * should be used only by the core. */ - void Read(bool bail, userrec* user); + void Read(bool bail, User* user); /** Read a file into a file_cache object */ @@ -632,7 +646,7 @@ class CoreExport ServerConfig : public Extensible * 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); + void ReportConfigError(const std::string &errormessage, bool bail, User* 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. @@ -699,6 +713,12 @@ class CoreExport ServerConfig : public Extensible /** Returns the numbers of vars inside the index'th 'tag in the config file */ int ConfVarEnum(ConfigDataHash &target, const std::string &tag, int index); + + void ValidateHostname(const char* p, const std::string &tag, const std::string &val); + + void ValidateIP(const char* p, const std::string &tag, const std::string &val, bool wild); + + void ValidateNoSpaces(const char* p, const std::string &tag, const std::string &val); /** Get a pointer to the module which has hooked the given port. * @parameter port Port number @@ -720,25 +740,25 @@ class CoreExport ServerConfig : public Extensible */ bool DelIOHook(int port); - /** Get a pointer to the module which has hooked the given InspSocket class. + /** Get a pointer to the module which has hooked the given BufferedSocket class. * @parameter port Port number * @return Returns a pointer to the hooking module, or NULL */ - Module* GetIOHook(InspSocket* is); + Module* GetIOHook(BufferedSocket* is); - /** Hook a module to an InspSocket class, so that it can receive notifications + /** Hook a module to an BufferedSocket class, so that it can receive notifications * of low-level socket activity. * @param iomod The module to hook to the socket - * @param is The InspSocket to attach to + * @param is The BufferedSocket to attach to * @return True if the hook was successful. */ - bool AddIOHook(Module* iomod, InspSocket* is); + bool AddIOHook(Module* iomod, BufferedSocket* is); - /** Delete a module hook from an InspSocket. - * @param is The InspSocket to detatch from. + /** Delete a module hook from an BufferedSocket. + * @param is The BufferedSocket to detatch from. * @return True if the unhook was successful */ - bool DelIOHook(InspSocket* is); + bool DelIOHook(BufferedSocket* is); /** Returns the fully qualified path to the inspircd directory * @return The full program directory @@ -789,5 +809,30 @@ bool DoClass(ServerConfig* conf, const char* tag, char** entries, ValueList &val */ bool DoneClassesAndTypes(ServerConfig* conf, const char* tag); + + +/** Initialize x line + */ +bool InitXLine(ServerConfig* conf, const char* tag); + +/** Add a config-defined zline + */ +bool DoZLine(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types); + +/** Add a config-defined qline + */ +bool DoQLine(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types); + +/** Add a config-defined kline + */ +bool DoKLine(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types); + +/** Add a config-defined eline + */ +bool DoELine(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types); + + + + #endif