diff options
author | Simon Ser <contact@emersion.fr> | 2021-12-01 11:48:03 +0000 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2021-12-06 11:36:26 +0100 |
commit | ee21112465e25f0e003d4254ce839dcde3304e6a (patch) | |
tree | cade8141d2e06ac68da17d5883ae0f594ae83283 | |
parent | Use second precision for bound computation (diff) |
Don't double-enable caps
Some servers might adjust their sasl cap at runtime, e.g.
CAP NEW sasl=PLAIN,EXTERNAL
[…]
CAP NEW sasl=PLAIN
In this case, we don't really want to `CAP REQ sasl` again, because
this will make us re-authenticate a second time.
Avoid requesting caps which have already been ACKed.
-rw-r--r-- | irc/session.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/irc/session.go b/irc/session.go index b6d5873..87b77b6 100644 --- a/irc/session.go +++ b/irc/session.go @@ -650,8 +650,10 @@ func (s *Session) handleMessageRegistered(msg Message, playback bool) (Event, er case "NEW": for _, c := range ParseCaps(caps) { s.availableCaps[c.Name] = c.Value - _, ok := SupportedCapabilities[c.Name] - if !ok { + if _, ok := SupportedCapabilities[c.Name]; !ok { + continue + } + if _, ok := s.enabledCaps[c.Name]; ok { continue } s.out <- NewMessage("CAP", "REQ", c.Name) |