]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Remote user messaging fixes
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 2 Sep 2009 00:53:03 +0000 (00:53 +0000)
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 2 Sep 2009 00:53:03 +0000 (00:53 +0000)
Add format string output to DumpText
Fix PI->PushToClient prefixing issue
Fix ENCAP routing to use SID rather than server name

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11658 e03df62e-2008-0410-955e-edbf42e46eb7

include/inspircd.h
src/modules.cpp
src/modules/m_alltime.cpp
src/modules/m_callerid.cpp
src/modules/m_check.cpp
src/modules/m_spanningtree/override_map.cpp
src/modules/m_spanningtree/postcommand.cpp
src/modules/m_spanningtree/protocolinterface.cpp

index 440b5f1b9687b861de66723b51e16f93c2953b20..f16a1a40dcb9dc8cc467dee791b39005b89f241f 100644 (file)
@@ -770,6 +770,12 @@ class CoreExport InspIRCd : public classbase
         */
        void DumpText(User* user, const std::string &text);
 
+       /** Dump text to a user target (local or remote)
+        * @param user the user to dump the text to
+        * @param format the printf format string for the text to send
+        */
+       void DumpText(User* user, const char* format, ...) CUSTOM_PRINTF(3, 4);
+
        /** Check if the given nickmask matches too many users, send errors to the given user
         * @param nick A nickmask to match against
         * @param user A user to send error text to
index 9632718eee04e75b7dcc42e46f817329c3feddb9..2e3623b4af11f35182231d5782971b9feee67ba3 100644 (file)
@@ -777,15 +777,28 @@ void InspIRCd::DumpText(User* user, const std::string &text)
        }
        else
        {
-               PI->PushToClient(user, ":" + text);
+               PI->PushToClient(user, text);
        }
 }
 
+void InspIRCd::DumpText(User* user, const char *text, ...)
+{
+       va_list argsPtr;
+       char line[MAXBUF];
+
+       va_start(argsPtr, text);
+       vsnprintf(line, MAXBUF, text, argsPtr);
+       va_end(argsPtr);
+
+       DumpText(user, std::string(line));
+}
+
 void InspIRCd::DumpText(User* user, const std::string &LinePrefix, std::stringstream &TextStream)
 {
        char line[MAXBUF];
-       int start_pos = snprintf(line, MAXBUF, ":%s %s", Config->ServerName, LinePrefix.c_str());
+       int start_pos = LinePrefix.length();
        int pos = start_pos;
+       memcpy(line, LinePrefix.data(), pos);
        std::string Word;
        while (TextStream >> Word)
        {
@@ -793,14 +806,15 @@ void InspIRCd::DumpText(User* user, const std::string &LinePrefix, std::stringst
                if (pos + len + 12 > MAXBUF)
                {
                        line[pos] = '\0';
-                       DumpText(user, line);
+                       DumpText(user, std::string(line));
                        pos = start_pos;
                }
                line[pos] = ' ';
                memcpy(line + pos + 1, Word.data(), len);
                pos += len + 1;
        }
-       DumpText(user, line);
+       line[pos] = '\0';
+       DumpText(user, std::string(line));
 }
 
 bool InspIRCd::AddResolver(Resolver* r, bool cached)
index 7121ac4c795a3a071a054c3f19b9140e62a585a1..5f7c83f3cf1a2273b12c39ddda5bdef7505f4be9 100644 (file)
@@ -32,14 +32,7 @@ class CommandAlltime : public Command
 
                std::string msg = ":" + std::string(ServerInstance->Config->ServerName) + " NOTICE " + user->nick + " :System time is " + fmtdate + "(" + ConvToStr(ServerInstance->Time()) + ") on " + ServerInstance->Config->ServerName;
 
-               if (IS_LOCAL(user))
-               {
-                       user->Write(msg);
-               }
-               else
-               {
-                       ServerInstance->PI->PushToClient(user, ":" + msg);
-               }
+               ServerInstance->DumpText(user, msg);
 
                /* we want this routed out! */
                return CMD_SUCCESS;
index 4c490a3342c3f8268e91edbb2d421799ebde9112..28c7f80f305d5e3916af50f33f5183318b5f2c39 100644 (file)
@@ -386,14 +386,8 @@ public:
                        if (now > (dat->lastnotify + (time_t)notify_cooldown))
                        {
                                user->WriteNumeric(717, "%s %s :has been informed that you messaged them.", user->nick.c_str(), dest->nick.c_str());
-                               if (IS_LOCAL(dest))
-                               {
-                                       dest->WriteNumeric(718, "%s %s %s@%s :is messaging you, and you have umode +g. Use /ACCEPT +%s to allow.", dest->nick.c_str(), user->nick.c_str(), user->ident.c_str(), user->dhost.c_str(), user->nick.c_str());
-                               }
-                               else
-                               {
-                                       ServerInstance->PI->PushToClient(dest, std::string("::") + ServerInstance->Config->ServerName + " 718 " + dest->nick + " " + user->nick + " " + user->ident + "@" + user->dhost + " :is messaging you,  and you have umode +g. Use /ACCEPT +" + user->nick + " to allow.");
-                               }
+                               ServerInstance->DumpText(dest, ":%s 718 %s %s %s@%s :is messaging you, and you have umode +g. Use /ACCEPT +%s to allow.",
+                                       ServerInstance->Config->ServerName, dest->nick.c_str(), user->nick.c_str(), user->ident.c_str(), user->dhost.c_str(), user->nick.c_str());
                                dat->lastnotify = now;
                        }
                        return MOD_RES_DENY;
