aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_spanningtree/main.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2019-07-16 15:11:21 +0100
committerGravatar Sadie Powell2019-07-16 16:48:18 +0100
commitcd8b456f979733525941284639d8bf899173b429 (patch)
treef1d26962e61c74c5acb076662a909beafbe8e5fd /src/modules/m_spanningtree/main.cpp
parentReplace socketengine_{pthread,win32} with C++11 threads. (diff)
parentssl_gnutls: remove PackageInfo directives for EOL Debian versions. (diff)
downloadinspircd++-cd8b456f979733525941284639d8bf899173b429.tar.gz
inspircd++-cd8b456f979733525941284639d8bf899173b429.tar.bz2
inspircd++-cd8b456f979733525941284639d8bf899173b429.zip
Merge branch 'insp3' into master.
Diffstat (limited to 'src/modules/m_spanningtree/main.cpp')
-rw-r--r--src/modules/m_spanningtree/main.cpp92
1 files changed, 67 insertions, 25 deletions
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp
index 45de074db..6177d7859 100644
--- a/src/modules/m_spanningtree/main.cpp
+++ b/src/modules/m_spanningtree/main.cpp
@@ -39,12 +39,15 @@
ModuleSpanningTree::ModuleSpanningTree()
: Away::EventListener(this)
, Stats::EventListener(this)
+ , CTCTags::EventListener(this)
, rconnect(this)
, rsquit(this)
, map(this)
, commands(this)
, currmembid(0)
- , eventprov(this, "event/server")
+ , broadcasteventprov(this, "event/server-broadcast")
+ , linkeventprov(this, "event/server-link")
+ , synceventprov(this, "event/server-sync")
, sslapi(this)
, DNS(this, "DNS")
, tagevprov(this, "event/messagetag")
@@ -191,11 +194,9 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y)
}
irc::sockets::sockaddrs sa;
-#ifndef _WIN32
if (x->IPAddr.find('/') != std::string::npos)
{
- struct stat sb;
- if (stat(x->IPAddr.c_str(), &sb) == -1 || !S_ISSOCK(sb.st_mode) || !irc::sockets::untosa(x->IPAddr, sa))
+ if (!irc::sockets::isunix(x->IPAddr) || !irc::sockets::untosa(x->IPAddr, sa))
{
// We don't use the family() != AF_UNSPEC check below for UNIX sockets as
// that results in a DNS lookup.
@@ -205,7 +206,6 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y)
}
}
else
-#endif
{
// If this fails then the IP sa will be AF_UNSPEC.
irc::sockets::aptosa(x->IPAddr, x->Port, sa);
@@ -394,30 +394,72 @@ void ModuleSpanningTree::OnUserPostMessage(User* user, const MessageTarget& targ
return;
const char* message_type = (details.type == MSG_PRIVMSG ? "PRIVMSG" : "NOTICE");
- if (target.type == MessageTarget::TYPE_USER)
+ switch (target.type)
{
- User* d = target.Get<User>();
- if (!IS_LOCAL(d))
+ case MessageTarget::TYPE_USER:
{
- CmdBuilder params(user, message_type);
- params.push_tags(details.tags_out);
- params.push_back(d->uuid);
- params.push_last(details.text);
- params.Unicast(d);
+ User* d = target.Get<User>();
+ if (!IS_LOCAL(d))
+ {
+ CmdBuilder params(user, message_type);
+ params.push_tags(details.tags_out);
+ params.push_back(d->uuid);
+ params.push_last(details.text);
+ params.Unicast(d);
+ }
+ break;
+ }
+ case MessageTarget::TYPE_CHANNEL:
+ {
+ Utils->SendChannelMessage(user->uuid, target.Get<Channel>(), details.text, target.status, details.tags_out, details.exemptions, message_type);
+ break;
+ }
+ case MessageTarget::TYPE_SERVER:
+ {
+ const std::string* serverglob = target.Get<std::string>();
+ CmdBuilder par(user, message_type);
+ par.push_tags(details.tags_out);
+ par.push_back(*serverglob);
+ par.push_last(details.text);
+ par.Broadcast();
+ break;
}
}
- else if (target.type == MessageTarget::TYPE_CHANNEL)
- {
- Utils->SendChannelMessage(user->uuid, target.Get<Channel>(), details.text, target.status, details.tags_out, details.exemptions, message_type);
- }
- else if (target.type == MessageTarget::TYPE_SERVER)
+}
+
+void ModuleSpanningTree::OnUserPostTagMessage(User* user, const MessageTarget& target, const CTCTags::TagMessageDetails& details)
+{
+ if (!IS_LOCAL(user))
+ return;
+
+ switch (target.type)
{
- const std::string* serverglob = target.Get<std::string>();
- CmdBuilder par(user, message_type);
- par.push_tags(details.tags_out);
- par.push_back(*serverglob);
- par.push_last(details.text);
- par.Broadcast();
+ case MessageTarget::TYPE_USER:
+ {
+ User* d = target.Get<User>();
+ if (!IS_LOCAL(d))
+ {
+ CmdBuilder params(user, "TAGMSG");
+ params.push_tags(details.tags_out);
+ params.push_back(d->uuid);
+ params.Unicast(d);
+ }
+ break;
+ }
+ case MessageTarget::TYPE_CHANNEL:
+ {
+ Utils->SendChannelMessage(user->uuid, target.Get<Channel>(), "", target.status, details.tags_out, details.exemptions, "TAGMSG");
+ break;
+ }
+ case MessageTarget::TYPE_SERVER:
+ {
+ const std::string* serverglob = target.Get<std::string>();
+ CmdBuilder par(user, "TAGMSG");
+ par.push_tags(details.tags_out);
+ par.push_back(*serverglob);
+ par.Broadcast();
+ break;
+ }
}
}
@@ -647,7 +689,7 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod)
{
TreeServer* server = i->second;
if (!server->IsRoot())
- FOREACH_MOD_CUSTOM(GetEventProvider(), ServerEventListener, OnServerSplit, (server));
+ FOREACH_MOD_CUSTOM(GetLinkEventProvider(), ServerProtocol::LinkEventListener, OnServerSplit, (server));
}
return;
}