]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/inspircd.h
Change SERVICE_{CMODE,UMODE} to SERVICE_MODE, which makes more sense
[user/henk/code/inspircd.git] / include / inspircd.h
index ac3d45a8dab2325cb7ecc04c9006382beab0099f..b4fd12026a2b35667d06a999cdc1b29ff808a1b6 100644 (file)
@@ -52,6 +52,7 @@
 #include <map>
 #include <bitset>
 #include <set>
+#include <time.h>
 #include "inspircd_config.h"
 #include "inspircd_version.h"
 #include "typedefs.h"
@@ -222,7 +223,7 @@ class serverstats
        timeval LastCPU;
        /** Time last sample was read
         */
-       timeval LastSampled;
+       timespec LastSampled;
        /** The constructor initializes all the counts to zero
         */
        serverstats()
@@ -233,6 +234,7 @@ class serverstats
 };
 
 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);
@@ -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
@@ -313,6 +311,7 @@ class CoreExport InspIRCd
        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:
@@ -446,7 +445,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<void, char*, size_t> GenRandom;
 
        /** Bind all ports specified in the configuration file.
         * @return The number of ports bound without error
@@ -598,7 +615,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 +628,14 @@ class CoreExport InspIRCd
         */
        void SendMode(const std::vector<std::string>& 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<std::string>& 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
@@ -809,7 +837,11 @@ class CommandModule : public Module
  public:
        CommandModule() : cmd(this)
        {
-               ServerInstance->AddCommand(&cmd);
+       }
+
+       void init()
+       {
+               ServerInstance->Modules->AddService(cmd);
        }
 
        Version GetVersion()