diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd_whowas.cpp | 10 | ||||
-rw-r--r-- | src/inspircd.cpp | 4 | ||||
-rw-r--r-- | src/users.cpp | 95 |
3 files changed, 58 insertions, 51 deletions
diff --git a/src/cmd_whowas.cpp b/src/cmd_whowas.cpp index 9d93517fe..ae3bdb953 100644 --- a/src/cmd_whowas.cpp +++ b/src/cmd_whowas.cpp @@ -22,11 +22,11 @@ #include "commands/cmd_whowas.h" extern ServerConfig* Config; -extern whowas_users whowas; +extern irc::whowas::whowas_users whowas; void cmd_whowas::Handle (const char** parameters, int pcnt, userrec* user) { - whowas_users::iterator i = whowas.find(parameters[0]); + irc::whowas::whowas_users::iterator i = whowas.find(parameters[0]); if (i == whowas.end()) { @@ -34,12 +34,12 @@ void cmd_whowas::Handle (const char** parameters, int pcnt, userrec* user) } else { - whowas_set* grp = i->second; + irc::whowas::whowas_set* grp = i->second; if (grp->size()) { - for (whowas_set::iterator ux = grp->begin(); ux != grp->end(); ux++) + for (irc::whowas::whowas_set::iterator ux = grp->begin(); ux != grp->end(); ux++) { - WhoWasGroup* u = *ux; + irc::whowas::WhoWasGroup* u = *ux; time_t rawtime = u->signon; tm *timeinfo; char b[MAXBUF]; diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 27029a6e4..a9d4cfb19 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -746,7 +746,7 @@ void InspIRCd::DoOneIteration(bool process_module_sockets) WriteOpers("*** \002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %d secs.",abs(OLDTIME-TIME)); if ((TIME % 3600) == 0) { - MaintainWhoWas(TIME); + irc::whowas::MaintainWhoWas(TIME); } } @@ -879,7 +879,7 @@ void InspIRCd::DoOneIteration(bool process_module_sockets) AddClient(incomingSockfd, in_port, false, client.sin6_addr); #else log(DEBUG,"Add ipv4 client"); - AddClient(incomingSockfd, in_port, false, client.sin_addr); + userrec::AddClient(incomingSockfd, in_port, false, client.sin_addr); #endif log(DEBUG,"Adding client on port %d fd=%d",in_port,incomingSockfd); } diff --git a/src/users.cpp b/src/users.cpp index dabbc870f..3ecedaf58 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -46,7 +46,7 @@ extern ServerConfig *Config; extern user_hash clientlist; extern Server* MyServer; -whowas_users whowas; +irc::whowas::whowas_users whowas; extern std::vector<userrec*> local_users; @@ -725,75 +725,82 @@ void userrec::QuitUser(userrec *user,const std::string &quitreason) } } -WhoWasGroup::WhoWasGroup(userrec* user) : host(NULL), dhost(NULL), ident(NULL), server(NULL), gecos(NULL), signon(user->signon) +namespace irc { - this->host = strdup(user->host); - this->dhost = strdup(user->dhost); - this->ident = strdup(user->ident); - this->server = user->server; - this->gecos = strdup(user->fullname); -} + namespace whowas + { -WhoWasGroup::~WhoWasGroup() -{ - if (host) - free(host); - if (dhost) - free(dhost); - if (ident) - free(ident); - if (gecos) - free(gecos); -} + WhoWasGroup::WhoWasGroup(userrec* user) : host(NULL), dhost(NULL), ident(NULL), server(NULL), gecos(NULL), signon(user->signon) + { + this->host = strdup(user->host); + this->dhost = strdup(user->dhost); + this->ident = strdup(user->ident); + this->server = user->server; + this->gecos = strdup(user->fullname); + } + + WhoWasGroup::~WhoWasGroup() + { + if (host) + free(host); + if (dhost) + free(dhost); + if (ident) + free(ident); + if (gecos) + free(gecos); + } + + /* every hour, run this function which removes all entries over 3 days */ + void MaintainWhoWas(time_t TIME) + { + for (whowas_users::iterator iter = ::whowas.begin(); iter != ::whowas.end(); iter++) + { + whowas_set* n = (whowas_set*)iter->second; + if (n->size()) + { + while ((n->begin() != n->end()) && ((*n->begin())->signon < TIME - 259200)) // 3 days + { + WhoWasGroup *a = *(n->begin()); + DELETE(a); + n->erase(n->begin()); + } + } + } + } + }; +}; /* adds or updates an entry in the whowas list */ void userrec::AddToWhoWas() { - whowas_users::iterator iter = whowas.find(this->nick); + irc::whowas::whowas_users::iterator iter = whowas.find(this->nick); if (iter == whowas.end()) { - whowas_set* n = new whowas_set; - WhoWasGroup *a = new WhoWasGroup(this); + irc::whowas::whowas_set* n = new irc::whowas::whowas_set; + irc::whowas::WhoWasGroup *a = new irc::whowas::WhoWasGroup(this); n->push_back(a); whowas[this->nick] = n; } else { - whowas_set* group = (whowas_set*)iter->second; + irc::whowas::whowas_set* group = (irc::whowas::whowas_set*)iter->second; if (group->size() > 10) { - WhoWasGroup *a = (WhoWasGroup*)*(group->begin()); + irc::whowas::WhoWasGroup *a = (irc::whowas::WhoWasGroup*)*(group->begin()); DELETE(a); group->pop_front(); } - WhoWasGroup *a = new WhoWasGroup(this); + irc::whowas::WhoWasGroup *a = new irc::whowas::WhoWasGroup(this); group->push_back(a); } } -/* every hour, run this function which removes all entries over 3 days */ -void MaintainWhoWas(time_t TIME) -{ - for (whowas_users::iterator iter = whowas.begin(); iter != whowas.end(); iter++) - { - whowas_set* n = (whowas_set*)iter->second; - if (n->size()) - { - while ((n->begin() != n->end()) && ((*n->begin())->signon < TIME - 259200)) // 3 days - { - WhoWasGroup *a = *(n->begin()); - DELETE(a); - n->erase(n->begin()); - } - } - } -} - /* add a client connection to the sockets list */ -void AddClient(int socket, int port, bool iscached, insp_inaddr ip) +void userrec::AddClient(int socket, int port, bool iscached, insp_inaddr ip) { std::string tempnick = ConvToStr(socket) + "-unknown"; user_hash::iterator iter = clientlist.find(tempnick); |