]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/inspircd.h
Extract command line option parsing to a function.
[user/henk/code/inspircd.git] / include / inspircd.h
index b028280f7c661309bfb48dfb3916b06a61900657..f3e718dcc5d3f5711a620bcbb39fd7c0496fa06a 100644 (file)
 
 #pragma once
 
+// If the system has a pre-C11 stdint header this must be defined in
+// order to use the numeric limit macros.
+#define __STDC_LIMIT_MACROS
+
 #include <cfloat>
 #include <climits>
 #include <cmath>
@@ -50,6 +54,7 @@
 #include "compat.h"
 #include "aligned_storage.h"
 #include "typedefs.h"
+#include "convto.h"
 #include "stdalgo.h"
 
 CoreExport extern InspIRCd* ServerInstance;
@@ -66,12 +71,13 @@ struct fakederef
 };
 
 #include "config.h"
-#include "convto.h"
 #include "dynref.h"
 #include "consolecolors.h"
 #include "cull_list.h"
+#include "serialize.h"
 #include "extensible.h"
 #include "fileutils.h"
+#include "ctables.h"
 #include "numerics.h"
 #include "numeric.h"
 #include "uid.h"
@@ -83,7 +89,6 @@ struct fakederef
 #include "logger.h"
 #include "usermanager.h"
 #include "socket.h"
-#include "ctables.h"
 #include "command_parse.h"
 #include "mode.h"
 #include "socketengine.h"
@@ -91,6 +96,7 @@ struct fakederef
 #include "filelogger.h"
 #include "message.h"
 #include "modules.h"
+#include "clientprotocol.h"
 #include "threadengine.h"
 #include "configreader.h"
 #include "inspstring.h"
@@ -175,15 +181,6 @@ class serverstats
 class CoreExport InspIRCd
 {
  private:
-       /** Set up the signal handlers
-        */
-       void SetSignals();
-
-       /** Daemonize the ircd and close standard input/output streams
-        * @return True if the program daemonized succesfully
-        */
-       bool DaemonSeed();
-
        /** The current time, updated in the mainloop
         */
        struct timespec TIME;
@@ -193,10 +190,7 @@ 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();
+       ClientProtocol::RFCEvents rfcevents;
 
  public:
 
@@ -281,7 +275,7 @@ class CoreExport InspIRCd
         */
        TimerManager Timers;
 
-       /** X-Line manager. Handles G/K/Q/E line setting, removal and matching
+       /** X-line manager. Handles G/K/Q/E-line setting, removal and matching
         */
        XLineManager* XLines;
 
@@ -297,7 +291,7 @@ class CoreExport InspIRCd
         */
        std::vector<ListenSocket*> ports;
 
-       /** Set to the current signal recieved
+       /** Set to the current signal received
         */
        static sig_atomic_t s_signal;
 
@@ -345,9 +339,9 @@ class CoreExport InspIRCd
        static void DefaultGenRandom(char* output, size_t max);
 
        /** Bind to a specific port from a config tag.
-        * @param Tag the tag that contains bind information.
+        * @param tag the tag that contains bind information.
         * @param sa The endpoint to listen on.
-        * @params old_ports Previously listening ports that may be on the same endpoint.
+        * @param old_ports Previously listening ports that may be on the same endpoint.
         */
        bool BindPort(ConfigTag* tag, const irc::sockets::sockaddrs& sa, std::vector<ListenSocket*>& old_ports);
 
@@ -400,12 +394,12 @@ class CoreExport InspIRCd
        static bool IsSID(const std::string& sid);
 
        /** Handles incoming signals after being set
-        * @param signal the signal recieved
+        * @param signal the signal received
         */
        void SignalHandler(int signal);
 
-       /** Sets the signal recieved
-        * @param signal the signal recieved
+       /** Sets the signal received
+        * @param signal the signal received
         */
        static void SetSignal(int signal);
 
@@ -499,6 +493,26 @@ class CoreExport InspIRCd
         */
        static unsigned long Duration(const std::string& str);
 
+       /** Calculate a duration in seconds from a string in the form 1y2w3d4h6m5s
+        * @param str A string containing a time in the form 1y2w3d4h6m5s
+        * (one year, two weeks, three days, four hours, six minutes and five seconds)
+        * @param duration The location to place the parsed duration valur
+        * @return Whether the duration was a valid format or not
+        */
+       static bool Duration(const std::string& str, unsigned long& duration);
+
+       /** Determines whether a string contains a valid duration.
+        * @param str A string containing a time in the form 1y2w3d4h6m5s
+        * @return True if the string is a valid duration; otherwise, false.
+        */
+       static bool IsValidDuration(const std::string& str);
+
+       /** Return a duration in seconds as a human-readable string.
+        * @param duration The duration in seconds to convert to a human-readable string.
+        * @return A string representing the given duration.
+        */
+       static std::string DurationString(time_t duration);
+
        /** Attempt to compare a password to a string from the config file.
         * This will be passed to handling modules which will compare the data
         * against possible hashed equivalents in the input string.
@@ -565,29 +579,30 @@ class CoreExport InspIRCd
        {
                return this->ReadBuffer;
        }
+
+       ClientProtocol::RFCEvents& GetRFCEvents() { return rfcevents; }
 };
 
 ENTRYPOINT;
 
-template<class Cmd>
-class CommandModule : public Module
-{
-       Cmd cmd;
- public:
-       CommandModule() : cmd(this)
-       {
-       }
-
-       Version GetVersion() CXX11_OVERRIDE
-       {
-               return Version(cmd.name, VF_VENDOR|VF_CORE);
-       }
-};
-
 inline void stdalgo::culldeleter::operator()(classbase* item)
 {
        if (item)
                ServerInstance->GlobalCulls.AddItem(item);
 }
 
+inline void Channel::Write(ClientProtocol::EventProvider& protoevprov, ClientProtocol::Message& msg, char status, const CUList& except_list)
+{
+       ClientProtocol::Event event(protoevprov, msg);
+       Write(event, status, except_list);
+}
+
+inline void LocalUser::Send(ClientProtocol::EventProvider& protoevprov, ClientProtocol::Message& msg)
+{
+       ClientProtocol::Event event(protoevprov, msg);
+       Send(event);
+}
+
 #include "numericbuilder.h"
+#include "clientprotocolmsg.h"
+#include "clientprotocolevent.h"