diff options
author | Adam <Adam@anope.org> | 2017-04-06 16:24:15 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2017-04-06 16:24:15 -0400 |
commit | 25b2fd0730f199f5fb8d3888906e0b600c62e55a (patch) | |
tree | 3e9972f45833c969e0703c6b3b9b6c7962290f26 | |
parent | e4a36498000b35803946731e3057cf8f9ee827e8 (diff) | |
parent | f4543edfe25d3c067f4884df1c0b101161342318 (diff) |
Merge commit 'f4543edfe25d3c067f4884df1c0b101161342318'
-rw-r--r-- | include/modules/protocol/plexus.h | 20 | ||||
-rw-r--r-- | modules/protocol/charybdis.cpp | 1 | ||||
-rw-r--r-- | modules/protocol/plexus.cpp | 36 |
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> ¶ms) 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) |