X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Finspircd.h;h=1b1543e28dd661dd87053f8f314b6c8c558b5b7a;hb=da9adf9e29a1e7e0f914b494972013d0c0c35672;hp=7a8c1fb748e3f7a8ccb418cd36232d917c954090;hpb=e244cb2c63b1ac1d85bdbb4691f7b1bd940ae804;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/inspircd.h b/include/inspircd.h index 7a8c1fb74..1b1543e28 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -43,11 +43,24 @@ #include #include +#include "intrusive_list.h" #include "compat.h" #include "typedefs.h" +#include "stdalgo.h" CoreExport extern InspIRCd* ServerInstance; +/** Base class for manager classes that are still accessed using -> but are no longer pointers + */ +template +struct fakederef +{ + T* operator->() + { + return static_cast(this); + } +}; + #include "config.h" #include "dynref.h" #include "consolecolors.h" @@ -76,10 +89,7 @@ CoreExport extern InspIRCd* ServerInstance; #include "configreader.h" #include "inspstring.h" #include "protocol.h" - -/** Returned by some functions to indicate failure. - */ -#define ERROR -1 +#include "bancache.h" /** Template function to convert any input type to std::string */ @@ -154,6 +164,15 @@ template inline long ConvToInt(const T &in) return atol(tmp.str().c_str()); } +inline uint64_t ConvToUInt64(const std::string& in) +{ + uint64_t ret; + std::istringstream tmp(in); + if (!(tmp >> ret)) + return 0; + return ret; +} + /** This class contains various STATS counters * It is used by the InspIRCd class, which internally * has an instance of it. @@ -163,38 +182,38 @@ class serverstats public: /** Number of accepted connections */ - unsigned long statsAccept; + unsigned long Accept; /** Number of failed accepts */ - unsigned long statsRefused; + unsigned long Refused; /** Number of unknown commands seen */ - unsigned long statsUnknown; + unsigned long Unknown; /** Number of nickname collisions handled */ - unsigned long statsCollisions; + unsigned long Collisions; /** Number of DNS queries sent out */ - unsigned long statsDns; + unsigned long Dns; /** Number of good DNS replies received * NOTE: This may not tally to the number sent out, * due to timeouts and other latency issues. */ - unsigned long statsDnsGood; + unsigned long DnsGood; /** Number of bad (negative) DNS replies received * NOTE: This may not tally to the number sent out, * due to timeouts and other latency issues. */ - unsigned long statsDnsBad; + unsigned long DnsBad; /** Number of inbound connections seen */ - unsigned long statsConnects; + unsigned long Connects; /** Total bytes of data transmitted */ - unsigned long statsSent; + unsigned long Sent; /** Total bytes of data received */ - unsigned long statsRecv; + unsigned long Recv; #ifdef _WIN32 /** Cpu usage at last sample */ @@ -216,8 +235,8 @@ class serverstats /** 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), statsRecv(0) + : Accept(0), Refused(0), Unknown(0), Collisions(0), Dns(0), + DnsGood(0), DnsBad(0), Connects(0), Sent(0), Recv(0) { } }; @@ -327,19 +346,15 @@ class CoreExport InspIRCd /** Mode handler, handles mode setting and removal */ - ModeParser* Modes; + ModeParser Modes; /** Command parser, handles client to server commands */ - CommandParser* Parser; - - /** Socket engine, handles socket activity events - */ - SocketEngine* SE; + CommandParser Parser; /** Thread engine, Handles threading where required */ - ThreadEngine* Threads; + ThreadEngine Threads; /** The thread/class used to read config files in REHASH and on startup */ @@ -347,21 +362,21 @@ class CoreExport InspIRCd /** LogManager handles logging. */ - LogManager *Logs; + LogManager Logs; /** ModuleManager contains everything related to loading/unloading * modules. */ - ModuleManager* Modules; + ModuleManager Modules; /** BanCacheManager is used to speed up checking of restrictions on connection * to the IRCd. */ - BanCacheManager *BanCache; + BanCacheManager BanCache; /** Stats class, holds miscellaneous stats counters */ - serverstats* stats; + serverstats stats; /** Server Config class, holds configuration file data */ @@ -370,11 +385,11 @@ class CoreExport InspIRCd /** Snomask manager - handles routing of snomask messages * to opers. */ - SnomaskManager* SNO; + SnomaskManager SNO; /** Timer manager class, triggers Timer timer events */ - TimerManager* Timers; + TimerManager Timers; /** X-Line manager. Handles G/K/Q/E line setting, removal and matching */ @@ -382,11 +397,11 @@ class CoreExport InspIRCd /** User manager. Various methods and data associated with users. */ - UserManager *Users; + UserManager Users; /** Channel list, a hash_map containing all channels XXX move to channel manager class */ - chan_hash* chanlist; + chan_hash chanlist; /** List of the open ports */ @@ -400,6 +415,10 @@ class CoreExport InspIRCd */ ProtocolInterface* PI; + /** Default implementation of the ProtocolInterface, does nothing + */ + ProtocolInterface DefaultProtocolInterface; + /** Holds extensible for user operquit */ StringExtItem OperQuit; @@ -463,6 +482,11 @@ class CoreExport InspIRCd */ Channel* FindChan(const std::string &chan); + /** Get a hash map containing all channels, keyed by their name + * @return A hash map mapping channel names to Channel pointers + */ + chan_hash& GetChans() { return chanlist; } + /** Return true if a channel name is valid * @param chname A channel name to verify * @return True if the name is valid @@ -505,11 +529,6 @@ class CoreExport InspIRCd 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() const { return chanlist->size(); } - /** Send an error notice to all local users, opered and unopered * @param s The error string to send */ @@ -574,27 +593,6 @@ class CoreExport InspIRCd */ 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 - * @param user A user to send error text to - * @return True if the nick matches too many users - */ - bool NickMatchesEveryone(const std::string &nick, User* user); - - /** Check if the given IP mask matches too many users, send errors to the given user - * @param ip An ipmask to match against - * @param user A user to send error text to - * @return True if the ip matches too many users - */ - bool IPMatchesEveryone(const std::string &ip, User* user); - - /** Check if the given hostmask matches too many users, send errors to the given user - * @param mask A hostmask to match against - * @param user A user to send error text to - * @return True if the host matches too many users - */ - bool HostMatchesEveryone(const std::string &mask, User* user); - /** 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) @@ -609,9 +607,9 @@ class CoreExport InspIRCd * @param data The data from the config file * @param input The data input by the oper * @param hashtype The hash from the config file - * @return 0 if the strings match, 1 or -1 if they do not + * @return True if the strings match, false if they do not */ - int PassCompare(Extensible* ex, const std::string &data, const std::string &input, const std::string &hashtype); + bool PassCompare(Extensible* ex, const std::string& data, const std::string& input, const std::string& hashtype); /** Returns the full version string of this ircd * @return The version string @@ -664,8 +662,11 @@ class CoreExport InspIRCd void Cleanup(); /** Return a time_t as a human-readable string. + * @param format The format to retrieve the date/time in. See `man 3 strftime` + * for more information. If NULL, "%a %b %d %T %Y" is assumed. + * @return A string representing the given date/time. */ - static std::string TimeString(time_t curtime); + static std::string TimeString(time_t curtime, const char* format = NULL); /** Begin execution of the server. * NOTE: this function NEVER returns. Internally, @@ -695,3 +696,9 @@ class CommandModule : public Module return Version(cmd.name, VF_VENDOR|VF_CORE); } }; + +inline void stdalgo::culldeleter::operator()(classbase* item) +{ + if (item) + ServerInstance->GlobalCulls.AddItem(item); +}