+
+ /** Do one iteration of the mainloop
+ * @param process_module_sockets True if module sockets are to be processed
+ * this time around the event loop. The is the default.
+ */
+ void DoOneIteration(bool process_module_sockets = true);
+
+ /** Output a log message to the ircd.log file
+ * The text will only be output if the current loglevel
+ * is less than or equal to the level you provide
+ * @param level A log level from the DebugLevel enum
+ * @param text Format string of to write to the log
+ * @param ... Format arguments of text to write to the log
+ */
+ void Log(int level, const char* text, ...);
+
+ /** Output a log message to the ircd.log file
+ * The text will only be output if the current loglevel
+ * is less than or equal to the level you provide
+ * @param level A log level from the DebugLevel enum
+ * @param text Text to write to the log
+ */
+ void Log(int level, const std::string &text);
+
+ /** Send a line of WHOIS data to a user.
+ * @param user user to send the line to
+ * @param dest user being WHOISed
+ * @param numeric Numeric to send
+ * @param text Text of the numeric
+ */
+ void SendWhoisLine(userrec* user, userrec* dest, int numeric, const std::string &text);
+
+ /** Send a line of WHOIS data to a user.
+ * @param user user to send the line to
+ * @param dest user being WHOISed
+ * @param numeric Numeric to send
+ * @param format Format string for the numeric
+ * @param ... Parameters for the format string
+ */
+ void SendWhoisLine(userrec* user, userrec* dest, int numeric, const char* format, ...);
+
+ /** Quit a user for excess flood, and if they are not
+ * fully registered yet, temporarily zline their IP.
+ * @param current user to quit
+ */
+ caller1<void, userrec*> FloodQuitUser;
+
+ /** Restart the server.
+ * This function will not return. If an error occurs,
+ * it will throw an instance of CoreException.
+ * @param reason The restart reason to show to all clients
+ * @throw CoreException An instance of CoreException indicating the error from execv().
+ */
+ void Restart(const std::string &reason);
+
+ /** Prepare the ircd for restart or shutdown.
+ * This function unloads all modules which can be unloaded,
+ * closes all open sockets, and closes the logfile.
+ */
+ void Cleanup();
+
+ /** This copies the user and channel hash_maps into new hash maps.
+ * This frees memory used by the hash_map allocator (which it neglects
+ * to free, most of the time, using tons of ram)
+ */
+ void RehashUsersAndChans();
+
+ /** Resets the cached max bans value on all channels.
+ * Called by rehash.
+ */
+ void ResetMaxBans();
+
+ /** Return a time_t as a human-readable string.
+ */
+ std::string TimeString(time_t curtime);
+
+ /** Begin execution of the server.
+ * NOTE: this function NEVER returns. Internally,
+ * after performing some initialisation routines,
+ * it will repeatedly call DoOneIteration in a loop.
+ * @return The return value for this function is undefined.
+ */