summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/inspircd.h161
1 files changed, 159 insertions, 2 deletions
diff --git a/include/inspircd.h b/include/inspircd.h
index d0c8f4ca0..eff48b6ae 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -93,75 +93,232 @@ class XLineManager;
class InspIRCd : public classbase
{
private:
+ /** Holds a string describing the last module error to occur
+ */
char MODERR[MAXBUF];
+
+ /** This is an internal flag used by the mainloop
+ */
bool expire_run;
+
+ /** List of server names we've seen.
+ */
servernamelist servernames;
+ /** Remove a ModuleFactory pointer
+ */
void EraseFactory(int j);
+
+ /** Remove a Module pointer
+ */
void EraseModule(int j);
+
+ /** Build the ISUPPORT string by triggering all modules On005Numeric events
+ */
void BuildISupport();
+
+ /** Move a given module to a specific slot in the list
+ */
void MoveTo(std::string modulename,int slot);
+
+ /** Display the startup banner
+ */
void Start();
+
+ /** Set up the signal handlers
+ */
void SetSignals(bool SEGVHandler);
+
+ /** Daemonize the ircd and close standard input/output streams
+ */
bool DaemonSeed();
+
+ /** Build the upper/lowercase comparison table
+ */
void MakeLowerMap();
+
+ /** Moves the given module to the last slot in the list
+ */
void MoveToLast(std::string modulename);
+
+ /** Moves the given module to the first slot in the list
+ */
void MoveToFirst(std::string modulename);
+
+ /** Moves one module to be placed after another in the list
+ */
void MoveAfter(std::string modulename, std::string after);
+
+ /** Moves one module to be placed before another in the list
+ */
void MoveBefore(std::string modulename, std::string before);
+ /** Process a user whos socket has been flagged as active
+ */
void ProcessUser(userrec* cu);
+
+ /** Iterate the list of InspSocket objects, removing ones which have timed out
+ */
void DoSocketTimeouts(time_t TIME);
+
+ /** Perform background user events such as PING checks
+ */
void DoBackgroundUserStuff(time_t TIME);
+ /** Returns true when all modules have done pre-registration checks on a user
+ */
bool AllModulesReportReady(userrec* user);
+ /** Total number of modules loaded into the ircd, minus one
+ */
int ModCount;
+
+ /** Logfile pathname specified on the commandline, or empty string
+ */
char LogFileName[MAXBUF];
+ /** The feature names published by various modules
+ */
featurelist Features;
+ /** The current time, updated in the mainloop
+ */
time_t TIME;
+
+ /** The time that was recorded last time around the mainloop
+ */
time_t OLDTIME;
+ /** A 64k buffer used to read client lines into
+ */
char ReadBuffer[65535];
+ /** Number of seconds in a minute
+ */
const long duration_m;
+
+ /** Number of seconds in an hour
+ */
const long duration_h;
+
+ /** Number of seconds in a day
+ */
const long duration_d;
+
+ /** Number of seconds in a week
+ */
const long duration_w;
+
+ /** Number of seconds in a year
+ */
const long duration_y;
public:
+ /** Time this ircd was booted
+ */
time_t startup_time;
+
+ /** Mode handler, handles mode setting and removal
+ */
ModeParser* Modes;
+
+ /** Command parser, handles client to server commands
+ */
CommandParser* Parser;
+
+ /** Socket engine, handles socket activity events
+ */
SocketEngine* SE;
+
+ /** Stats class, holds miscellaneous stats counters
+ */
serverstats* stats;
+
+ /** Server Config class, holds configuration file data
+ */
ServerConfig* Config;
+
+ /** Module sockets list, holds the active set of InspSocket classes
+ */
std::vector<InspSocket*> module_sockets;
- InspSocket* socket_ref[MAX_DESCRIPTORS]; /* XXX: This should probably be made private, with inline accessors */
- userrec* fd_ref_table[MAX_DESCRIPTORS]; /* XXX: Ditto */
+
+ /** Socket reference table, provides fast lookup of fd to InspSocket*
+ */
+ InspSocket* socket_ref[MAX_DESCRIPTORS];
+
+ /** user reference table, provides fast lookup of fd to userrec*
+ */
+ userrec* fd_ref_table[MAX_DESCRIPTORS];
+
+ /** Client list, a hash_map containing all clients, local and remote
+ */
user_hash clientlist;
+
+ /** Channel list, a hash_map containing all channels
+ */
chan_hash chanlist;
+
+ /** Local client list, a vector containing only local clients
+ */
std::vector<userrec*> local_users;
+
+ /** Oper list, a vector containing all local and remote opered users
+ */
std::vector<userrec*> all_opers;
+
+ /** Whowas container, contains a map of vectors of users tracked by WHOWAS
+ */
irc::whowas::whowas_users whowas;
+
+ /** DNS class, provides resolver facilities to the core and modules
+ */
DNS* Res;
+
+ /** Timer manager class, triggers InspTimer timer events
+ */
TimerManager* Timers;
+
+ /** Command list, a hash_map of command names to command_t*
+ */
command_table cmdlist;
+
+ /** X-Line manager. Handles G/K/Q/E line setting, removal and matching
+ */
XLineManager* XLines;
+ /** A list of Module* module classes
+ * Note that this list is always exactly 255 in size.
+ * The actual number of loaded modules is available from GetModuleCount()
+ */
ModuleList modules;
+
+ /** A list of ModuleFactory* module factories
+ * Note that this list is always exactly 255 in size.
+ * The actual number of loaded modules is available from GetModuleCount()
+ */
FactoryList factory;
+ /** Get the current time
+ * Because this only calls time() once every time around the mainloop,
+ * it is much faster than calling time() directly.
+ */
time_t Time();
+ /** Get the total number of currently loaded modules
+ */
int GetModuleCount();
+ /** Find a module by name, and return a Module* to it.
+ * This is preferred over iterating the module lists yourself.
+ * @param name The module name to look up
+ */
Module* FindModule(const std::string &name);
+ /** Bind all ports specified in the configuration file.
+ * @param bail True if the function should bail back to the shell on failure
+ */
int BindPorts(bool bail);
+
bool HasPort(int port, char* addr);
bool BindSocket(int sockfd, insp_sockaddr client, insp_sockaddr server, int port, char* addr);