summaryrefslogtreecommitdiff
path: root/include/usermanager.h
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-03-17 11:05:09 +0100
committerAttila Molnar <attilamolnar@hush.com>2014-03-17 11:05:09 +0100
commitd60103cada2c954f6d735c0ae4fb7d9b1b5ed844 (patch)
tree43e0dfde15c012ad9e6e86ab615a6054968639c9 /include/usermanager.h
parent869fd6ca2822ef45ad7c3939b9ab7418200daf3e (diff)
Rewrite clone counting to use one map instead of two
Diffstat (limited to 'include/usermanager.h')
-rw-r--r--include/usermanager.h54
1 files changed, 29 insertions, 25 deletions
diff --git a/include/usermanager.h b/include/usermanager.h
index 040f91852..eb1d75e8d 100644
--- a/include/usermanager.h
+++ b/include/usermanager.h
@@ -21,15 +21,28 @@
#include <list>
-/** A list of ip addresses cross referenced against clone counts */
-typedef std::map<irc::sockets::cidr_mask, unsigned int> clonemap;
-
class CoreExport UserManager
{
+ 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<irc::sockets::cidr_mask, CloneCounts> CloneMap;
+
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
*/
- clonemap local_clones;
+ const CloneCounts zeroclonecounts;
public:
/** Constructor, initializes variables
@@ -62,11 +75,6 @@ class CoreExport UserManager
*/
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 +110,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 +122,18 @@ 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
+ /** 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