X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmode.h;h=e7ac756ecdaa636faf524166a272776f3fcea400;hb=a7a0f69c6bf32b63c3314a097929c533296b1c86;hp=cbe20ff972baa87f05938c48d9fed32ee76c8bc8;hpb=117db983d2ce28aeb1d1e0d36879c4ea1c34f10a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/mode.h b/include/mode.h index cbe20ff97..e7ac756ec 100644 --- a/include/mode.h +++ b/include/mode.h @@ -168,6 +168,11 @@ class CoreExport ModeHandler : public ServiceProvider ModeHandler(Module* me, const std::string& name, char modeletter, ParamSpec params, ModeType type, Class mclass = MC_OTHER); virtual CullResult cull(); virtual ~ModeHandler(); + + /** Register this object in the ModeParser + */ + void RegisterService() CXX11_OVERRIDE; + /** * Returns true if the mode is a list mode */ @@ -473,8 +478,6 @@ class CoreExport ModeWatcher : public classbase virtual void AfterMode(User* source, User* dest, Channel* channel, const std::string& parameter, bool adding); }; -typedef std::multimap::iterator ModeWatchIter; - /** The mode parser handles routing of modes and handling of mode strings. * It marshalls, controls and maintains both ModeWatcher and ModeHandler classes, * parses client to server MODE strings for user and channel modes, and performs @@ -490,6 +493,10 @@ class CoreExport ModeParser : public fakederef typedef TR1NS::unordered_map ModeHandlerMap; private: + /** Type of the container that maps mode names to ModeWatchers + */ + typedef insp::flat_multimap ModeWatcherMap; + /** Last item in the ModeType enum */ static const unsigned int MODETYPE_LAST = 2; @@ -524,21 +531,12 @@ class CoreExport ModeParser : public fakederef /** Mode watcher classes */ - std::multimap modewatchermap; + ModeWatcherMap modewatchermap; /** Last processed mode change */ Modes::ChangeList LastChangeList; - /** Displays the current modes of a channel or user. - * Used by ModeParser::Process. - */ - void DisplayCurrentModes(User* user, User* targetuser, Channel* targetchannel); - /** Displays the value of a list mode - * Used by ModeParser::Process. - */ - void DisplayListModes(User* user, Channel* chan, const std::string& mode_sequence); - /** * Attempts to apply a mode change to a user or channel */ @@ -569,10 +567,6 @@ class CoreExport ModeParser : public fakederef */ std::string LastParse; - unsigned int sent[256]; - - unsigned int seq; - /** Cached mode list for use in 004 numeric */ std::string Cached004ModeList; @@ -671,14 +665,6 @@ class CoreExport ModeParser : public fakederef * @return True if the ModeWatcher was deleted correctly */ bool DelModeWatcher(ModeWatcher* mw); - /** Process a set of mode changes from a server or user. - * @param parameters The parameters of the mode change, in the format - * they would be from a MODE command. - * @param user The source of the mode change, can be a server user. - * @param flags Optional flags controlling how the mode change is processed, - * defaults to MODE_NONE. - */ - void Process(const std::vector& parameters, User* user, ModeProcessFlag flags = MODE_NONE); /** Process a list of mode changes entirely. If the mode changes do not fit into one MODE line * then multiple MODE lines are generated. @@ -786,6 +772,13 @@ class CoreExport ModeParser : public fakederef * @return A map of mode handlers of the given type */ const ModeHandlerMap& GetModes(ModeType mt) const { return modehandlersbyname[mt]; } + + /** Show the list of a list mode to a user. Modules can deny the listing. + * @param user User to show the list to. + * @param chan Channel to show the list of. + * @param mh List mode to show the list of. + */ + void ShowListModeList(User* user, Channel* chan, ModeHandler* mh); }; inline const std::string& ModeParser::GetModeListFor004Numeric()