X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fu_listmode.h;h=b656196e9a476388c9663b807d976b83ba8fba00;hb=a1f073f66f4b985bf776b9be2015136209c0c311;hp=d30da1e5ed5acb34316c63e28b4c753a25d100fd;hpb=a09109f61286bcd50ec5b8aaf08b98dd9a3985c3;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/u_listmode.h b/include/u_listmode.h index d30da1e5e..b656196e9 100644 --- a/include/u_listmode.h +++ b/include/u_listmode.h @@ -25,7 +25,7 @@ inline std::string stringtime() return TIME.str(); } -class ListItem +class ListItem : public classbase { public: std::string nick; @@ -33,7 +33,7 @@ public: std::string time; }; -class ListLimit +class ListLimit : public classbase { public: std::string mask; @@ -48,25 +48,46 @@ class ListModeBase : public ModeHandler { protected: Server* Srv; - std::string infokey; std::string listnumeric; std::string endoflistnumeric; std::string endofliststring; + bool tidy; std::string configtag; limitlist chanlimits; public: - ListModeBase(Server* serv, char modechar, const std::string &eolstr, const std::string &lnum, const std::string &eolnum, const std::string &ctag = "banlist") - : ModeHandler(modechar, 1, 1, true, MODETYPE_CHANNEL, false), Srv(serv), listnumeric(lnum), endoflistnumeric(eolnum), endofliststring(eolstr), configtag(ctag) + ListModeBase(Server* serv, char modechar, const std::string &eolstr, const std::string &lnum, const std::string &eolnum, bool autotidy, const std::string &ctag = "banlist") + : ModeHandler(modechar, 1, 1, true, MODETYPE_CHANNEL, false), Srv(serv), listnumeric(lnum), endoflistnumeric(eolnum), endofliststring(eolstr), tidy(autotidy), configtag(ctag) { this->DoRehash(); infokey = "exceptionbase_mode_" + std::string(1, mode) + "_list"; } + std::pair ModeSet(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter) + { + log(DEBUG,"ListMode: ModeSet()"); + modelist* el; + channel->GetExt(infokey, el); + if (el) + { + for (modelist::iterator it = el->begin(); it != el->end(); it++) + { + if(parameter == it->mask) + { + log(DEBUG,"Found item %s",parameter.c_str()); + return std::make_pair(true, parameter); + } + } + } + log(DEBUG,"Didnt find item %s",parameter.c_str()); + return std::make_pair(false, parameter); + } + virtual void DisplayList(userrec* user, chanrec* channel) { - modelist* el = (modelist*)channel->GetExt(infokey); + modelist* el; + channel->GetExt(infokey, el); if (el) { for(modelist::iterator it = el->begin(); it != el->end(); it++) @@ -117,7 +138,8 @@ class ListModeBase : public ModeHandler virtual ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding) { // Try and grab the list - modelist* el = (modelist*)channel->GetExt(infokey); + modelist* el; + channel->GetExt(infokey, el); if (adding) { @@ -130,7 +152,8 @@ class ListModeBase : public ModeHandler } // Clean the mask up - ModeParser::CleanMask(parameter); + if (this->tidy) + ModeParser::CleanMask(parameter); // Check if the item already exists in the list for (modelist::iterator it = el->begin(); it != el->end(); it++) @@ -237,7 +260,8 @@ class ListModeBase : public ModeHandler virtual void DoChannelDelete(chanrec* chan) { - modelist* list = (modelist*)chan->GetExt(infokey); + modelist* list; + chan->GetExt(infokey, list); if (list) { @@ -248,7 +272,8 @@ class ListModeBase : public ModeHandler virtual void DoSyncChannel(chanrec* chan, Module* proto, void* opaque) { - modelist* list = (modelist*)chan->GetExt(infokey); + modelist* list; + chan->GetExt(infokey, list); if (list) { for (modelist::iterator it = list->begin(); it != list->end(); it++) @@ -264,7 +289,8 @@ class ListModeBase : public ModeHandler { chanrec* chan = (chanrec*)item; - modelist* list = (modelist*)chan->GetExt(infokey); + modelist* list; + chan->GetExt(infokey, list); if (list) {