X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Finspircd.h;h=9568750c2db84513ec26b1b736460d82e45cfd31;hb=511c11b8da024363fe2711a5ea9d600326073c8c;hp=ac3d45a8dab2325cb7ecc04c9006382beab0099f;hpb=cd712c40e1b352c05e7ae0f72e0a5e84cdf64323;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/inspircd.h b/include/inspircd.h index ac3d45a8d..9568750c2 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -52,6 +52,7 @@ #include #include #include +#include #include "inspircd_config.h" #include "inspircd_version.h" #include "typedefs.h" @@ -76,7 +77,6 @@ CoreExport extern InspIRCd* ServerInstance; #include "socketengine.h" #include "snomasks.h" #include "filelogger.h" -#include "caller.h" #include "modules.h" #include "threadengine.h" #include "configreader.h" @@ -213,31 +213,33 @@ class serverstats unsigned long statsConnects; /** Total bytes of data transmitted */ - double statsSent; + unsigned long statsSent; /** Total bytes of data received */ - double statsRecv; + unsigned long statsRecv; /** Cpu usage at last sample */ timeval LastCPU; /** Time last sample was read */ - timeval LastSampled; + timespec LastSampled; /** The constructor initializes all the counts to zero */ serverstats() : statsAccept(0), statsRefused(0), statsUnknown(0), statsCollisions(0), statsDns(0), - statsDnsGood(0), statsDnsBad(0), statsConnects(0), statsSent(0.0), statsRecv(0.0) + statsDnsGood(0), statsDnsBad(0), statsConnects(0), statsSent(0), statsRecv(0) { } }; DEFINE_HANDLER2(IsNickHandler, bool, const char*, size_t); +DEFINE_HANDLER2(GenRandomHandler, void, char*, size_t); DEFINE_HANDLER1(IsIdentHandler, bool, const char*); DEFINE_HANDLER1(FloodQuitUserHandler, void, User*); DEFINE_HANDLER2(IsChannelHandler, bool, const char*, size_t); DEFINE_HANDLER1(IsSIDHandler, bool, const std::string&); DEFINE_HANDLER1(RehashHandler, void, const std::string&); +DEFINE_HANDLER3(OnCheckExemptionHandler, ModResult, User*, Channel*, const std::string&); /** The main class of the irc server. * This class contains instances of all the other classes in this software. @@ -282,11 +284,7 @@ class CoreExport InspIRCd /** The current time, updated in the mainloop */ - time_t TIME; - - /** The time that was recorded last time around the mainloop - */ - time_t OLDTIME; + struct timespec TIME; /** A 64k buffer used to read socket data into * NOTE: update ValidateNetBufferSize if you change this @@ -310,9 +308,11 @@ class CoreExport InspIRCd IsNickHandler HandleIsNick; IsIdentHandler HandleIsIdent; FloodQuitUserHandler HandleFloodQuitUser; + OnCheckExemptionHandler HandleOnCheckExemption; IsChannelHandler HandleIsChannel; IsSIDHandler HandleIsSID; 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 * Reason for it: @@ -328,6 +328,8 @@ class CoreExport InspIRCd */ std::string GetUID(); + static const char LogHeader[]; + /** Find a user in the UUID hash * @param nick The nickname to find * @return A pointer to the user, or NULL if the user does not exist @@ -446,7 +448,25 @@ class CoreExport InspIRCd * it is much faster than calling time() directly. * @return The current time as an epoch value (time_t) */ - time_t Time(); + inline time_t Time() { return TIME.tv_sec; } + /** The fractional time at the start of this mainloop iteration (nanoseconds) */ + inline long Time_ns() { return TIME.tv_nsec; } + /** Update the current time. Don't call this unless you have reason to do so. */ + void UpdateTime(); + + /** Generate a random string with the given length + * @param length The length in bytes + * @param printable if false, the string will use characters 0-255; otherwise, + * it will be limited to 0x30-0x7E ('0'-'~', nonspace printable characters) + */ + std::string GenRandomStr(int length, bool printable = true); + /** Generate a random integer. + * This is generally more secure than rand() + */ + unsigned long GenRandomInt(unsigned long max); + + /** Fill a buffer with random bits */ + caller2 GenRandom; /** Bind all ports specified in the configuration file. * @return The number of ports bound without error @@ -598,7 +618,10 @@ class CoreExport InspIRCd * @param f A Command command handler object to add * @throw ModuleException Will throw ModuleExcption if the command already exists */ - void AddCommand(Command *f); + inline void AddCommand(Command *f) + { + Modules->AddService(*f); + } /** Send a modechange. * The parameters provided are identical to that sent to the @@ -608,6 +631,14 @@ class CoreExport InspIRCd */ 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 @@ -706,7 +737,7 @@ class CoreExport InspIRCd /** Returns the full version string of this ircd * @return The version string */ - std::string GetVersionString(); + std::string GetVersionString(bool rawversion = false); /** Attempt to write the process id to a given file * @param filename The PID file to attempt to write to @@ -754,6 +785,13 @@ class CoreExport InspIRCd */ caller1 FloodQuitUser; + /** Called to check whether a channel restriction mode applies to a user + * @param User that is attempting some action + * @param Channel that the action is being performed on + * @param Action name + */ + caller3 OnCheckExemption; + /** Restart the server. * This function will not return. If an error occurs, * it will throw an instance of CoreException. @@ -809,7 +847,11 @@ class CommandModule : public Module public: CommandModule() : cmd(this) { - ServerInstance->AddCommand(&cmd); + } + + void init() + { + ServerInstance->Modules->AddService(cmd); } Version GetVersion()