summaryrefslogtreecommitdiff
path: root/modules/protocol/hybrid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/protocol/hybrid.cpp')
-rw-r--r--modules/protocol/hybrid.cpp102
1 files changed, 78 insertions, 24 deletions
diff --git a/modules/protocol/hybrid.cpp b/modules/protocol/hybrid.cpp
index 05e589a08..232c9e9e6 100644
--- a/modules/protocol/hybrid.cpp
+++ b/modules/protocol/hybrid.cpp
@@ -372,6 +372,21 @@ struct IRCDMessageCapab : Message::Capab
}
};
+struct IRCDMessageCertFP: IRCDMessage
+{
+ IRCDMessageCertFP(Module *creator) : IRCDMessage(creator, "CERTFP", 1) { SetFlag(IRCDMESSAGE_REQUIRE_USER); }
+
+ /* 0 */
+ /* :0MCAAAAAB CERTFP 4C62287BA6776A89CD4F8FF10A62FFB35E79319F51AF6C62C674984974FCCB1D */
+ void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
+ {
+ User *u = source.GetUser();
+
+ u->fingerprint = params[0];
+ FOREACH_MOD(OnFingerprint, (u));
+ }
+};
+
struct IRCDMessageEOB : IRCDMessage
{
IRCDMessageEOB(Module *creator) : IRCDMessage(creator, "EOB", 0) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); }
@@ -398,6 +413,32 @@ struct IRCDMessageJoin : Message::Join
}
};
+struct IRCDMessageMetadata : IRCDMessage
+{
+ IRCDMessageMetadata(Module *creator) : IRCDMessage(creator, "METADATA", 3) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); }
+
+ /* 0 1 2 3 */
+ /* :0MC METADATA client 0MCAAAAAB certfp :4C62287BA6776A89CD4F8FF10A62FFB35E79319F51AF6C62C674984974FCCB1D */
+ void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
+ {
+ if (params[0].equals_cs("client"))
+ {
+ User *u = User::Find(params[1]);
+ if (!u)
+ {
+ Log(LOG_DEBUG) << "METADATA for nonexistent user " << params[1];
+ return;
+ }
+
+ if (params[2].equals_cs("certfp"))
+ {
+ u->fingerprint = params[3];
+ FOREACH_MOD(OnFingerprint, (u));
+ }
+ }
+ }
+};
+
struct IRCDMessageMLock : IRCDMessage
{
IRCDMessageMLock(Module *creator) : IRCDMessage(creator, "MLOCK", 4) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); }
@@ -629,21 +670,6 @@ struct IRCDMessageUID : IRCDMessage
}
};
-struct IRCDMessageCertFP: IRCDMessage
-{
- IRCDMessageCertFP(Module *creator) : IRCDMessage(creator, "CERTFP", 1) { SetFlag(IRCDMESSAGE_REQUIRE_USER); }
-
- /* 0 */
- /* :0MCAAAAAB CERTFP 4C62287BA6776A89CD4F8FF10A62FFB35E79319F51AF6C62C674984974FCCB1D */
- void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
- {
- User *u = source.GetUser();
-
- u->fingerprint = params[0];
- FOREACH_MOD(OnFingerprint, (u));
- }
-};
-
class ProtoHybrid : public Module
{
HybridProto ircd_proto;
@@ -671,8 +697,10 @@ class ProtoHybrid : public Module
/* Our message handlers */
IRCDMessageBMask message_bmask;
IRCDMessageCapab message_capab;
+ IRCDMessageCertFP message_certfp;
IRCDMessageEOB message_eob;
IRCDMessageJoin message_join;
+ IRCDMessageMetadata message_metadata;
IRCDMessageMLock message_mlock;
IRCDMessageNick message_nick;
IRCDMessagePass message_pass;
@@ -684,7 +712,6 @@ class ProtoHybrid : public Module
IRCDMessageTBurst message_tburst;
IRCDMessageTMode message_tmode;
IRCDMessageUID message_uid;
- IRCDMessageCertFP message_certfp;
bool use_server_side_mlock;
@@ -749,14 +776,41 @@ class ProtoHybrid : public Module
public:
ProtoHybrid(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL | VENDOR),
ircd_proto(this),
- message_away(this), message_error(this), message_invite(this), message_kick(this),
- message_kill(this), message_mode(this), message_motd(this), message_notice(this), message_part(this),
- message_ping(this), message_privmsg(this), message_quit(this), message_squit(this), message_stats(this),
- message_time(this), message_topic(this), message_version(this), message_whois(this),
- message_bmask(this), message_capab(this), message_eob(this), message_join(this), message_mlock(this),
- message_nick(this), message_pass(this), message_pong(this), message_server(this), message_sid(this),
- message_sjoin(this), message_svsmode(this), message_tburst(this), message_tmode(this), message_uid(this),
- message_certfp(this)
+ message_away(this),
+ message_error(this),
+ message_invite(this),
+ message_kick(this),
+ message_kill(this),
+ message_mode(this),
+ message_motd(this),
+ message_notice(this),
+ message_part(this),
+ message_ping(this),
+ message_privmsg(this),
+ message_quit(this),
+ message_squit(this),
+ message_stats(this),
+ message_time(this),
+ message_topic(this),
+ message_version(this),
+ message_whois(this),
+ message_bmask(this),
+ message_capab(this),
+ message_certfp(this),
+ message_eob(this),
+ message_join(this),
+ message_metadata(this),
+ message_mlock(this),
+ message_nick(this),
+ message_pass(this),
+ message_pong(this),
+ message_server(this),
+ message_sid(this),
+ message_sjoin(this),
+ message_svsmode(this),
+ message_tburst(this),
+ message_tmode(this),
+ message_uid(this)
{
if (Config->GetModule(this))
this->AddModes();