summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/inspircd.h19
-rw-r--r--include/users.h28
-rw-r--r--make/template/main.mk2
-rw-r--r--src/commands/cmd_modules.cpp6
-rw-r--r--src/commands/cmd_wallops.cpp24
-rw-r--r--src/modules.cpp48
-rw-r--r--src/modules/m_alltime.cpp2
-rw-r--r--src/modules/m_callerid.cpp2
-rw-r--r--src/modules/m_check.cpp64
-rw-r--r--src/modules/m_globalload.cpp2
-rw-r--r--src/modules/m_spanningtree/override_map.cpp6
-rw-r--r--src/users.cpp55
12 files changed, 99 insertions, 159 deletions
diff --git a/include/inspircd.h b/include/inspircd.h
index 9f7d07f5d..f185104ae 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -714,25 +714,6 @@ class CoreExport InspIRCd
*/
void RehashServer();
- /** Dump text to a user target, splitting it appropriately to fit
- * @param User the user to dump the text to
- * @param LinePrefix text to prefix each complete line with
- * @param TextStream the text to send to the user
- */
- void DumpText(User* user, const std::string &LinePrefix, std::stringstream &TextStream);
-
- /** Dump text to a user target (local or remote)
- * @param user the user to dump the text to
- * @param text the full line of text
- */
- 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/include/users.h b/include/users.h
index 42d04696a..5153ebdd4 100644
--- a/include/users.h
+++ b/include/users.h
@@ -666,23 +666,26 @@ class CoreExport User : public StreamSocket
*/
void UnOper();
- /** Write text to this user, appending CR/LF.
+ /** Write text to this user, appending CR/LF. Works on local users only.
* @param text A std::string to send to the user
*/
void Write(const std::string &text);
/** Write text to this user, appending CR/LF.
+ * Works on local users only.
* @param text The format string for text to send to the user
* @param ... POD-type format arguments
*/
void Write(const char *text, ...) CUSTOM_PRINTF(2, 3);
/** Write text to this user, appending CR/LF and prepending :server.name
+ * Works on local users only.
* @param text A std::string to send to the user
*/
void WriteServ(const std::string& text);
/** Write text to this user, appending CR/LF and prepending :server.name
+ * Works on local users only.
* @param text The format string for text to send to the user
* @param ... POD-type format arguments
*/
@@ -742,18 +745,19 @@ class CoreExport User : public StreamSocket
*/
void WriteCommonQuit(const std::string &normal_text, const std::string &oper_text);
- /** Write a WALLOPS message from this user to all local opers.
- * If this user is not opered, the function will return without doing anything.
- * @param text The format string to send in the WALLOPS message
- * @param ... Format arguments
+ /** Dump text to a user target, splitting it appropriately to fit
+ * @param LinePrefix text to prefix each complete line with
+ * @param TextStream the text to send to the user
+ */
+ void SendText(const std::string &LinePrefix, std::stringstream &TextStream);
+
+ /** Write to the user, routing the line if the user is remote.
*/
- void WriteWallOps(const char* text, ...) CUSTOM_PRINTF(2, 3);
+ void SendText(const std::string& line);
- /** Write a WALLOPS message from this user to all local opers.
- * If this user is not opered, the function will return without doing anything.
- * @param text The text to send in the WALLOPS message
+ /** Write to the user, routing the line if the user is remote.
*/
- void WriteWallOps(const std::string &text);
+ void SendText(const char* text, ...) CUSTOM_PRINTF(2, 3);
/** Return true if the user shares at least one channel with another user
* @param other The other user to compare the channel list against
@@ -849,10 +853,6 @@ class CoreExport User : public StreamSocket
*/
void IncreasePenalty(int increase);
- /** Decreases a user's command penalty by a set amount.
- */
- void DecreasePenalty(int decrease);
-
void OnDataReady();
void OnError(BufferedSocketError error);
diff --git a/make/template/main.mk b/make/template/main.mk
index 953c6bf4e..fa59f6519 100644
--- a/make/template/main.mk
+++ b/make/template/main.mk
@@ -105,7 +105,7 @@ debug-header:
@echo "* This will take a *long* time. *"
@echo "* Please be aware that this build *"
@echo "* will consume a very large amount *"
- @echo "* of disk space (150MB+), and can *"
+ @echo "* of disk space (~350MB), and may *"
@echo "* run slower. Use the debug build *"
@echo "* for module development or if you *"
@echo "* are experiencing problems. *"
diff --git a/src/commands/cmd_modules.cpp b/src/commands/cmd_modules.cpp
index 5f7dabdbf..64ff81b81 100644
--- a/src/commands/cmd_modules.cpp
+++ b/src/commands/cmd_modules.cpp
@@ -58,16 +58,16 @@ CmdResult CommandModules::Handle (const std::vector<std::string>&, User *user)
if (!(V.Flags & mult))
flags[pos] = '-';
- ServerInstance->DumpText(user, ":%s 702 %s :%p %s %s :%s - %s", ServerInstance->Config->ServerName.c_str(),
+ user->SendText(":%s 702 %s :%p %s %s :%s - %s", ServerInstance->Config->ServerName.c_str(),
user->nick.c_str(), (void*)m, module_names[i].c_str(), flags.c_str(), V.description.c_str(), V.version.c_str());
}
else
{
- ServerInstance->DumpText(user, ":%s 702 %s :%s %s", ServerInstance->Config->ServerName.c_str(),
+ user->SendText(":%s 702 %s :%s %s", ServerInstance->Config->ServerName.c_str(),
user->nick.c_str(), module_names[i].c_str(), V.description.c_str());
}
}
- ServerInstance->DumpText(user, ":%s 703 %s :End of MODULES list", ServerInstance->Config->ServerName.c_str(), user->nick.c_str());
+ user->SendText(":%s 703 %s :End of MODULES list", ServerInstance->Config->ServerName.c_str(), user->nick.c_str());
return CMD_SUCCESS;
}
diff --git a/src/commands/cmd_wallops.cpp b/src/commands/cmd_wallops.cpp
index 7894419c1..52d28e987 100644
--- a/src/commands/cmd_wallops.cpp
+++ b/src/commands/cmd_wallops.cpp
@@ -13,14 +13,6 @@
#include "inspircd.h"
-#ifndef __CMD_WALLOPS_H__
-#define __CMD_WALLOPS_H__
-
-// include the common header files
-
-#include "users.h"
-#include "channels.h"
-
/** Handle /WALLOPS. These command handlers can be reloaded by the core,
* and handle basic RFC1459 commands. Commands within modules work
* the same way, however, they can be fully unloaded, where these
@@ -41,14 +33,18 @@ class CommandWallops : public Command
CmdResult Handle(const std::vector<std::string>& parameters, User *user);
};
-#endif
-
-
-
-
CmdResult CommandWallops::Handle (const std::vector<std::string>& parameters, User *user)
{
- user->WriteWallOps(std::string(parameters[0]));
+ std::string wallop("WALLOPS :");
+ wallop.append(parameters[0]);
+
+ for (std::vector<User*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++)
+ {
+ User* t = *i;
+ if (t->IsModeSet('w'))
+ user->WriteTo(t,wallop);
+ }
+
FOREACH_MOD(I_OnWallops,OnWallops(user,parameters[0]));
return CMD_SUCCESS;
}
diff --git a/src/modules.cpp b/src/modules.cpp
index 7e4e0ec68..eb76897a2 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -784,54 +784,6 @@ void InspIRCd::SendMode(const std::vector<std::string>& parameters, User *user)
this->Modes->Process(parameters, user);
}
-void InspIRCd::DumpText(User* user, const std::string &text)
-{
- if (IS_LOCAL(user))
- {
- user->Write(text);
- }
- else
- {
- 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 = LinePrefix.length();
- int pos = start_pos;
- memcpy(line, LinePrefix.data(), pos);
- std::string Word;
- while (TextStream >> Word)
- {
- int len = Word.length();
- if (pos + len + 12 > MAXBUF)
- {
- line[pos] = '\0';
- DumpText(user, std::string(line));
- pos = start_pos;
- }
- line[pos] = ' ';
- memcpy(line + pos + 1, Word.data(), len);
- pos += len + 1;
- }
- line[pos] = '\0';
- DumpText(user, std::string(line));
-}
-
bool InspIRCd::AddResolver(Resolver* r, bool cached)
{
if (!cached)
diff --git a/src/modules/m_alltime.cpp b/src/modules/m_alltime.cpp
index b8174c7a6..cfd95d014 100644
--- a/src/modules/m_alltime.cpp
+++ b/src/modules/m_alltime.cpp
@@ -32,7 +32,7 @@ class CommandAlltime : public Command
std::string msg = ":" + std::string(ServerInstance->Config->ServerName.c_str()) + " NOTICE " + user->nick + " :System time is " + fmtdate + "(" + ConvToStr(ServerInstance->Time()) + ") on " + ServerInstance->Config->ServerName;
- ServerInstance->DumpText(user, msg);
+ user->SendText(msg);
/* we want this routed out! */
return CMD_SUCCESS;
diff --git a/src/modules/m_callerid.cpp b/src/modules/m_callerid.cpp
index 4a89f9948..c7ec7a4db 100644
--- a/src/modules/m_callerid.cpp
+++ b/src/modules/m_callerid.cpp
@@ -389,7 +389,7 @@ 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());
- ServerInstance->DumpText(dest, ":%s 718 %s %s %s@%s :is messaging you, and you have umode +g. Use /ACCEPT +%s to allow.",
+ dest->SendText(":%s 718 %s %s %s@%s :is messaging you, and you have umode +g. Use /ACCEPT +%s to allow.",
ServerInstance->Config->ServerName.c_str(), dest->nick.c_str(), user->nick.c_str(), user->ident.c_str(), user->dhost.c_str(), user->nick.c_str());
dat->lastnotify = now;
}
diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp
index 4b960e18b..0b222ba89 100644
--- a/src/modules/m_check.cpp
+++ b/src/modules/m_check.cpp
@@ -41,12 +41,12 @@ class CommandCheck : public Command
ExtensionItem* item = i->first;
std::string value = item->serialize(FORMAT_USER, ext, i->second);
if (!value.empty())
- ServerInstance->DumpText(user, checkstr + " meta:" + item->key + " " + value);
+ user->SendText(checkstr + " meta:" + item->key + " " + value);
else if (!item->key.empty())
dumpkeys << " " << item->key;
}
if (!dumpkeys.str().empty())
- ServerInstance->DumpText(user,checkstr + " metadata", dumpkeys);
+ user->SendText(checkstr + " metadata", dumpkeys);
}
CmdResult Handle (const std::vector<std::string> &parameters, User *user)
@@ -71,47 +71,47 @@ class CommandCheck : public Command
* :server.name 304 target :CHECK END
*/
- ServerInstance->DumpText(user, checkstr + " START " + parameters[0]);
+ user->SendText(checkstr + " START " + parameters[0]);
if (targuser)
{
/* /check on a user */
- ServerInstance->DumpText(user, checkstr + " nuh " + targuser->GetFullHost());
- ServerInstance->DumpText(user, checkstr + " realnuh " + targuser->GetFullRealHost());
- ServerInstance->DumpText(user, checkstr + " realname " + targuser->fullname);
- ServerInstance->DumpText(user, checkstr + " modes +" + targuser->FormatModes());
- ServerInstance->DumpText(user, checkstr + " snomasks +" + targuser->FormatNoticeMasks());
- ServerInstance->DumpText(user, checkstr + " server " + targuser->server);
- ServerInstance->DumpText(user, checkstr + " uid " + targuser->uuid);
- ServerInstance->DumpText(user, checkstr + " signon " + timestring(targuser->signon));
- ServerInstance->DumpText(user, checkstr + " nickts " + timestring(targuser->age));
+ user->SendText(checkstr + " nuh " + targuser->GetFullHost());
+ user->SendText(checkstr + " realnuh " + targuser->GetFullRealHost());
+ user->SendText(checkstr + " realname " + targuser->fullname);
+ user->SendText(checkstr + " modes +" + targuser->FormatModes());
+ user->SendText(checkstr + " snomasks +" + targuser->FormatNoticeMasks());
+ user->SendText(checkstr + " server " + targuser->server);
+ user->SendText(checkstr + " uid " + targuser->uuid);
+ user->SendText(checkstr + " signon " + timestring(targuser->signon));
+ user->SendText(checkstr + " nickts " + timestring(targuser->age));
if (IS_LOCAL(targuser))
- ServerInstance->DumpText(user, checkstr + " lastmsg " + timestring(targuser->idle_lastmsg));
+ user->SendText(checkstr + " lastmsg " + timestring(targuser->idle_lastmsg));
if (IS_AWAY(targuser))
{
/* user is away */
- ServerInstance->DumpText(user, checkstr + " awaytime " + timestring(targuser->awaytime));
- ServerInstance->DumpText(user, checkstr + " awaymsg " + targuser->awaymsg);
+ user->SendText(checkstr + " awaytime " + timestring(targuser->awaytime));
+ user->SendText(checkstr + " awaymsg " + targuser->awaymsg);
}
if (IS_OPER(targuser))
{
/* user is an oper of type ____ */
- ServerInstance->DumpText(user, checkstr + " opertype " + irc::Spacify(targuser->oper.c_str()));
+ user->SendText(checkstr + " opertype " + irc::Spacify(targuser->oper.c_str()));
}
if (IS_LOCAL(targuser))
{
- ServerInstance->DumpText(user, checkstr + " clientaddr " + irc::sockets::satouser(&targuser->client_sa));
- ServerInstance->DumpText(user, checkstr + " serveraddr " + irc::sockets::satouser(&targuser->server_sa));
+ user->SendText(checkstr + " clientaddr " + irc::sockets::satouser(&targuser->client_sa));
+ user->SendText(checkstr + " serveraddr " + irc::sockets::satouser(&targuser->server_sa));
std::string classname = targuser->GetClass()->name;
if (!classname.empty())
- ServerInstance->DumpText(user, checkstr + " connectclass " + classname);
+ user->SendText(checkstr + " connectclass " + classname);
}
else
- ServerInstance->DumpText(user, checkstr + " onip " + targuser->GetIPString());
+ user->SendText(checkstr + " onip " + targuser->GetIPString());
for (UCListIter i = targuser->chans.begin(); i != targuser->chans.end(); i++)
{
@@ -121,25 +121,25 @@ class CommandCheck : public Command
std::stringstream dump(chliststr);
- ServerInstance->DumpText(user,checkstr + " onchans", dump);
+ user->SendText(checkstr + " onchans", dump);
dumpExt(user, checkstr, targuser);
}
else if (targchan)
{
/* /check on a channel */
- ServerInstance->DumpText(user, checkstr + " timestamp " + timestring(targchan->age));
+ user->SendText(checkstr + " timestamp " + timestring(targchan->age));
if (targchan->topic[0] != 0)
{
/* there is a topic, assume topic related information exists */
- ServerInstance->DumpText(user, checkstr + " topic " + targchan->topic);
- ServerInstance->DumpText(user, checkstr + " topic_setby " + targchan->setby);
- ServerInstance->DumpText(user, checkstr + " topic_setat " + timestring(targchan->topicset));
+ user->SendText(checkstr + " topic " + targchan->topic);
+ user->SendText(checkstr + " topic_setby " + targchan->setby);
+ user->SendText(checkstr + " topic_setat " + timestring(targchan->topicset));
}
- ServerInstance->DumpText(user, checkstr + " modes " + targchan->ChanModes(true));
- ServerInstance->DumpText(user, checkstr + " membercount " + ConvToStr(targchan->GetUserCounter()));
+ user->SendText(checkstr + " modes " + targchan->ChanModes(true));
+ user->SendText(checkstr + " membercount " + ConvToStr(targchan->GetUserCounter()));
/* now the ugly bit, spool current members of a channel. :| */
@@ -153,7 +153,7 @@ class CommandCheck : public Command
* Unlike Asuka, I define a clone as coming from the same host. --w00t
*/
snprintf(tmpbuf, MAXBUF, "%-3lu %s%s (%s@%s) %s ", ServerInstance->Users->GlobalCloneCount(i->first), targchan->GetAllPrefixChars(i->first), i->first->nick.c_str(), i->first->ident.c_str(), i->first->dhost.c_str(), i->first->fullname.c_str());
- ServerInstance->DumpText(user, checkstr + " member " + tmpbuf);
+ user->SendText(checkstr + " member " + tmpbuf);
}
dumpExt(user, checkstr, targchan);
@@ -169,20 +169,20 @@ class CommandCheck : public Command
if (InspIRCd::Match(a->second->host, parameters[0], ascii_case_insensitive_map) || InspIRCd::Match(a->second->dhost, parameters[0], ascii_case_insensitive_map))
{
/* host or vhost matches mask */
- ServerInstance->DumpText(user, checkstr + " match " + ConvToStr(++x) + " " + a->second->GetFullRealHost());
+ user->SendText(checkstr + " match " + ConvToStr(++x) + " " + a->second->GetFullRealHost());
}
/* IP address */
else if (InspIRCd::MatchCIDR(a->second->GetIPString(), parameters[0]))
{
/* same IP. */
- ServerInstance->DumpText(user, checkstr + " match " + ConvToStr(++x) + " " + a->second->GetFullRealHost());
+ user->SendText(checkstr + " match " + ConvToStr(++x) + " " + a->second->GetFullRealHost());
}
}
- ServerInstance->DumpText(user, checkstr + " matches " + ConvToStr(x));
+ user->SendText(checkstr + " matches " + ConvToStr(x));
}
- ServerInstance->DumpText(user, checkstr + " END " + parameters[0]);
+ user->SendText(checkstr + " END " + parameters[0]);
return CMD_SUCCESS;
}
diff --git a/src/modules/m_globalload.cpp b/src/modules/m_globalload.cpp
index 50032919a..86b535f4e 100644
--- a/src/modules/m_globalload.cpp
+++ b/src/modules/m_globalload.cpp
@@ -76,7 +76,7 @@ class CommandGunloadmodule : public Command
if (m && ServerInstance->Modules->Unload(m))
{
ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBALLY UNLOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
- ServerInstance->DumpText(user, ":%s 973 %s %s :Module successfully unloaded.",
+ user->SendText(":%s 973 %s %s :Module successfully unloaded.",
ServerInstance->Config->ServerName.c_str(), user->nick.c_str(), parameters[0].c_str());
}
else
diff --git a/src/modules/m_spanningtree/override_map.cpp b/src/modules/m_spanningtree/override_map.cpp
index 7d09d939f..7c9247a06 100644
--- a/src/modules/m_spanningtree/override_map.cpp
+++ b/src/modules/m_spanningtree/override_map.cpp
@@ -170,13 +170,13 @@ bool ModuleSpanningTree::HandleMap(const std::vector<std::string>& parameters, U
{
// terminate the string at maxnamew characters
names[100 * t + maxnamew] = '\0';
- ServerInstance->DumpText(user, ":%s %d %s :%s %s", ServerInstance->Config->ServerName.c_str(),
+ user->SendText(":%s %d %s :%s %s", ServerInstance->Config->ServerName.c_str(),
RPL_MAP, user->nick.c_str(), names + 100 * t, stats + 50 * t);
}
- ServerInstance->DumpText(user, ":%s %d %s :%d server%s and %d user%s, average %.2f users per server",
+ user->SendText(":%s %d %s :%d server%s and %d user%s, average %.2f users per server",
ServerInstance->Config->ServerName.c_str(), RPL_MAPUSERS, user->nick.c_str(),
line, (line > 1 ? "s" : ""), totusers, (totusers > 1 ? "s" : ""), avg_users);
- ServerInstance->DumpText(user, ":%s %d %s :End of /MAP", ServerInstance->Config->ServerName.c_str(),
+ user->SendText(":%s %d %s :End of /MAP", ServerInstance->Config->ServerName.c_str(),
RPL_ENDMAP, user->nick.c_str());
delete[] names;
diff --git a/src/users.cpp b/src/users.cpp
index 616592495..2db223edb 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -1341,32 +1341,48 @@ void User::WriteCommonQuit(const std::string &normal_text, const std::string &op
}
}
-void User::WriteWallOps(const std::string &text)
+void User::SendText(const std::string& line)
{
- std::string wallop("WALLOPS :");
- wallop.append(text);
-
- for (std::vector<User*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++)
- {
- User* t = *i;
- if (t->IsModeSet('w'))
- this->WriteTo(t,wallop);
- }
+ if (IS_LOCAL(this))
+ Write(line);
+ else if (!IS_SERVER(this))
+ ServerInstance->PI->PushToClient(this, line);
}
-void User::WriteWallOps(const char* text, ...)
+void User::SendText(const char *text, ...)
{
- if (!IS_LOCAL(this))
- return;
-
- char textbuffer[MAXBUF];
va_list argsPtr;
+ char line[MAXBUF];
va_start(argsPtr, text);
- vsnprintf(textbuffer, MAXBUF, text, argsPtr);
+ vsnprintf(line, MAXBUF, text, argsPtr);
va_end(argsPtr);
- this->WriteWallOps(std::string(textbuffer));
+ SendText(std::string(line));
+}
+
+void User::SendText(const std::string &LinePrefix, std::stringstream &TextStream)
+{
+ char line[MAXBUF];
+ int start_pos = LinePrefix.length();
+ int pos = start_pos;
+ memcpy(line, LinePrefix.data(), pos);
+ std::string Word;
+ while (TextStream >> Word)
+ {
+ int len = Word.length();
+ if (pos + len + 12 > MAXBUF)
+ {
+ line[pos] = '\0';
+ SendText(std::string(line));
+ pos = start_pos;
+ }
+ line[pos] = ' ';
+ memcpy(line + pos + 1, Word.data(), len);
+ pos += len + 1;
+ }
+ line[pos] = '\0';
+ SendText(std::string(line));
}
/* return 0 or 1 depending if users u and u2 share one or more common channels
@@ -1755,11 +1771,6 @@ void User::IncreasePenalty(int increase)
this->Penalty += increase;
}
-void User::DecreasePenalty(int decrease)
-{
- this->Penalty -= decrease;
-}
-
void FakeUser::SetFakeServer(std::string name)
{
this->nick = name;