index 15f5a42b68eae09fa6590a533343004ab902bba6..7f85b186972a09245c693099b4a1307ffbbab70a 100644 (file)
@@ -116,7 +116,7 @@ class CommandCheck : public Command
                        chliststr = targuser->ChannelList(targuser);
                        std::stringstream dump(chliststr);
 
-                       ServerInstance->DumpText(user,checkstr + " onchans ", dump);
+                       ServerInstance->DumpText(user,checkstr + " onchans", dump);
 
                        FOREACH_MOD_I(ServerInstance,I_OnSyncUser,OnSyncUser(targuser,creator,(void*)user));
                        dumpExtra(user, checkstr, targuser);
index e3f103cc82f7b5d8a5bf41b0fcc7b150093e7e79..9a7f007e39f17fb8dae83ec2b903ff366ae58325 100644 (file)
@@ -156,36 +156,20 @@ bool ModuleSpanningTree::HandleMap(const std::vector<std::string>& parameters, U
 
        float avg_users = totusers * 1.0 / totservers;
 
-       // dump the whole lot to the user.
-       if (IS_LOCAL(user))
+       ServerInstance->Logs->Log("map",DEBUG,"local");
+       for (int t = 0; t < line; t++)
        {
-               ServerInstance->Logs->Log("map",DEBUG,"local");
-               for (int t = 0; t < line; t++)
-               {
-                       // terminate the string at maxnamew characters
-                       names[100 * t + maxnamew] = '\0';
-                       user->WriteNumeric(RPL_MAP, "%s :%s %s",user->nick.c_str(),names + 100 * t, stats + 50 * t);
-               }
-               user->WriteNumeric(RPL_MAPUSERS, "%s :%d server%s and %d user%s, average %.2f users per server",user->nick.c_str(),totservers,(totservers > 1 ? "s" : ""),totusers,(totusers > 1 ? "s" : ""),avg_users);
-               user->WriteNumeric(RPL_ENDMAP, "%s :End of /MAP",user->nick.c_str());
+               // terminate the string at maxnamew characters
+               names[100 * t + maxnamew] = '\0';
+               ServerInstance->DumpText(user, ":%s %d %s :%s %s", ServerInstance->Config->ServerName,
+                       RPL_MAP, user->nick.c_str(), names + 100 * t, stats + 50 * t);
        }
-       else
-       {
-               ServerInstance->Logs->Log("map", DEBUG, "remote dump lines=%d", line);
+       ServerInstance->DumpText(user, ":%s %d %s :%d server%s and %d user%s, average %.2f users per server",
+               ServerInstance->Config->ServerName, RPL_MAPUSERS, user->nick.c_str(),
+               totservers, (totservers > 1 ? "s" : ""), totusers, (totusers > 1 ? "s" : ""), avg_users);
+       ServerInstance->DumpText(user, ":%s %d %s :End of /MAP", ServerInstance->Config->ServerName,
+               RPL_ENDMAP, user->nick.c_str());
 
-               // XXX: annoying that we have to use hardcoded numerics here..
-               for (int t = 0; t < line; t++)
-               {
-                       // terminate the string at maxnamew characters
-                       char* name = names + 100 * t;
-                       char* stat = stats + 50 * t;
-                       name[maxnamew] = '\0';
-                       ServerInstance->PI->PushToClient(user, std::string("::") + ServerInstance->Config->ServerName + " 006 " + user->nick + " :" + name + " " + stat);
-               }
-
-               ServerInstance->PI->PushToClient(user, std::string("::") + ServerInstance->Config->ServerName + " 270 " + user->nick + " :" + ConvToStr(totservers) + " server"+(totservers > 1 ? "s" : "") + " and " + ConvToStr(totusers) + " user"+(totusers > 1 ? "s" : "") + ", average " + ConvToStr(avg_users) + " users per server");
-               ServerInstance->PI->PushToClient(user, std::string("::") + ServerInstance->Config->ServerName + " 007 " + user->nick + " :End of /MAP");
-       }
        delete[] names;
        delete[] stats;
 
index 0988fe0991b3413be59b14c3f82c5bd9bbbf9ee4..d2cea154a2c00e792ae1dd8d082adca235e87361 100644 (file)
@@ -54,7 +54,14 @@ void ModuleSpanningTree::OnPostCommand(const std::string &command, const std::ve
        }
        else if (routing.type == ROUTE_TYPE_OPT_UCAST)
        {
-               params.push_back(routing.serverdest);
+               TreeServer* sdest = Utils->FindServer(routing.serverdest);
+               if (!sdest)
+               {
+                       ServerInstance->Logs->Log("m_spanningtree",ERROR,"Trying to route ENCAP to nonexistant server %s",
+                               routing.serverdest.c_str());
+                       return;
+               }
+               params.push_back(sdest->GetID());
                params.push_back(command);
                sent_cmd = "ENCAP";
        }
index 804a451ca96cb6e2bae57a73f51c64a6de84564a..2e3237efd89095662c8349e7930210fda4e893c8 100644 (file)
@@ -114,7 +114,7 @@ void SpanningTreeProtocolInterface::PushToClient(User* target, const std::string
 {
        parameterlist p;
        p.push_back(target->uuid);
-       p.push_back(rawline);
+       p.push_back(":" + rawline);
        Utils->DoOneToOne(ServerInstance->Config->GetSID(), "PUSH", p, target->server);
 }