summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2017-04-06 16:24:15 -0400
committerAdam <Adam@anope.org>2017-04-06 16:24:15 -0400
commit25b2fd0730f199f5fb8d3888906e0b600c62e55a (patch)
tree3e9972f45833c969e0703c6b3b9b6c7962290f26
parente4a36498000b35803946731e3057cf8f9ee827e8 (diff)
parentf4543edfe25d3c067f4884df1c0b101161342318 (diff)
Merge commit 'f4543edfe25d3c067f4884df1c0b101161342318'
-rw-r--r--include/modules/protocol/plexus.h20
-rw-r--r--modules/protocol/charybdis.cpp1
-rw-r--r--modules/protocol/plexus.cpp36
3 files changed, 54 insertions, 3 deletions
diff --git a/include/modules/protocol/plexus.h b/include/modules/protocol/plexus.h
index 4afbc391e..4d35cdd1f 100644
--- a/include/modules/protocol/plexus.h
+++ b/include/modules/protocol/plexus.h
@@ -53,6 +53,14 @@ class NOOP : public messages::NOOP
void Send(Server *s, bool mode) override;
};
+class SASL : public messages::SASL
+{
+ public:
+ using messages::SASL::SASL;
+
+ void Send(const ::SASL::Message &) override;
+};
+
class Topic : public messages::Topic
{
public:
@@ -69,6 +77,14 @@ class SVSJoin : public messages::SVSJoin
void Send(const MessageSource &source, User *u, const Anope::string &chan, const Anope::string &key) override;
};
+class SVSLogin : public messages::SVSLogin
+{
+ public:
+ using messages::SVSLogin::SVSLogin;
+
+ void Send(const Anope::string &uid, const Anope::string &acc, const Anope::string &vident, const Anope::string &vhost) override;
+};
+
class SVSNick : public messages::SVSNick
{
public:
@@ -113,8 +129,10 @@ class Proto : public ts6::Proto
class Encap : public IRCDMessage
{
+ ServiceReference<SASL::Service> sasl;
+
public:
- Encap(Module *creator) : IRCDMessage(creator, "ENCAP", 4) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); }
+ Encap(Module *creator) : IRCDMessage(creator, "ENCAP", 4) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); SetFlag(IRCDMESSAGE_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params) override;
};
diff --git a/modules/protocol/charybdis.cpp b/modules/protocol/charybdis.cpp
index a808bb594..4b97e72f5 100644
--- a/modules/protocol/charybdis.cpp
+++ b/modules/protocol/charybdis.cpp
@@ -43,6 +43,7 @@ void charybdis::senders::NickIntroduction::Send(User *user)
Anope::string modes = "+" + user->GetModes();
Uplink::Send(Me, "EUID", user->nick, 1, user->timestamp, modes, user->GetIdent(), user->host, 0, user->GetUID(), "*", "*", user->realname);
}
+
void charybdis::senders::SASL::Send(const ::SASL::Message& message)
{
Server *s = Server::Find(message.target.substr(0, 3));
diff --git a/modules/protocol/plexus.cpp b/modules/protocol/plexus.cpp
index 68c23f18e..6788cabe0 100644
--- a/modules/protocol/plexus.cpp
+++ b/modules/protocol/plexus.cpp
@@ -20,6 +20,7 @@
/* Dependencies: anope_protocol.ratbox */
#include "module.h"
+#include "modules/sasl.h"
#include "modules/protocol/plexus.h"
#include "modules/protocol/hybrid.h"
#include "modules/protocol/ratbox.h"
@@ -44,6 +45,14 @@ void plexus::senders::NOOP::Send(Server* server, bool mode)
Uplink::Send("ENCAP", server->GetName(), "SVSNOOP", (mode ? "+" : "-"));
}
+void plexus::senders::SASL::Send(const ::SASL::Message& message)
+{
+ Anope::string sid = message.target.substr(0, 3);
+ Server *s = Server::Find(sid);
+ Uplink::Send(Me, "ENCAP", s ? s->GetName() : sid, "SASL",
+ message.source, message.target, message.type, message.data, message.ext.empty() ? "" : message.ext);
+}
+
void plexus::senders::Topic::Send(const MessageSource &source, Channel *channel, const Anope::string &topic, time_t topic_ts, const Anope::string &topic_setter)
{
Uplink::Send(source, "ENCAP", "*", "TOPIC", channel->name, topic_setter, topic_ts, topic);
@@ -54,6 +63,14 @@ void plexus::senders::SVSJoin::Send(const MessageSource& source, User* user, con
Uplink::Send(source, "ENCAP", user->server->GetName(), "SVSJOIN", user->GetUID(), chan);
}
+void plexus::senders::SVSLogin::Send(const Anope::string& uid, const Anope::string& acc, const Anope::string& vident, const Anope::string& vhost)
+{
+ Anope::string sid = uid.substr(0, 3);
+ Server *s = Server::Find(sid);
+
+ Uplink::Send(Me, "ENCAP", s ? s->GetName() : sid, "SVSLOGIN", uid, "*", vident.empty() ? "*" : vident, vhost.empty() ? "*" : vhost, acc);
+}
+
void plexus::senders::SVSNick::Send(User* u, const Anope::string& newnick, time_t ts)
{
Uplink::Send(Me, "ENCAP", u->server->GetName(), "SVSNICK", u->GetUID(), u->timestamp, newnick, ts);
@@ -79,7 +96,7 @@ void plexus::senders::VhostSet::Send(User* u, const Anope::string& vident, const
plexus::Proto::Proto(Module *creator) : ts6::Proto(creator, "Plexus 4")
{
- DefaultPseudoclientModes = "+oiU";
+ DefaultPseudoclientModes = "+iU";
CanSVSNick = true;
CanSVSJoin = true;
CanSetVHost = true;
@@ -168,7 +185,18 @@ void plexus::Encap::Run(MessageSource &source, const std::vector<Anope::string>
EventManager::Get()->Dispatch(&Event::Fingerprint::OnFingerprint, u);
}
}
- return;
+
+ else if (params[1] == "SASL" && sasl && params.size() >= 6)
+ {
+ SASL::Message m;
+ m.source = params[2];
+ m.target = params[3];
+ m.type = params[4];
+ m.data = params[5];
+ m.ext = params.size() > 6 ? params[6] : "";
+
+ sasl->ProcessMessage(m);
+ }
}
struct IRCDMessagePass : IRCDMessage
@@ -308,7 +336,9 @@ class ProtoPlexus : public Module
plexus::senders::ModeUser sender_mode_user;
plexus::senders::NickIntroduction sender_nickintroduction;
plexus::senders::NOOP sender_noop;
+ plexus::senders::SASL sender_sasl;
plexus::senders::SVSJoin sender_svsjoin;
+ plexus::senders::SVSLogin sender_svslogin;
plexus::senders::SVSNick sender_svsnick;
plexus::senders::SVSPart sender_svspart;
plexus::senders::Topic sender_topic;
@@ -367,6 +397,7 @@ class ProtoPlexus : public Module
, sender_nickchange(this)
, sender_nickintroduction(this)
, sender_noop(this)
+ , sender_sasl(this)
, sender_notice(this)
, sender_part(this)
, sender_ping(this)
@@ -380,6 +411,7 @@ class ProtoPlexus : public Module
, sender_svshold(this)
, sender_svsholddel(this)
, sender_svsjoin(this)
+ , sender_svslogin(this)
, sender_svsnick(this)
, sender_svspart(this)
, sender_topic(this)