summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/m_silence.cpp4
-rw-r--r--src/modules/m_spanningtree/privmsg.cpp61
-rw-r--r--src/modules/m_spanningtree/treesocket.h4
-rw-r--r--src/modules/m_spanningtree/treesocket2.cpp5
-rw-r--r--src/modules/m_spanningtree/utils.cpp2
5 files changed, 75 insertions, 1 deletions
diff --git a/src/modules/m_silence.cpp b/src/modules/m_silence.cpp
index 4c0dd01be..1a554cf63 100644
--- a/src/modules/m_silence.cpp
+++ b/src/modules/m_silence.cpp
@@ -381,6 +381,10 @@ class ModuleSilence : public Module
int MatchPattern(User* dest, User* source, int pattern)
{
+ /* Server source */
+ if (!source)
+ return 1;
+
silencelist* sl;
dest->GetExt("silence_list", sl);
if (sl)
diff --git a/src/modules/m_spanningtree/privmsg.cpp b/src/modules/m_spanningtree/privmsg.cpp
new file mode 100644
index 000000000..b73ba15fb
--- /dev/null
+++ b/src/modules/m_spanningtree/privmsg.cpp
@@ -0,0 +1,61 @@
+/* +------------------------------------+
+ * | Inspire Internet Relay Chat Daemon |
+ * +------------------------------------+
+ *
+ * InspIRCd: (C) 2002-2008 InspIRCd Development Team
+ * See: http://www.inspircd.org/wiki/index.php/Credits
+ *
+ * This program is free but copyrighted software; see
+ * the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
+#include "inspircd.h"
+#include "xline.h"
+
+#include "m_spanningtree/treesocket.h"
+#include "m_spanningtree/treeserver.h"
+#include "m_spanningtree/utils.h"
+
+/* $ModDep: m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/treesocket.h */
+
+
+
+/** remote MOTD. leet, huh? */
+bool TreeSocket::ServerMessage(const std::string &messagetype, const std::string &prefix, std::deque<std::string> &params, const std::string &sourceserv)
+{
+ if (params.size() >= 2)
+ {
+ CUList except_list;
+ char status = '\0';
+ const char* target = params[0].c_str();
+ std::string text = params[1].c_str();
+
+ if ((*target == '@') || (*target == '%') || (*target == '+'))
+ {
+ status = *target;
+ target++;
+ }
+
+ Channel* channel = Instance->FindChan(target);
+
+ if (target)
+ {
+ if (messagetype == "PRIVMSG")
+ {
+ FOREACH_MOD_I(Instance, I_OnUserMessage, OnUserMessage(NULL, channel, TYPE_SERVER, text, status, except_list));
+ }
+ else
+ {
+ FOREACH_MOD_I(Instance, I_OnUserNotice, OnUserNotice(NULL, channel, TYPE_SERVER, text, status, except_list));
+ }
+ channel->WriteChannelWithServ(prefix.c_str(), "%s %s :%s", messagetype.c_str(), channel->name, text.c_str());
+ }
+
+ /* Propogate as channel privmsg */
+ return Utils->DoOneToAllButSenderRaw(":" + prefix + " " + messagetype + " " + channel->name + " :" + text, sourceserv, prefix, assign(messagetype), params);
+ }
+ return true;
+}
+
diff --git a/src/modules/m_spanningtree/treesocket.h b/src/modules/m_spanningtree/treesocket.h
index bc5bdc869..a33e33c88 100644
--- a/src/modules/m_spanningtree/treesocket.h
+++ b/src/modules/m_spanningtree/treesocket.h
@@ -292,6 +292,10 @@ class TreeSocket : public BufferedSocket
*/
bool ForceNick(const std::string &prefix, std::deque<std::string> &params);
+ /** PRIVMSG or NOTICE with server origin ONLY
+ */
+ bool ServerMessage(const std::string &messagetype, const std::string &prefix, std::deque<std::string> &params, const std::string &sourceserv);
+
/** ENCAP command
*/
bool Encap(const std::string &prefix, std::deque<std::string> &params);
diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp
index 152f9dec3..903186b31 100644
--- a/src/modules/m_spanningtree/treesocket2.cpp
+++ b/src/modules/m_spanningtree/treesocket2.cpp
@@ -347,6 +347,11 @@ bool TreeSocket::ProcessLine(std::string &line)
{
return this->ForceJoin(prefix,params);
}
+ else if (command == "NOTICE" || command == "PRIVMSG")
+ {
+ if (Utils->IsServer(prefix))
+ return this->ServerMessage(assign(command), prefix, params, sourceserv);
+ }
else if (command == "STATS")
{
return this->Stats(prefix, params);
diff --git a/src/modules/m_spanningtree/utils.cpp b/src/modules/m_spanningtree/utils.cpp
index 7b0899699..8181969ac 100644
--- a/src/modules/m_spanningtree/utils.cpp
+++ b/src/modules/m_spanningtree/utils.cpp
@@ -229,7 +229,7 @@ bool SpanningTreeUtilities::DoOneToAllButSenderRaw(const std::string &data, cons
{
Channel* c = ServerInstance->FindChan(params[0]);
User* u = ServerInstance->FindNick(prefix);
- if (c && u)
+ if (c)
{
CUList elist;
TreeServerList list;