]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Added opertype to OnOper and added OnMode function
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 29 Nov 2005 17:09:06 +0000 (17:09 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 29 Nov 2005 17:09:06 +0000 (17:09 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2010 e03df62e-2008-0410-955e-edbf42e46eb7

include/modules.h
src/commands.cpp
src/mode.cpp
src/modules.cpp
src/modules/extra/m_sqllog.cpp
src/modules/m_helpop.cpp
src/modules/m_operjoin.cpp
src/modules/m_opermodes.cpp
src/modules/m_opermotd.cpp
src/modules/m_spanningtree.cpp

index 1213e60ca91c0fbf36376bcf483f60e0cfeb5af9..0703a9345eec3f9d756b38d97c6f5e62fffadc0b 100644 (file)
@@ -361,7 +361,7 @@ class Module : public classbase
         * The userrec will contain the oper mode 'o' as this function is called after any modifications
         * are made to the user's structure by the core.
         */
-       virtual void OnOper(userrec* user);
+       virtual void OnOper(userrec* user, std::string opertype);
        
        /** Called whenever a user types /INFO.
         * The userrec will contain the information of the user who typed the command. Modules may use this
@@ -420,6 +420,8 @@ class Module : public classbase
        virtual void OnUserMessage(userrec* user, void* dest, int target_type, std::string text);
 
        virtual void OnUserNotice(userrec* user, void* dest, int target_type, std::string text);
+
+       virtual void OnMode(userrec* user, void* dest, int target_type, std::string text);
        
        virtual int OnUserPreNick(userrec* user, std::string newnick);
        
index fdaaece1b0462e45179d85ce30f10ee24a4d9a4b..c1b7ce82eea330bc339bf412e6b89beae0b43757 100644 (file)
@@ -1589,7 +1589,7 @@ void handle_oper(char **parameters, int pcnt, userrec *user)
                {
                        strcat(user->modes,"o");
                        WriteServ(user->fd,"MODE %s :+o",user->nick);
-                       FOREACH_MOD OnOper(user);
+                       FOREACH_MOD OnOper(user,OperType);
                        log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,OperType);
                        AddOper(user);
                }
index 32033e7f411f4d1dcb3c19804417251ee544dccc..6461ee3114974309479bd4d8b90516dbc97250cf 100644 (file)
@@ -1140,6 +1140,7 @@ void process_modes(char **parameters,userrec* user,chanrec *chan,int status, int
                {
                        log(DEBUG,"Local mode change");
                        WriteChannelLocal(chan, user, "MODE %s %s",chan->name,outstr);
+                       FOREACH_MOD OnMode(user, chan, TYPE_CHANNEL, outstr);
                }
                else
                {
@@ -1459,6 +1460,7 @@ void handle_mode(char **parameters, int pcnt, userrec *user)
                        if (strcmp(b,""))
                        {
                                WriteTo(user, dest, "MODE %s :%s", dest->nick, b);
+                               FOREACH_MOD OnMode(user, dest, TYPE_USER, b);
                        }
 
                        if (strlen(dmodes)>MAXMODES)
@@ -1712,6 +1714,7 @@ void server_mode(char **parameters, int pcnt, userrec *user)
                        if (strcmp(b,""))
                        {
                                WriteTo(user, dest, "MODE %s :%s", dest->nick, b);
+                               FOREACH_MOD OnMode(user, dest, TYPE_USER, b);
                        }
                        
                        if (strlen(dmodes)>MAXMODES)
@@ -2098,7 +2101,7 @@ void merge_mode2(char **parameters, int pcnt, userrec* user)
                         if (strcmp(b,""))
                         {
                                WriteTo(user,dest,"MODE %s :%s",dest->nick,b);
-                               log(DEBUG,"Sent: :%s MODE %s",user->nick,b);
+                               FOREACH_MOD OnMode(user, dest, TYPE_USER, b);
                        }
 
                        if (strlen(dmodes)>MAXMODES)
index 61abe55647d1919add49f4981a92593bf6e2e899..ec1f03eee3d013258d0661600adfd96a9d313b13 100644 (file)
@@ -316,8 +316,9 @@ void                Module::OnRehash() { }
 void           Module::OnServerRaw(std::string &raw, bool inbound, userrec* user) { }
 int            Module::OnUserPreJoin(userrec* user, chanrec* chan, const char* cname) { return 0; }
 int            Module::OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params) { return false; }
+void           Module::OnMode(userrec* user, void* dest, int target_type, std::string text);
 Version                Module::GetVersion() { return Version(1,0,0,0,VF_VENDOR); }
-void           Module::OnOper(userrec* user) { };
+void           Module::OnOper(userrec* user, std::string opertype) { };
 void           Module::OnInfo(userrec* user) { };
 void           Module::OnWhois(userrec* source, userrec* dest) { };
 int            Module::OnUserPreInvite(userrec* source,userrec* dest,chanrec* channel) { return 0; };
index 0596fdc74285b55ed34653369614e76b3d304eff..d47dc7190a5c619d42445ff646d59171b9f3dde3 100644 (file)
@@ -190,7 +190,7 @@ class ModuleSQLLog : public Module
                InsertEntry((unsigned)category,(unsigned)nickid,(unsigned)hostid,(unsigned)sourceid,(unsigned long)time(NULL));
        }
 
-       virtual void OnOper(userrec* user)
+       virtual void OnOper(userrec* user, std::string opertype)
        {
                AddLogEntry(LT_OPER,user->nick,user->host,user->server);
        }
index 8df47ce3dc19f345d97ee593137ff06864d70141..9dbbd088ff903370f907911ee01f116fc8a731bd 100644 (file)
@@ -198,14 +198,6 @@ class ModuleHelpop : public Module
                }
        }
 
-       virtual void OnOper(userrec* user)
-       {
-               char* modes[2];                 // only two parameters
-               modes[0] = user->nick;          // first parameter is the nick
-               modes[1] = "+h";                // second parameter is the mode
-               Srv->SendMode(modes,2,user);    // send these, forming the command "MODE <nick> +h"
-       }
-       
        virtual ~ModuleHelpop()
        {
                delete Srv;
index 980fcc651ac8fabf6cd654ccfa990aea540b2115..3609350a2dbe159e65b9fdffdc1753efc3342d53 100644 (file)
@@ -42,7 +42,7 @@ class ModuleOperjoin : public Module {
 
                }
 
-               virtual void OnOper(userrec* user) {
+               virtual void OnOper(userrec* user, std::string opertype) {
 
                        if(operChan != "") {
 
index 063e675fc52b6062b6c145ef637c5fdf647d86dc..7bfc67f6b168cff4e5a14d33319fa847cec3eeef 100644 (file)
@@ -48,7 +48,7 @@ class ModuleModesOnOper : public Module
                return Version(1,0,0,1,VF_VENDOR);
        }
        
-       virtual void OnOper(userrec* user)
+       virtual void OnOper(userrec* user, std::string opertype)
        {
                // whenever a user opers, go through the oper types, find their <type:modes>,
                // and if they have one apply their modes. The mode string can contain +modes
index ffdb7da9032b2f3fae0f041ae6c316fa5483a185..3d79ab13e8770da027fd6ba2ec777ea2ff9f2b14 100644 (file)
@@ -80,7 +80,7 @@ class ModuleOpermotd : public Module {
 
                }
 
-               virtual void OnOper(userrec* user) {
+               virtual void OnOper(userrec* user, std::string opertype) {
 
                        ShowOperMOTD(user);
 
index 172a36a14f3ea2140964bfa3374dd7bcffbbaecc..38b1f7784508b66c051ba867a93f0dcd520f6f71 100644 (file)
@@ -604,6 +604,24 @@ class TreeSocket : public InspSocket
                return false;
        }
 
+       bool OperType(std::string prefix, std::deque<std::string> params)
+       {
+               if (params.size() != 1)
+                       return true;
+               std::string opertype = params[0];
+               userrec* u = Srv->FindNick(prefix);
+               if (u)
+               {
+                       strlcpy(u->oper,opertype.c_str(),NICKMAX);
+                       if (!strchr(u->modes,"o"))
+                       {
+                               strcat(u->modes,"o");
+                       }
+                       DoOneToAllButSender(u->server,"OPERTYPE",params,u->server);
+               }
+               return true;
+       }
+
        bool RemoteServer(std::string prefix, std::deque<std::string> params)
        {
                if (params.size() < 4)
@@ -832,6 +850,10 @@ class TreeSocket : public InspSocket
                                {
                                        return this->RemoteServer(prefix,params);
                                }
+                               else if (command == "OPERTYPE")
+                               {
+                                       return this->OperType(prefix,params);
+                               }
                                else if (command == "SQUIT")
                                {
                                        if (params.size() == 2)
@@ -1355,6 +1377,19 @@ class ModuleSpanningTree : public Module
                }
        }
 
+       // note: the protocol does not allow direct umode +o except
+       // via NICK with 8 params. sending OPERTYPE infers +o modechange
+       // locally.
+       virtual void OnOper(userrec* user, std::string opertype)
+       {
+               if (std::string(user->server) == Srv->GetServerName())
+               {
+                       std::deque<std::string> params;
+                       params.push_back(opertype);
+                       DoOneToMany(user->nick,"OPERTYPE",params);
+               }
+       }
+
        virtual ~ModuleSpanningTree()
        {
                delete Srv;