diff options
author | Hubert Hirtz <hubert@hirtz.pm> | 2021-11-16 09:34:44 +0100 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2021-11-16 22:25:03 +0100 |
commit | aef7703fe4c2c7ea0c9c832dc5be3f03b2a94032 (patch) | |
tree | a72ed4da18804c4ed8bf3e3e724a61f61f3c3494 | |
parent | Allow App.Close() and App.Run() to be run concurrently (diff) |
Eagerly request capabilities
It simplifies the code and make registration use one less roundtrip
-rw-r--r-- | irc/session.go | 51 |
1 files changed, 6 insertions, 45 deletions
diff --git a/irc/session.go b/irc/session.go index 07df816..4568172 100644 --- a/irc/session.go +++ b/irc/session.go @@ -159,6 +159,9 @@ func NewSession(out chan<- Message, params SessionParams) *Session { } s.out <- NewMessage("CAP", "LS", "302") + for capability := range SupportedCapabilities { + s.out <- NewMessage("CAP", "REQ", capability) + } s.out <- NewMessage("NICK", s.nick) s.out <- NewMessage("USER", s.user, "0", "*", s.real) @@ -499,47 +502,6 @@ func (s *Session) handleUnregistered(msg Message) (Event, error) { s.host = ParsePrefix(userhost).Host case errNicklocked, errSaslfail, errSasltoolong, errSaslaborted, errSaslalready, rplSaslmechs: s.endRegistration() - case "CAP": - var subcommand string - if err := msg.ParseParams(nil, &subcommand); err != nil { - return nil, err - } - - switch subcommand { - case "LS": - var ls string - if err := msg.ParseParams(nil, nil, &ls); err != nil { - return nil, err - } - - willContinue := false - if ls == "*" { - if err := msg.ParseParams(nil, nil, nil, &ls); err != nil { - return nil, err - } - willContinue = true - } - - for _, c := range ParseCaps(ls) { - s.availableCaps[c.Name] = c.Value - } - - if !willContinue { - for c := range s.availableCaps { - if _, ok := SupportedCapabilities[c]; !ok { - continue - } - s.out <- NewMessage("CAP", "REQ", c) - } - - _, ok := s.availableCaps["sasl"] - if s.auth == nil || !ok { - s.endRegistration() - } - } - default: - return s.handleRegistered(msg) - } case errNicknameinuse: var nick string if err := msg.ParseParams(nil, &nick); err != nil { @@ -992,11 +954,10 @@ func (s *Session) handleRegistered(msg Message) (Event, error) { } if t, ok := msg.Tags["+typing"]; ok { - if t == "active" { + switch t { + case "active": s.typings.Active(targetCf, nickCf) - } else if t == "paused" { - s.typings.Done(targetCf, nickCf) - } else if t == "done" { + case "paused", "done": s.typings.Done(targetCf, nickCf) } } |