X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_watch.cpp;h=e70270424978a17b0a7aad85ed83f8394ba0784a;hb=819147178db00008a215670992d0f532dd57f9e5;hp=62949e48a12495060965c21a7663eaa14c288e12;hpb=7d7250484c352c13830e63ae41ee8faae40a9bd5;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_watch.cpp b/src/modules/m_watch.cpp index 62949e48a..e70270424 100644 --- a/src/modules/m_watch.cpp +++ b/src/modules/m_watch.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -49,7 +49,7 @@ * * KEY: Brain ---> Watched by: Boo, w00t, Om * KEY: Boo ---> Watched by: Brain, w00t - * + * * This is used when we want to tell all the users that are watching someone that * they are now available or no longer available. For example, if the hash was * populated as shown above, then when Brain signs on, messages are sent to Boo, w00t @@ -87,10 +87,10 @@ * Before you start screaming, this definition is only used here, so moving it to a header is pointless. * Yes, it's horrid. Blame cl for being different. -- w00t */ -#ifdef WINDOWS -typedef nspace::hash_map, nspace::hash_compare > > watchentries; +#if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED) + typedef nspace::hash_map, nspace::hash_compare > > watchentries; #else -typedef nspace::hash_map, nspace::hash > watchentries; + typedef nspace::hash_map, nspace::hash > watchentries; #endif typedef std::map watchlist; @@ -114,16 +114,16 @@ class CommandSVSWatch : public Command { if (!ServerInstance->ULine(user->server)) return CMD_FAILURE; - + User *u = ServerInstance->FindNick(parameters[0]); if (!u) return CMD_FAILURE; - + if (IS_LOCAL(u)) { ServerInstance->Parser->CallHandler("WATCH", parameters, u); } - + return CMD_SUCCESS; } }; @@ -162,7 +162,7 @@ class CommandWatch : public Command wl->erase(n); } - if (!wl->size()) + if (wl->empty()) { user->Shrink("watchlist"); delete wl; @@ -177,16 +177,13 @@ class CommandWatch : public Command /* I'm no longer watching you... */ x->second.erase(n2); - if (!x->second.size()) + if (x->second.empty()) + /* nobody else is, either. */ whos_watching_me->erase(nick); } } - /* This might seem confusing, but we return CMD_FAILURE - * to indicate that this message shouldnt be routed across - * the network to other linked servers. - */ - return CMD_FAILURE; + return CMD_LOCALONLY; } CmdResult add_watch(User* user, const char* nick) @@ -251,7 +248,7 @@ class CommandWatch : public Command } } - return CMD_FAILURE; + return CMD_LOCALONLY; } CommandWatch (InspIRCd* Instance, unsigned int &maxwatch) : Command(Instance,"WATCH",0,0), MAX_WATCH(maxwatch) @@ -263,7 +260,7 @@ class CommandWatch : public Command CmdResult Handle (const std::vector ¶meters, User *user) { - if (!parameters.size()) + if (parameters.empty()) { watchlist* wl; if (user->GetExt("watchlist", wl)) @@ -298,8 +295,9 @@ class CommandWatch : public Command /* I'm no longer watching you... */ i2->second.erase(n); - if (!i2->second.size()) - whos_watching_me->erase(user->nick.c_str()); + if (i2->second.empty()) + /* nobody else is, either. */ + whos_watching_me->erase(i2); } } @@ -363,8 +361,7 @@ class CommandWatch : public Command } } } - /* So that spanningtree doesnt pass the WATCH commands to the network! */ - return CMD_FAILURE; + return CMD_LOCALONLY; } }; @@ -373,12 +370,12 @@ class Modulewatch : public Module CommandWatch* mycommand; CommandSVSWatch *sw; unsigned int maxwatch; - + public: Modulewatch(InspIRCd* Me) : Module(Me), maxwatch(32) { - OnRehash(NULL, ""); + OnRehash(NULL); whos_watching_me = new watchentries(); mycommand = new CommandWatch(ServerInstance, maxwatch); ServerInstance->AddCommand(mycommand); @@ -388,7 +385,7 @@ class Modulewatch : public Module ServerInstance->Modules->Attach(eventlist, this, 8); } - virtual void OnRehash(User* user, const std::string ¶meter) + virtual void OnRehash(User* user) { ConfigReader Conf(ServerInstance); maxwatch = Conf.ReadInteger("watch", "maxentries", 0, true); @@ -432,7 +429,7 @@ class Modulewatch : public Module { for (std::deque::iterator n = x->second.begin(); n != x->second.end(); n++) { - if (!user->Visibility || user->Visibility->VisibleTo(user)) + if (!user->Visibility || user->Visibility->VisibleTo(*n)) (*n)->WriteNumeric(601, "%s %s %s %s %lu :went offline", (*n)->nick.c_str() ,user->nick.c_str(), user->ident.c_str(), user->dhost.c_str(), (unsigned long) ServerInstance->Time()); watchlist* wl; @@ -457,9 +454,10 @@ class Modulewatch : public Module if (n != i2->second.end()) /* I'm no longer watching you... */ i2->second.erase(n); - - if (!i2->second.size()) - whos_watching_me->erase(user->nick.c_str()); + + if (i2->second.empty()) + /* and nobody else is, either. */ + whos_watching_me->erase(i2); } } @@ -502,7 +500,7 @@ class Modulewatch : public Module { for (std::deque::iterator n = x->second.begin(); n != x->second.end(); n++) { - if (!user->Visibility || user->Visibility->VisibleTo(user)) + if (!user->Visibility || user->Visibility->VisibleTo(*n)) (*n)->WriteNumeric(600, "%s %s %s %s %lu :arrived online", (*n)->nick.c_str(), user->nick.c_str(), user->ident.c_str(), user->dhost.c_str(), (unsigned long) user->age); watchlist* wl; @@ -525,7 +523,7 @@ class Modulewatch : public Module watchlist* wl; if ((*n)->GetExt("watchlist", wl)) { - if (!user->Visibility || user->Visibility->VisibleTo(user)) + if (!user->Visibility || user->Visibility->VisibleTo(*n)) (*n)->WriteNumeric(601, "%s %s %s %s %lu :went offline", (*n)->nick.c_str(), oldnick.c_str(), user->ident.c_str(), user->dhost.c_str(), (unsigned long) user->age); (*wl)[oldnick.c_str()] = ""; } @@ -540,27 +538,27 @@ class Modulewatch : public Module if ((*n)->GetExt("watchlist", wl)) { (*wl)[user->nick.c_str()] = std::string(user->ident).append(" ").append(user->dhost).append(" ").append(ConvToStr(user->age)); - if (!user->Visibility || user->Visibility->VisibleTo(user)) + if (!user->Visibility || user->Visibility->VisibleTo(*n)) (*n)->WriteNumeric(600, "%s %s %s :arrived online", (*n)->nick.c_str(), user->nick.c_str(), (*wl)[user->nick.c_str()].c_str()); } } } - } + } virtual void On005Numeric(std::string &output) { // we don't really have a limit... output = output + " WATCH=" + ConvToStr(maxwatch); } - + virtual ~Modulewatch() { delete whos_watching_me; } - + virtual Version GetVersion() { - return Version(1, 2, 0, 0, VF_COMMON | VF_VENDOR, API_VERSION); + return Version("$Id$", VF_COMMON | VF_VENDOR, API_VERSION); } };