X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusermanager.h;h=a67f90224d628839eda4c05a6f7feac53e08cd11;hb=cd67a0a6f9380d4a54bc92370f2925f2d2a684dc;hp=040f91852a73ab024e71189c7d9157a851819a62;hpb=ea590a5d80741c3bc030cb0a2fcb3c59da4fd078;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/usermanager.h b/include/usermanager.h index 040f91852..a67f90224 100644 --- a/include/usermanager.h +++ b/include/usermanager.h @@ -21,15 +21,40 @@ #include -/** A list of ip addresses cross referenced against clone counts */ -typedef std::map clonemap; - -class CoreExport UserManager +class CoreExport UserManager : public fakederef { + public: + struct CloneCounts + { + unsigned int global; + unsigned int local; + CloneCounts() : global(0), local(0) { } + }; + + /** Container that maps IP addresses to clone counts + */ + typedef std::map CloneMap; + + /** Sequence container in which each element is a User* + */ + typedef std::vector OperList; + + /** A list holding local users + */ + typedef insp::intrusive_list LocalList; + private: - /** Map of local ip addresses for clone counting + /** Map of IP addresses for clone counting + */ + CloneMap clonemap; + + /** A CloneCounts that contains zero for both local and global + */ + const CloneCounts zeroclonecounts; + + /** Local client list, a list containing only local clients */ - clonemap local_clones; + LocalList local_users; public: /** Constructor, initializes variables @@ -49,24 +74,15 @@ class CoreExport UserManager */ user_hash uuidlist; - /** Local client list, a list containing only local clients - */ - LocalUserList local_users; - /** Oper list, a vector containing all local and remote opered users */ - std::list all_opers; + OperList all_opers; /** Number of unregistered users online right now. * (Unregistered means before USER/NICK/dns) */ unsigned int unregistered_count; - /** Map of global ip addresses for clone counting - * XXX - this should be private, but m_clones depends on it currently. - */ - clonemap global_clones; - /** * Reset the already_sent IDs so we don't wrap it around and drop a message * Also removes all expired invites @@ -102,15 +118,10 @@ class CoreExport UserManager */ void QuitUser(User* user, const std::string& quitreason, const std::string* operreason = NULL); - /** Add a user to the local clone map - * @param user The user to add - */ - void AddLocalClone(User *user); - - /** Add a user to the global clone map + /** Add a user to the clone map * @param user The user to add */ - void AddGlobalClone(User *user); + void AddClone(User* user); /** Remove all clone counts from the user, you should * use this if you change the user's IP address @@ -119,17 +130,22 @@ class CoreExport UserManager */ void RemoveCloneCounts(User *user); - /** Return the number of global clones of this user - * @param user The user to get a count for - * @return The global clone count of this user + /** Rebuild clone counts + */ + void RehashCloneCounts(); + + /** Return the number of local and global clones of this user + * @param user The user to get the clone counts for + * @return The clone counts of this user. The returned reference is volatile - you + * must assume that it becomes invalid as soon as you call any function other than + * your own. */ - unsigned long GlobalCloneCount(User *user); + const CloneCounts& GetCloneCounts(User* user) const; - /** Return the number of local clones of this user - * @param user The user to get a count for - * @return The local clone count of this user + /** Return a map containg IP addresses and their clone counts + * @return The clone count map */ - unsigned long LocalCloneCount(User *user); + const CloneMap& GetCloneMap() const { return clonemap; } /** Return a count of all global users, unknown and known connections * @return The number of users on the network, including local unregistered users @@ -161,6 +177,11 @@ class CoreExport UserManager */ user_hash& GetUsers() { return clientlist; } + /** Get a list containing all local users + * @return A const list of local users + */ + const LocalList& GetLocalUsers() const { return local_users; } + /** Send a server notice to all local users * @param text The text format string to send * @param ... The format arguments