summaryrefslogtreecommitdiff
path: root/src/nickserv.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-08-24 13:56:48 -0400
committerAdam <Adam@anope.org>2011-08-24 13:56:48 -0400
commit5d681a74ad8ab7c771e07673413801fd1c4f6e5b (patch)
treef46a0914d382c40820f00fc662e85bca98313f09 /src/nickserv.cpp
parent21a8bff0113204fa7e4f3257fdbaf851f006b748 (diff)
Clear NS_HELD from nicks when recover expiry is up
Diffstat (limited to 'src/nickserv.cpp')
-rw-r--r--src/nickserv.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/nickserv.cpp b/src/nickserv.cpp
index c88eab55f..ca5d3d48c 100644
--- a/src/nickserv.cpp
+++ b/src/nickserv.cpp
@@ -16,9 +16,11 @@ nickalias_map NickAliasList;
nickcore_map NickCoreList;
typedef std::map<Anope::string, NickServCollide *> nickservcollides_map;
+typedef std::map<Anope::string, NickServHeld *> nickservheld_map;
typedef std::map<Anope::string, NickServRelease *> nickservreleases_map;
static nickservcollides_map NickServCollides;
+static nickservheld_map NickServHelds;
static nickservreleases_map NickServReleases;
NickServCollide::NickServCollide(User *user, time_t delay) : Timer(delay), u(user), nick(u->nick)
@@ -48,6 +50,26 @@ void NickServCollide::Tick(time_t ctime)
u->Collide(na);
}
+NickServHeld::NickServHeld(NickAlias *n, long l) : Timer(l), na(n), nick(na->nick)
+{
+ nickservheld_map::iterator nit = NickServHelds.find(na->nick);
+ if (nit != NickServHelds.end())
+ delete nit->second;
+
+ NickServHelds[na->nick] = this;
+}
+
+NickServHeld::~NickServHeld()
+{
+ NickServHelds.erase(this->nick);
+}
+
+void NickServHeld::Tick(time_t)
+{
+ if (na)
+ na->UnsetFlag(NS_HELD);
+}
+
NickServRelease::NickServRelease(NickAlias *na, time_t delay) : User(na->nick, Config->NSEnforcerUser, Config->NSEnforcerHost, ts6_uid_retrieve()), Timer(delay), nick(na->nick)
{
this->realname = "Services Enforcer";