X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Finspircd.h;h=d045b347b6ddf59539a22a17d66b9cf0a989f5e8;hb=ad47ea662698e72ff8f79b03512b1e7fe81bdf53;hp=04327992c39252d97bd9210096c30baba83836f3;hpb=6153822a2de1867b7b90b95e8ed9bc1a8c792c84;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/inspircd.h b/include/inspircd.h index 04327992c..d045b347b 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -49,10 +49,12 @@ CoreExport extern InspIRCd* ServerInstance; #include "config.h" +#include "dynref.h" #include "consolecolors.h" #include "caller.h" #include "cull_list.h" #include "extensible.h" +#include "fileutils.h" #include "numerics.h" #include "uid.h" #include "users.h" @@ -74,11 +76,6 @@ CoreExport extern InspIRCd* ServerInstance; #include "inspstring.h" #include "protocol.h" -/** - * Used to define the maximum number of parameters a command may have. - */ -#define MAXPARAMETERS 127 - /** Returned by some functions to indicate failure. */ #define ERROR -1 @@ -87,20 +84,19 @@ CoreExport extern InspIRCd* ServerInstance; */ template inline std::string ConvNumeric(const T &in) { - if (in == 0) return "0"; - char res[MAXBUF]; - char* out = res; + if (in == 0) + return "0"; T quotient = in; - while (quotient) { - *out = "0123456789"[ std::abs( (long)quotient % 10 ) ]; - ++out; + std::string out; + while (quotient) + { + out += "0123456789"[ std::abs( (long)quotient % 10 ) ]; quotient /= 10; } if (in < 0) - *out++ = '-'; - *out = 0; - std::reverse(res,out); - return res; + out += '-'; + std::reverse(out.begin(), out.end()); + return out; } /** Template function to convert any input type to std::string @@ -246,11 +242,10 @@ public: void SendTo(LocalUser* user); }; -DEFINE_HANDLER2(IsNickHandler, bool, const std::string&, size_t); +DEFINE_HANDLER1(IsNickHandler, bool, const std::string&); DEFINE_HANDLER2(GenRandomHandler, void, char*, size_t); DEFINE_HANDLER1(IsIdentHandler, bool, const std::string&); -DEFINE_HANDLER2(IsChannelHandler, bool, const std::string&, size_t); -DEFINE_HANDLER1(RehashHandler, void, const std::string&); +DEFINE_HANDLER1(IsChannelHandler, bool, const std::string&); DEFINE_HANDLER3(OnCheckExemptionHandler, ModResult, User*, Channel*, const std::string&); /** The main class of the irc server. @@ -271,21 +266,6 @@ class CoreExport InspIRCd */ bool DaemonSeed(); - /** Iterate the list of BufferedSocket objects, removing ones which have timed out - * @param TIME the current time - */ - void DoSocketTimeouts(time_t TIME); - - /** Perform background user events such as PING checks - */ - void DoBackgroundUserStuff(); - - /** Returns true when all modules have done pre-registration checks on a user - * @param user The user to verify - * @return True if all modules have finished checking this user - */ - bool AllModulesReportReady(LocalUser* user); - /** The current time, updated in the mainloop */ struct timespec TIME; @@ -295,6 +275,11 @@ class CoreExport InspIRCd */ char ReadBuffer[65535]; + /** Check we aren't running as root, and exit if we are + * with exit code EXIT_STATUS_ROOT. + */ + void CheckRoot(); + public: UIDGenerator UIDGen; @@ -311,7 +296,6 @@ class CoreExport InspIRCd IsIdentHandler HandleIsIdent; OnCheckExemptionHandler HandleOnCheckExemption; IsChannelHandler HandleIsChannel; - RehashHandler HandleRehash; GenRandomHandler HandleGenRandom; /** Globally accessible fake user record. This is used to force mode changes etc across s2s, etc.. bit ugly, but.. better than how this was done in 1.1 @@ -324,8 +308,6 @@ class CoreExport InspIRCd */ FakeUser* FakeClient; - static const char LogHeader[]; - /** Find a user in the UUID hash * @param uid The UUID to find * @return A pointer to the user, or NULL if the user does not exist @@ -417,13 +399,9 @@ class CoreExport InspIRCd */ ProtocolInterface* PI; - /** Holds extensible for user nickforced - */ - LocalIntExt NICKForced; - /** Holds extensible for user operquit */ - LocalStringExt OperQuit; + StringExtItem OperQuit; /** Manages the generation and transmission of ISUPPORT. */ ISupportManager ISupport; @@ -493,33 +471,17 @@ class CoreExport InspIRCd */ Channel* FindChan(const std::string &chan); - /** Check we aren't running as root, and exit if we are - * @return Depending on the configuration, this function may never return - */ - void CheckRoot(); - - /** Determine the right path for, and open, the logfile - * @param argv The argv passed to main() initially, used to calculate program path - * @param argc The argc passed to main() initially, used to calculate program path - * @return True if the log could be opened, false if otherwise - */ - bool OpenLog(char** argv, int argc); - /** Return true if a channel name is valid * @param chname A channel name to verify * @return True if the name is valid */ - caller2 IsChannel; + caller1 IsChannel; /** Return true if str looks like a server ID - * @param string to check against + * @param sid string to check against */ static bool IsSID(const std::string& sid); - /** Rehash the local server - */ - caller1 Rehash; - /** Handles incoming signals after being set * @param signal the signal recieved */ @@ -541,20 +503,20 @@ class CoreExport InspIRCd /** Causes the server to exit immediately with exit code 0. * The status code is required for signal handlers, and ignored. */ + static void QuickExit(int status); - /** Printf-wrapper. - * @param How you want it formatted - * @param ... + /** Formats the input string with the specified arguments. + * @param formatString The string to format + * @param ... A variable number of format arguments. * @return The formatted string */ - static const char* Format(const char* formatString, ...); - - static void QuickExit(int status); + static const char* Format(const char* formatString, ...) CUSTOM_PRINTF(1, 2); + static const char* Format(va_list &vaList, const char* formatString) CUSTOM_PRINTF(2, 0); /** Return a count of channels on the network * @return The number of channels */ - long ChannelCount(); + long ChannelCount() const { return chanlist->size(); } /** Send an error notice to all local users, opered and unopered * @param s The error string to send @@ -565,7 +527,7 @@ class CoreExport InspIRCd * @param n A nickname to verify * @return True if the nick is valid */ - caller2 IsNick; + caller1 IsNick; /** Return true if an ident is valid * @param An ident to verify @@ -573,39 +535,14 @@ class CoreExport InspIRCd */ caller1 IsIdent; - /** Add a command to this server's command parser - * @param f A Command command handler object to add - * @throw ModuleException Will throw ModuleExcption if the command already exists - */ - inline void AddCommand(Command *f) - { - Modules->AddService(*f); - } - - /** Send a modechange. - * The parameters provided are identical to that sent to the - * handler for class cmd_mode. - * @param parameters The mode parameters - * @param user The user to send error messages to - */ - void SendMode(const std::vector& parameters, User *user); - - /** Send a modechange and route it to the network. - * The parameters provided are identical to that sent to the - * handler for class cmd_mode. - * @param parameters The mode parameters - * @param user The user to send error messages to - */ - void SendGlobalMode(const std::vector& parameters, User *user); - /** Match two strings using pattern matching, optionally, with a map * to check case against (may be NULL). If map is null, match will be case insensitive. * @param str The literal string to match against * @param mask The glob pattern to match against. * @param map The character map to use when matching. */ - static bool Match(const std::string &str, const std::string &mask, unsigned const char *map = NULL); - static bool Match(const char *str, const char *mask, unsigned const char *map = NULL); + static bool Match(const std::string& str, const std::string& mask, unsigned const char* map = NULL); + static bool Match(const char* str, const char* mask, unsigned const char* map = NULL); /** Match two strings using pattern matching, optionally, with a map * to check case against (may be NULL). If map is null, match will be case insensitive. @@ -614,8 +551,8 @@ class CoreExport InspIRCd * @param mask The glob or CIDR pattern to match against. * @param map The character map to use when matching. */ - static bool MatchCIDR(const std::string &str, const std::string &mask, unsigned const char *map = NULL); - static bool MatchCIDR(const char *str, const char *mask, unsigned const char *map = NULL); + static bool MatchCIDR(const std::string& str, const std::string& mask, unsigned const char* map = NULL); + static bool MatchCIDR(const char* str, const char* mask, unsigned const char* map = NULL); /** Matches a hostname and IP against a space delimited list of hostmasks. * @param masks The space delimited masks to match against. @@ -628,7 +565,7 @@ class CoreExport InspIRCd * @param mask A nick!user\@host masak to match against * @return True i the mask is valid */ - bool IsValidMask(const std::string &mask); + static bool IsValidMask(const std::string& mask); /** Strips all color codes from the given string * @param sentence The string to strip from @@ -641,8 +578,9 @@ class CoreExport InspIRCd static void ProcessColors(file_cache& input); /** Rehash the local server + * @param uuid The uuid of the user who started the rehash, can be empty */ - void RehashServer(); + void Rehash(const std::string& uuid = ""); /** Check if the given nickmask matches too many users, send errors to the given user * @param nick A nickmask to match against @@ -739,14 +677,6 @@ class CoreExport InspIRCd */ caller3 OnCheckExemption; - /** Restart the server. - * This function will not return. If an error occurs, - * it will throw an instance of CoreException. - * @param reason The restart reason to show to all clients - * @throw CoreException An instance of CoreException indicating the error from execv(). - */ - void Restart(const std::string &reason); - /** Prepare the ircd for restart or shutdown. * This function unloads all modules which can be unloaded, * closes all open sockets, and closes the logfile. @@ -755,14 +685,13 @@ class CoreExport InspIRCd /** Return a time_t as a human-readable string. */ - std::string TimeString(time_t curtime); + static std::string TimeString(time_t curtime); /** Begin execution of the server. * NOTE: this function NEVER returns. Internally, * it will repeatedly loop. - * @return The return value for this function is undefined. */ - int Run(); + void Run(); char* GetReadBuffer() { @@ -781,11 +710,6 @@ class CommandModule : public Module { } - void init() - { - ServerInstance->Modules->AddService(cmd); - } - Version GetVersion() { return Version(cmd.name, VF_VENDOR|VF_CORE);