]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree.cpp
Made SANICK not collide the user (theres no need to in the new 1.1 now we have return...
[user/henk/code/inspircd.git] / src / modules / m_spanningtree.cpp
index d980cba2152435ae3aaee33b4facaddcff04d9a9..c52a167871515a76a59a778706a08de89469c322 100644 (file)
@@ -594,7 +594,7 @@ class cmd_rconnect : public command_t
                syntax = "<remote-server-mask> <servermask>";
        }
 
-       void Handle (const char** parameters, int pcnt, userrec *user)
+       CmdResult Handle (const char** parameters, int pcnt, userrec *user)
        {
                user->WriteServ("NOTICE %s :*** RCONNECT: Sending remote connect to \002%s\002 to connect server \002%s\002.",user->nick,parameters[0],parameters[1]);
                /* Is this aimed at our server? */
@@ -605,7 +605,11 @@ class cmd_rconnect : public command_t
                        const char* para[1];
                        para[0] = parameters[1];
                        Creator->OnPreCommand("CONNECT", para, 1, user, true);
+
+                       return CMD_SUCCESS;
                }
+
+               return CMD_FAILURE;
        }
 };
  
@@ -3181,10 +3185,17 @@ class TreeSocket : public InspSocket
                                                {
                                                        strparams[q] = params[q].c_str();
                                                }
-                                               if (!this->Instance->CallCommandHandler(command.c_str(), strparams, params.size(), who))
+                                               switch (this->Instance->CallCommandHandler(command.c_str(), strparams, params.size(), who))
                                                {
-                                                       this->WriteLine("ERROR :Unrecognised command '"+std::string(command.c_str())+"' -- possibly loaded mismatched modules");
-                                                       return false;
+                                                       case CMD_INVALID:
+                                                               this->WriteLine("ERROR :Unrecognised command '"+std::string(command.c_str())+"' -- possibly loaded mismatched modules");
+                                                               return false;
+                                                       break;
+                                                       case CMD_FAILURE:
+                                                               return true;
+                                                       break;
+                                                       default:
+                                                       break;
                                                }
                                        }
                                        else
@@ -4275,7 +4286,13 @@ class ModuleSpanningTree : public Module
                        this->HandleVersion(parameters,pcnt,user);
                        return 1;
                }
-               else if (ServerInstance->IsValidModuleCommand(command, pcnt, user))
+
+               return 0;
+       }
+
+       virtual void OnPostCommand(const std::string &command, const char** parameters, int pcnt, userrec *user, CmdResult result)
+       {
+               if ((result == CMD_SUCCESS) && (ServerInstance->IsValidModuleCommand(command, pcnt, user)))
                {
                        // this bit of code cleverly routes all module commands
                        // to all remote severs *automatically* so that modules
@@ -4298,7 +4315,6 @@ class ModuleSpanningTree : public Module
                        ServerInstance->Log(DEBUG,"Globally route '%s'",command.c_str());
                        DoOneToMany(user->nick,command,params);
                }
-               return 0;
        }
 
        virtual void OnGetServerDescription(const std::string &servername,std::string &description)
@@ -4450,10 +4466,19 @@ class ModuleSpanningTree : public Module
                // Only do this for local users
                if (IS_LOCAL(user))
                {
+                       char ts[24];
+                       snprintf(ts,24,"%lu",(unsigned long)channel->age);
+
                        std::deque<std::string> params;
                        params.clear();
                        params.push_back(channel->name);
 
+                       /** XXX: The client protocol will IGNORE this parameter.
+                        * We could make use of it if we wanted to keep the TS
+                        * in step if somehow we lose it.
+                        */
+                       params.push_back(ts);
+
                        if (channel->GetUserCounter() > 1)
                        {
                                // not the first in the channel
@@ -4463,8 +4488,6 @@ class ModuleSpanningTree : public Module
                        {
                                // first in the channel, set up their permissions
                                // and the channel TS with FJOIN.
-                               char ts[24];
-                               snprintf(ts,24,"%lu",(unsigned long)channel->age);
                                params.clear();
                                params.push_back(channel->name);
                                params.push_back(ts);
@@ -4819,7 +4842,7 @@ class ModuleSpanningTree : public Module
                List[I_OnUserQuit] = List[I_OnUserPostNick] = List[I_OnUserKick] = List[I_OnRemoteKill] = List[I_OnRehash] = 1;
                List[I_OnOper] = List[I_OnAddGLine] = List[I_OnAddZLine] = List[I_OnAddQLine] = List[I_OnAddELine] = 1;
                List[I_OnDelGLine] = List[I_OnDelZLine] = List[I_OnDelQLine] = List[I_OnDelELine] = List[I_ProtoSendMode] = List[I_OnMode] = 1;
-               List[I_OnStats] = List[I_ProtoSendMetaData] = List[I_OnEvent] = List[I_OnSetAway] = List[I_OnCancelAway] = 1;
+               List[I_OnStats] = List[I_ProtoSendMetaData] = List[I_OnEvent] = List[I_OnSetAway] = List[I_OnCancelAway] = List[I_OnPostCommand] = 1;
        }
 
        /* It is IMPORTANT that m_spanningtree is the last module in the chain