aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Sadie Powell2021-03-30 14:09:40 +0100
committerGravatar Sadie Powell2021-03-30 14:09:40 +0100
commit91ceed9d930430ee85dda152825b5ca2fbcfb593 (patch)
tree14f26ed9fdda5d7c7d5636f98612f4047845bdf6 /src/modules
parentMerge branch 'insp3' into master. (diff)
downloadinspircd++-91ceed9d930430ee85dda152825b5ca2fbcfb593.tar.gz
inspircd++-91ceed9d930430ee85dda152825b5ca2fbcfb593.tar.bz2
inspircd++-91ceed9d930430ee85dda152825b5ca2fbcfb593.zip
Add the ~ server tag prefix.
This is used for sending arbitrarily tagged messages between servers.
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_spanningtree/main.cpp1
-rw-r--r--src/modules/m_spanningtree/main.h3
-rw-r--r--src/modules/m_spanningtree/tags.cpp20
-rw-r--r--src/modules/m_spanningtree/tags.h8
4 files changed, 32 insertions, 0 deletions
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp
index 19109ea35..f93d9fe27 100644
--- a/src/modules/m_spanningtree/main.cpp
+++ b/src/modules/m_spanningtree/main.cpp
@@ -54,6 +54,7 @@ ModuleSpanningTree::ModuleSpanningTree()
, messageeventprov(this, "event/server-message")
, synceventprov(this, "event/server-sync")
, sslapi(this)
+ , servertags(this)
, servicetag(this)
, DNS(this, "DNS")
, tagevprov(this)
diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h
index 85361e5a7..0d4c32d72 100644
--- a/src/modules/m_spanningtree/main.h
+++ b/src/modules/m_spanningtree/main.h
@@ -109,6 +109,9 @@ class ModuleSpanningTree
/** API for accessing user SSL certificates. */
UserCertificateAPI sslapi;
+ /** Tags for server to server messages. */
+ ServerTags servertags;
+
/** Tag for marking services pseudoclients. */
ServiceTag servicetag;
diff --git a/src/modules/m_spanningtree/tags.cpp b/src/modules/m_spanningtree/tags.cpp
index e02235afb..9d0150fee 100644
--- a/src/modules/m_spanningtree/tags.cpp
+++ b/src/modules/m_spanningtree/tags.cpp
@@ -19,6 +19,26 @@
#include "main.h"
+ServerTags::ServerTags(Module* Creator)
+ : ClientProtocol::MessageTagProvider(Creator)
+{
+}
+
+ModResult ServerTags::OnProcessTag(User* user, const std::string& tagname, std::string& tagvalue)
+{
+ if (tagname[0] != '~' || tagname.length() < 2)
+ return MOD_RES_PASSTHRU;
+
+ // Only allow tags from remote users.
+ return IS_LOCAL(user) ? MOD_RES_DENY : MOD_RES_ALLOW;
+}
+
+bool ServerTags::ShouldSendTag(LocalUser* user, const ClientProtocol::MessageTagData& tagdata)
+{
+ // Server tags should never be sent to users.
+ return false;
+}
+
ServiceTag::ServiceTag(Module* mod)
: ClientProtocol::MessageTagProvider(mod)
, ctctagcap(mod)
diff --git a/src/modules/m_spanningtree/tags.h b/src/modules/m_spanningtree/tags.h
index 1f402b597..c7118f319 100644
--- a/src/modules/m_spanningtree/tags.h
+++ b/src/modules/m_spanningtree/tags.h
@@ -21,6 +21,14 @@
#include "modules/ctctags.h"
+class ServerTags : public ClientProtocol::MessageTagProvider
+{
+ public:
+ ServerTags(Module* Creator);
+ ModResult OnProcessTag(User* user, const std::string& tagname, std::string& tagvalue) override;
+ bool ShouldSendTag(LocalUser* user, const ClientProtocol::MessageTagData& tagdata) override;
+};
+
class ServiceTag : public ClientProtocol::MessageTagProvider
{
private: