summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_sasl.cpp6
-rw-r--r--src/modules/m_showwhois.cpp4
-rw-r--r--src/modules/m_spanningtree/protocolinterface.cpp29
-rw-r--r--src/modules/m_spanningtree/protocolinterface.h2
4 files changed, 25 insertions, 16 deletions
diff --git a/src/modules/m_sasl.cpp b/src/modules/m_sasl.cpp
index 796d343ea..074362651 100644
--- a/src/modules/m_sasl.cpp
+++ b/src/modules/m_sasl.cpp
@@ -31,7 +31,7 @@ static std::string sasl_target = "*";
static void SendSASL(const parameterlist& params)
{
- if (!ServerInstance->PI->SendEncapsulatedData(params))
+ if (!ServerInstance->PI->SendEncapsulatedData(sasl_target, "SASL", params))
{
SASLFallback(NULL, params);
}
@@ -54,8 +54,6 @@ class SaslAuthenticator
: user(user_), state(SASL_INIT), state_announced(false)
{
parameterlist params;
- params.push_back(sasl_target);
- params.push_back("SASL");
params.push_back(user->uuid);
params.push_back("*");
params.push_back("S");
@@ -132,8 +130,6 @@ class SaslAuthenticator
return true;
parameterlist params;
- params.push_back(sasl_target);
- params.push_back("SASL");
params.push_back(this->user->uuid);
params.push_back(this->agent);
params.push_back("C");
diff --git a/src/modules/m_showwhois.cpp b/src/modules/m_showwhois.cpp
index 332752f93..ba17942cb 100644
--- a/src/modules/m_showwhois.cpp
+++ b/src/modules/m_showwhois.cpp
@@ -110,11 +110,9 @@ class ModuleShowwhois : public Module
else
{
std::vector<std::string> params;
- params.push_back(dest->server->GetName());
- params.push_back("WHOISNOTICE");
params.push_back(dest->uuid);
params.push_back(source->uuid);
- ServerInstance->PI->SendEncapsulatedData(params);
+ ServerInstance->PI->SendEncapsulatedData(dest->server->GetName(), cmd.name, params);
}
}
};
diff --git a/src/modules/m_spanningtree/protocolinterface.cpp b/src/modules/m_spanningtree/protocolinterface.cpp
index 7a2b033d9..ee5e31984 100644
--- a/src/modules/m_spanningtree/protocolinterface.cpp
+++ b/src/modules/m_spanningtree/protocolinterface.cpp
@@ -44,16 +44,31 @@ void SpanningTreeProtocolInterface::GetServerList(ServerList& sl)
}
}
-bool SpanningTreeProtocolInterface::SendEncapsulatedData(const parameterlist &encap)
+bool SpanningTreeProtocolInterface::SendEncapsulatedData(const std::string& targetmask, const std::string& cmd, const parameterlist& params, User* source)
{
- CmdBuilder params("ENCAP");
- params.insert(encap);
- if (encap[0].find_first_of("*?") != std::string::npos)
+ if (!source)
+ source = ServerInstance->FakeClient;
+
+ CmdBuilder encap(source, "ENCAP");
+
+ // Are there any wildcards in the target string?
+ if (targetmask.find_first_of("*?") != std::string::npos)
{
- params.Broadcast();
- return true;
+ // Yes, send the target string as-is; servers will decide whether or not it matches them
+ encap.push(targetmask).push(cmd).insert(params).Broadcast();
+ }
+ else
+ {
+ // No wildcards which means the target string has to be the name of a known server
+ TreeServer* server = Utils->FindServer(targetmask);
+ if (!server)
+ return false;
+
+ // Use the SID of the target in the message instead of the server name
+ encap.push(server->GetID()).push(cmd).insert(params).Unicast(server->ServerUser);
}
- return params.Unicast(encap[0]);
+
+ return true;
}
void SpanningTreeProtocolInterface::SendMetaData(User* u, const std::string& key, const std::string& data)
diff --git a/src/modules/m_spanningtree/protocolinterface.h b/src/modules/m_spanningtree/protocolinterface.h
index 745a0c3cc..04b56c181 100644
--- a/src/modules/m_spanningtree/protocolinterface.h
+++ b/src/modules/m_spanningtree/protocolinterface.h
@@ -31,7 +31,7 @@ class SpanningTreeProtocolInterface : public ProtocolInterface
void SendMetaData(const std::string& key, const std::string& data) CXX11_OVERRIDE;
};
- bool SendEncapsulatedData(const parameterlist &encap);
+ bool SendEncapsulatedData(const std::string& targetmask, const std::string& cmd, const parameterlist& params, User* source) CXX11_OVERRIDE;
void SendMetaData(User* user, const std::string& key, const std::string& data) CXX11_OVERRIDE;
void SendMetaData(Channel* chan, const std::string& key, const std::string& data) CXX11_OVERRIDE;
void SendMetaData(const std::string& key, const std::string& data) CXX11_OVERRIDE;