From 5aa15d562896b6e86b7dc1041441e468cd015771 Mon Sep 17 00:00:00 2001 From: Hubert Hirtz Date: Thu, 21 Jan 2021 09:22:15 +0100 Subject: [PATCH] Request invite-notify to upstreams ... and do not forward INVITEs to downstreams that do not support the capability. The downstream capability can be permanent because there is no way for a client to get the list of people invited to a channel, thus no state can be corrupted. --- downstream.go | 13 +++++++------ upstream.go | 6 ++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/downstream.go b/downstream.go index 4bc59fb..b69a475 100644 --- a/downstream.go +++ b/downstream.go @@ -64,12 +64,13 @@ const illegalNickChars = " :@!*?" // permanentDownstreamCaps is the list of always-supported downstream // capabilities. var permanentDownstreamCaps = map[string]string{ - "batch": "", - "cap-notify": "", - "echo-message": "", - "message-tags": "", - "sasl": "PLAIN", - "server-time": "", + "batch": "", + "cap-notify": "", + "echo-message": "", + "invite-notify": "", + "message-tags": "", + "sasl": "PLAIN", + "server-time": "", } // needAllDownstreamCaps is the list of downstream capabilities that diff --git a/upstream.go b/upstream.go index dc6ef5b..f0fdf63 100644 --- a/upstream.go +++ b/upstream.go @@ -27,6 +27,7 @@ var permanentUpstreamCaps = map[string]bool{ "away-notify": true, "batch": true, "extended-join": true, + "invite-notify": true, "labeled-response": true, "message-tags": true, "multi-prefix": true, @@ -1279,7 +1280,12 @@ func (uc *upstreamConn) handleMessage(msg *irc.Message) error { return err } + weAreInvited := nick == uc.nick + uc.forEachDownstream(func(dc *downstreamConn) { + if !weAreInvited && !dc.caps["invite-notify"] { + return + } dc.SendMessage(&irc.Message{ Prefix: dc.marshalUserPrefix(uc.network, msg.Prefix), Command: "INVITE",