X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Finspircd.h;h=dfc36a720b4b6734639c144daa9ee52f24c6738e;hb=d54fd9b1e6b31f69332a9241b5f17330c0ad61e0;hp=d72b5f5b7ae9c06362647a64af5b6b1c78ec3ac7;hpb=5adcab2223c1f64550f24c2b1d49d1299ceb69d5;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/inspircd.h b/include/inspircd.h index d72b5f5b7..dfc36a720 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -25,9 +25,9 @@ #include "channels.h" #include "socket.h" #include "mode.h" - #include "socketengine.h" #include "command_parse.h" +#include "snomasks.h" /** Returned by some functions to indicate failure, * and the exit code of the program if it terminates. @@ -59,7 +59,11 @@ enum DebugLevel /** Delete a pointer, and NULL its value */ -#define DELETE(x) {if (x) { delete x; x = NULL; }} +template inline void DELETE(T* x) +{ + delete x; + x = NULL; +} /** Template function to convert any input type to std::string */ @@ -135,6 +139,9 @@ class InspIRCd; * block for undesirable amounts of time (half of a second through * to whole seconds). We DO NOT want this, so we make our logfile * nonblocking and hook it into the SocketEngine. + * NB: If the operating system does not support nonblocking file + * I/O (linux seems to, as does freebsd) this will default to + * blocking behaviour. */ class FileLogger : public EventHandler { @@ -153,30 +160,39 @@ class FileLogger : public EventHandler */ int writeops; public: - /** The constructor takes an already opened logfile + /** The constructor takes an already opened logfile. */ FileLogger(InspIRCd* Instance, FILE* logfile); - /** This returns false, logfiles are writeable - */ - bool Readable(); - /** Handle pending write events - */ - void HandleEvent(EventType et); - /** Write one or more preformatted log lines + /** This returns false, logfiles are writeable. + */ + virtual bool Readable(); + /** Handle pending write events. + * This will flush any waiting data to disk. + * If any data remains after the fprintf call, + * another write event is scheduled to write + * the rest of the data when possible. + */ + virtual void HandleEvent(EventType et); + /** Write one or more preformatted log lines. + * If the data cannot be written immediately, + * this class will insert itself into the + * SocketEngine, and register a write event, + * and when the write event occurs it will + * attempt again to write the data. */ void WriteLogLine(const std::string &line); /** Close the log file and cancel any events. */ - void Close(); + virtual void Close(); /** Close the log file and cancel any events. * (indirectly call Close() */ - ~FileLogger(); + virtual ~FileLogger(); }; class XLineManager; -/** The main singleton class of the irc server. +/** The main class of the irc server. * This class contains instances of all the other classes * in this software, with the exception of the base class, * classbase. Amongst other things, it contains a ModeParser, @@ -357,9 +373,10 @@ class InspIRCd : public classbase */ ServerConfig* Config; - /** Module sockets list, holds the active set of InspSocket classes + /** Snomask manager - handles routing of snomask messages + * to opers. */ - std::vector module_sockets; + SnomaskManager* SNO; /** Client list, a hash_map containing all clients, local and remote */ @@ -852,21 +869,6 @@ class InspIRCd : public classbase */ bool IsValidMask(const std::string &mask); - /** Add an InspSocket class to the active set - * @param sock A socket to add to the active set - */ - void AddSocket(InspSocket* sock); - - /** Remove an InspSocket class from the active set at next time around the loop - * @param sock A socket to remove from the active set - */ - void RemoveSocket(InspSocket* sock); - - /** Delete a socket immediately without waiting for the next iteration of the mainloop - * @param sock A socket to delete from the active set - */ - void DelSocket(InspSocket* sock); - /** Rehash the local server */ void RehashServer();