X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fcull_list.h;h=c5daab5dd5befac31a0e4544b6788033f8d0df7d;hb=b80d1be349a5a5dbb16cde08d59543a553f9a382;hp=ca7189f4ce9b0603026cc27098e6c57efa48fbb4;hpb=0cf08426b2ff53d6fc1ca8125a57c79d87070b7b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/cull_list.h b/include/cull_list.h index ca7189f4c..c5daab5dd 100644 --- a/include/cull_list.h +++ b/include/cull_list.h @@ -2,12 +2,9 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. - * E-mail: - * - * + * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits * - * Written by Craig Edwards, Craig McLure, and others. * This program is free but copyrighted software; see * the file COPYING for details. * @@ -19,45 +16,77 @@ // include the common header files -#include -#include #include #include -#include #include #include "users.h" #include "channels.h" +class InspIRCd; + /** The CullItem class holds a user and their quitmessage, * and is used internally by the CullList class to compile * a list of users which are to be culled when a long * operation (such as a netsplit) has completed. */ -class CullItem +class CoreExport CullItem : public classbase { private: /** Holds a pointer to the user, * must be valid and can be a local or remote user. */ - userrec* user; + User* user; /** Holds the quit reason to use for this user. */ - std::string reason; + std::string reason; + /** Holds the quit reason opers see, if different from users + */ + std::string oper_reason; + /** Silent items dont generate an snotice. + */ + bool silent; public: + /** Constrcutor. + * Initializes the CullItem with a user pointer + * and their quit reason + * @param u The user to add + * @param r The quit reason of the added user + * @param ro The quit reason to show to opers only + */ + CullItem(User* u, std::string &r, const char* ro = ""); /** Constrcutor. * Initializes the CullItem with a user pointer * and their quit reason * @param u The user to add * @param r The quit reason of the added user + * @param ro The quit reason to show to opers only */ - CullItem(userrec* u, std::string &r); - CullItem(userrec* u, const char* r); - /** Returns a pointer to the user + CullItem(User* u, const char* r, const char* ro = ""); + + /** Make the quit silent a module is dealing with + * displaying this users quit, so we shouldn't + * send anything out. + */ + void MakeSilent(); + + /** Returns true if the quit for this user has been set + * to silent. + */ + bool IsSilent(); + + /** Destructor */ - userrec* GetUser(); + ~CullItem(); + + /** Returns a pointer to the user + */ + User* GetUser(); /** Returns the user's quit reason + */ + std::string& GetReason(); + /** Returns oper reason */ - std::string GetReason(); + std::string& GetOperReason(); }; /** The CullList class can be used by modules, and is used @@ -73,49 +102,61 @@ class CullItem * you attempt to add the same user twice, then the second * attempt will be ignored. */ -class CullList +class CoreExport CullList : public classbase { private: - /** Holds a list of users being quit. - * See the information for CullItem for - * more information. - */ - std::vector list; - /** A list of users who have already been - * placed on the list, as a map for fast - * reference. When deleting an item, the - * time_t value stored here must match - * the one of the actual userrec, otherwise - * we don't delete it (its a different user) - */ - std::map exempt; - - /** Check if a user pointer is valid - * (e.g. it exists in the user hash) - */ - bool IsValid(userrec* user); + /** Creator of this CullList + */ + InspIRCd* ServerInstance; + + /** Holds a list of users already added for quick lookup + */ + std::map exempt; + + /** Holds a list of users being quit. + * See the information for CullItem for + * more information. + */ + std::vector list; + public: - /** Constructor. - * Clears the CullList::list and CullList::exempt - * items. - */ - CullList(); - /** Adds a user to the cull list for later - * removal via QUIT. - * @param user The user to add - * @param reason The quit reason of the user being added - */ - void AddItem(userrec* user, std::string &reason); - void AddItem(userrec* user, const char* reason); - /** Applies the cull list, quitting all the users - * on the list with their quit reasons all at once. - * This is a very fast operation compared to - * iterating the user list and comparing each one, - * especially if there are multiple comparisons - * to be done, or recursion. - * @returns The number of users removed from IRC. - */ - int Apply(); + /** Constructor. + * Clears the CullList::list and CullList::exempt + * items. + * @param Instance Creator of this CullList object + */ + CullList(InspIRCd* Instance); + + /** Adds a user to the cull list for later + * removal via QUIT. + * @param user The user to add + * @param reason The quit reason of the user being added + * @param o_reason The quit reason to show only to opers + */ + void AddItem(User* user, std::string &reason, const char* o_reason = ""); + + /** Adds a user to the cull list for later + * removal via QUIT. + * @param user The user to add + * @param reason The quit reason of the user being added + * @param o_reason The quit reason to show only to opers + */ + void AddItem(User* user, const char* reason, const char* o_reason = ""); + + /* Turn an item into a silent item (don't send out QUIT for this user) + */ + void MakeSilent(User* user); + + /** Applies the cull list, quitting all the users + * on the list with their quit reasons all at once. + * This is a very fast operation compared to + * iterating the user list and comparing each one, + * especially if there are multiple comparisons + * to be done, or recursion. + * @returns The number of users removed from IRC. + */ + int Apply(); }; #endif +