X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services.cpp;h=059ad7fed6b3be6ced74640fca7df65fa9b2fe87;hb=1383dba43e463f292aea094d01f62f355946049d;hp=8787241680af15262b38bd68df7735b93762ada3;hpb=454c039711783c6226818b71d18a2ab936c9082d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services.cpp b/src/modules/m_services.cpp index 878724168..059ad7fed 100644 --- a/src/modules/m_services.cpp +++ b/src/modules/m_services.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * Inspire is copyright (C) 2002-2004 ChatSpike-Dev. + * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. * E-mail: * * @@ -14,12 +14,15 @@ * --------------------------------------------------- */ +using namespace std; + #include #include "users.h" #include "channels.h" #include "modules.h" #include - +#include "helperfuncs.h" +#include "hashcomp.h" /* $ModDesc: Povides support for services +r user/chan modes and more */ @@ -27,9 +30,10 @@ class ModuleServices : public Module { Server *Srv; public: - ModuleServices() + ModuleServices(Server* Me) + : Module::Module(Me) { - Srv = new Server; + Srv = Me; Srv->AddExtendedMode('r',MT_CHANNEL,false,0,0); Srv->AddExtendedMode('r',MT_CLIENT,false,0,0); @@ -37,6 +41,30 @@ class ModuleServices : public Module Srv->AddExtendedMode('R',MT_CLIENT,false,0,0); Srv->AddExtendedMode('M',MT_CHANNEL,false,0,0); } + + virtual void On005Numeric(std::string &output) + { + std::stringstream line(output); + std::string temp1, temp2; + while (!line.eof()) + { + line >> temp1; + if (temp1.substr(0,10) == "CHANMODES=") + { + // append the chanmode to the end + temp1 = temp1.substr(10,temp1.length()); + temp1 = "CHANMODES=" + temp1 + "rRM"; + } + temp2 = temp2 + temp1 + " "; + } + if (temp2.length()) + output = temp2.substr(0,temp2.length()-1); + } + + void Implements(char* List) + { + List[I_OnUserPreMessage] = List[I_OnExtendedMode] = List[I_On005Numeric] = List[I_OnUserPreNotice] = List[I_OnUserPreJoin] = 1; + } virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list ¶ms) { @@ -46,30 +74,27 @@ class ModuleServices : public Module if (type == MT_CHANNEL) { // only a u-lined server may add or remove the +r mode. - if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server))) + if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,"") || (strchr(user->nick,'.')))) { - // FCS - BugFix for #27 :) - if ((!strchr(user->modes,'r')) && (mode_on == false)) { - return 1; - } else if ((strchr(user->modes,'r')) && (mode_on == true)) { - return 1; - } else { - return 0; - } + log(DEBUG,"Allowing umode +r, server and nick are: '%s','%s'",user->nick,user->server); + return 1; } else { - Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a U-Lined server may modify the +r channel mode"); + log(DEBUG,"Only a server can set chanmode +r, server and nick are: '%s','%s'",user->nick,user->server); + Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a server may modify the +r channel mode"); } } else { - if (!strcmp(user->server,"")) + if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,"") || (strchr(user->nick,'.')))) { + log(DEBUG,"Allowing umode +r, server and nick are: '%s','%s'",user->nick,user->server); return 1; } else { + log(DEBUG,"Only a server can set umode +r, server and nick are: '%s','%s'",user->nick,user->server); Srv->SendServ(user->fd,"500 "+std::string(user->nick)+" :Only a server may modify the +r user mode"); } } @@ -99,7 +124,7 @@ class ModuleServices : public Module chanrec* c = (chanrec*)dest; if ((c->IsCustomModeSet('M')) && (!strchr(user->modes,'r'))) { - if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server))) + if ((Srv->IsUlined(user->nick)) || (Srv->IsUlined(user->server)) || (!strcmp(user->server,""))) { // user is ulined, can speak regardless return 0; @@ -186,18 +211,12 @@ class ModuleServices : public Module virtual ~ModuleServices() { - delete Srv; } virtual Version GetVersion() { - return Version(1,0,0,0); + return Version(1,0,0,0,VF_STATIC|VF_VENDOR); } - - virtual void OnUserConnect(userrec* user) - { - } - }; @@ -212,9 +231,9 @@ class ModuleServicesFactory : public ModuleFactory { } - virtual Module * CreateModule() + virtual Module * CreateModule(Server* Me) { - return new ModuleServices; + return new ModuleServices(Me); } };