summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/inspircd.h6
-rw-r--r--src/modules.cpp22
-rw-r--r--src/modules/m_alltime.cpp9
-rw-r--r--src/modules/m_callerid.cpp10
-rw-r--r--src/modules/m_check.cpp2
-rw-r--r--src/modules/m_spanningtree/override_map.cpp38
-rw-r--r--src/modules/m_spanningtree/postcommand.cpp9
-rw-r--r--src/modules/m_spanningtree/protocolinterface.cpp2
8 files changed, 48 insertions, 50 deletions
diff --git a/include/inspircd.h b/include/inspircd.h
index 440b5f1b9..f16a1a40d 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -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
diff --git a/src/modules.cpp b/src/modules.cpp
index 9632718ee..2e3623b4a 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -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)
diff --git a/src/modules/m_alltime.cpp b/src/modules/m_alltime.cpp
index 7121ac4c7..5f7c83f3c 100644
--- a/src/modules/m_alltime.cpp
+++ b/src/modules/m_alltime.cpp
@@ -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;
diff --git a/src/modules/m_callerid.cpp b/src/modules/m_callerid.cpp
index 4c490a334..28c7f80f3 100644
--- a/src/modules/m_callerid.cpp
+++ b/src/modules/m_callerid.cpp
@@ -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;
diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp
index 15f5a42b6..7f85b1869 100644
--- a/src/modules/m_check.cpp
+++ b/src/modules/m_check.cpp
@@ -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);
diff --git a/src/modules/m_spanningtree/override_map.cpp b/src/modules/m_spanningtree/override_map.cpp
index e3f103cc8..9a7f007e3 100644
--- a/src/modules/m_spanningtree/override_map.cpp
+++ b/src/modules/m_spanningtree/override_map.cpp
@@ -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;
diff --git a/src/modules/m_spanningtree/postcommand.cpp b/src/modules/m_spanningtree/postcommand.cpp
index 0988fe099..d2cea154a 100644
--- a/src/modules/m_spanningtree/postcommand.cpp
+++ b/src/modules/m_spanningtree/postcommand.cpp
@@ -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";
}
diff --git a/src/modules/m_spanningtree/protocolinterface.cpp b/src/modules/m_spanningtree/protocolinterface.cpp
index 804a451ca..2e3237efd 100644
--- a/src/modules/m_spanningtree/protocolinterface.cpp
+++ b/src/modules/m_spanningtree/protocolinterface.cpp
@@ -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);
}