+ /** UUID -> User* map. Contains all users, including unregistered ones.
+ */
+ user_hash uuidlist;
+
+ /** Oper list, a vector containing all local and remote opered users
+ */
+ OperList all_opers;
+
+ /** Number of unregistered users online right now.
+ * (Unregistered means before USER/NICK/dns)
+ */
+ unsigned int unregistered_count;
+
+ /** Perform background user events for all local users such as PING checks, registration timeouts,
+ * penalty management and recvq processing for users who have data in their recvq due to throttling.
+ */
+ void DoBackgroundUserStuff();
+
+ /** Returns true when all modules have done pre-registration checks on a user
+ * @param user The user to verify
+ * @return True if all modules have finished checking this user
+ */
+ bool AllModulesReportReady(LocalUser* user);
+
+ /** Handle a client connection.
+ * Creates a new LocalUser object, inserts it into the appropriate containers,
+ * initializes it as not yet registered, and adds it to the socket engine.
+ *
+ * The new user may immediately be quit after being created, for example if the user limit
+ * is reached or if the user is banned.
+ * @param socket File descriptor of the connection
+ * @param via Listener socket that this user connected to
+ * @param client The IP address and client port of the user
+ * @param server The server IP address and port used by the user
+ */
+ void AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server);
+
+ /** Disconnect a user gracefully.
+ * When this method returns the user provided will be quit, but the User object will continue to be valid and will be deleted at the end of the current main loop iteration.
+ * @param user The user to remove
+ * @param quitreason The quit reason to show to normal users
+ * @param operreason The quit reason to show to opers, can be NULL if same as quitreason