* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * InspIRCd: (C) 2002-2010 InspIRCd Development Team
* See: http://wiki.inspircd.org/Credits
*
* This program is free but copyrighted software; see
#else
#include "inspircd_win32wrapper.h"
/** Windows defines these already */
-#undef DELETE
#undef ERROR
#endif
#include <map>
#include <bitset>
#include <set>
+#include <time.h>
+#include "inspircd_config.h"
+#include "inspircd_version.h"
+#include "typedefs.h"
-/** A list of failed port bindings, used for informational purposes on startup */
-typedef std::vector<std::pair<std::string, std::string> > FailedPortList;
-
-class InspIRCd;
CoreExport extern InspIRCd* ServerInstance;
-#include "inspircd_config.h"
-#include "inspircd_version.h"
#include "caller.h"
#include "cull_list.h"
#include "extensible.h"
#include "channels.h"
#include "timer.h"
#include "hashcomp.h"
-#include "typedefs.h"
#include "logger.h"
#include "usermanager.h"
#include "socket.h"
#include "filelogger.h"
#include "caller.h"
#include "modules.h"
+#include "threadengine.h"
#include "configreader.h"
#include "inspstring.h"
#include "protocol.h"
-#include "threadengine.h"
-#include "fakeuser.h"
#ifndef PATH_MAX
#warning Potentially broken system, PATH_MAX undefined
{
std::stringstream tmp;
if (!(tmp << in)) return 0;
- return atoi(tmp.str().c_str());
-}
-
-/** Template function to convert integer to char, storing result in *res and
- * also returning the pointer to res. Based on Stuart Lowe's C/C++ Pages.
- * @param T input value
- * @param V result value
- * @param R base to convert to
- */
-template<typename T, typename V, typename R> inline char* itoa(const T &in, V *res, R base)
-{
- if (base < 2 || base > 16) { *res = 0; return res; }
- char* out = res;
- int quotient = in;
- while (quotient) {
- *out = "0123456789abcdef"[ std::abs( quotient % base ) ];
- ++out;
- quotient /= base;
- }
- if ( in < 0 && base == 10) *out++ = '-';
- std::reverse( res, out );
- *out = 0;
- return res;
+ return atol(tmp.str().c_str());
}
/** This class contains various STATS counters
timeval LastCPU;
/** Time last sample was read
*/
- timeval LastSampled;
+ timespec LastSampled;
/** The constructor initializes all the counts to zero
*/
serverstats()
}
};
-class InspIRCd;
-
DEFINE_HANDLER2(IsNickHandler, bool, const char*, size_t);
DEFINE_HANDLER1(IsIdentHandler, bool, const char*);
DEFINE_HANDLER1(FloodQuitUserHandler, void, User*);
DEFINE_HANDLER1(IsSIDHandler, bool, const std::string&);
DEFINE_HANDLER1(RehashHandler, void, const std::string&);
-/* Forward declaration - required */
-class XLineManager;
-class BanCacheManager;
-
-/** The background thread for config reading, so that reading from executable includes
- * does not block.
- */
-class CoreExport ConfigReaderThread : public Thread
-{
- ServerConfig* Config;
- bool done;
- public:
- std::string TheUserUID;
- ConfigReaderThread(const std::string &useruid)
- : Thread(), done(false), TheUserUID(useruid)
- {
- }
-
- virtual ~ConfigReaderThread()
- {
- }
-
- void Run();
- /** Run in the main thread to apply the configuration */
- void Finish();
- bool IsDone() { return done; }
-};
-
/** The main class of the irc server.
* This class contains instances of all the other classes in this software.
* Amongst other things, it contains a ModeParser, a DNS object, a CommandParser
* @param user The user to verify
* @return True if all modules have finished checking this user
*/
- bool AllModulesReportReady(User* user);
-
- /** Logfile pathname specified on the commandline, or empty string
- */
- char LogFileName[MAXBUF];
+ bool AllModulesReportReady(LocalUser* user);
/** 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
/** List of the open ports
*/
- std::vector<ListenSocketBase *> ports;
+ std::vector<ListenSocket*> ports;
/** Set to the current signal recieved
*/
* 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();
/** Bind all ports specified in the configuration file.
* @return The number of ports bound without error
* @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
*/
bool SilentULine(const std::string& server);
- /** Returns the subversion revision ID of this ircd
- * @return The revision ID or an empty string
- */
- std::string GetRevision();
-
/** Returns the full version string of this ircd
* @return The version string
*/
Version GetVersion()
{
- return Version(cmd.command, VF_VENDOR|VF_CORE);
+ return Version(cmd.name, VF_VENDOR|VF_CORE);
}
};