summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHubert Hirtz <hubert@hirtz.pm>2021-11-16 09:34:44 +0100
committerHubert Hirtz <hubert@hirtz.pm>2021-11-16 22:25:03 +0100
commitaef7703fe4c2c7ea0c9c832dc5be3f03b2a94032 (patch)
treea72ed4da18804c4ed8bf3e3e724a61f61f3c3494
parentAllow 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.go51
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)
}
}