commit aef7703
Hubert Hirtz
·
2021-11-16 08:34:44 +0000 UTC
parent d40d8dc
Eagerly request capabilities It simplifies the code and make registration use one less roundtrip
1 files changed,
+6,
-45
+6,
-45
1@@ -159,6 +159,9 @@ func NewSession(out chan<- Message, params SessionParams) *Session {
2 }
3
4 s.out <- NewMessage("CAP", "LS", "302")
5+ for capability := range SupportedCapabilities {
6+ s.out <- NewMessage("CAP", "REQ", capability)
7+ }
8 s.out <- NewMessage("NICK", s.nick)
9 s.out <- NewMessage("USER", s.user, "0", "*", s.real)
10
11@@ -499,47 +502,6 @@ func (s *Session) handleUnregistered(msg Message) (Event, error) {
12 s.host = ParsePrefix(userhost).Host
13 case errNicklocked, errSaslfail, errSasltoolong, errSaslaborted, errSaslalready, rplSaslmechs:
14 s.endRegistration()
15- case "CAP":
16- var subcommand string
17- if err := msg.ParseParams(nil, &subcommand); err != nil {
18- return nil, err
19- }
20-
21- switch subcommand {
22- case "LS":
23- var ls string
24- if err := msg.ParseParams(nil, nil, &ls); err != nil {
25- return nil, err
26- }
27-
28- willContinue := false
29- if ls == "*" {
30- if err := msg.ParseParams(nil, nil, nil, &ls); err != nil {
31- return nil, err
32- }
33- willContinue = true
34- }
35-
36- for _, c := range ParseCaps(ls) {
37- s.availableCaps[c.Name] = c.Value
38- }
39-
40- if !willContinue {
41- for c := range s.availableCaps {
42- if _, ok := SupportedCapabilities[c]; !ok {
43- continue
44- }
45- s.out <- NewMessage("CAP", "REQ", c)
46- }
47-
48- _, ok := s.availableCaps["sasl"]
49- if s.auth == nil || !ok {
50- s.endRegistration()
51- }
52- }
53- default:
54- return s.handleRegistered(msg)
55- }
56 case errNicknameinuse:
57 var nick string
58 if err := msg.ParseParams(nil, &nick); err != nil {
59@@ -992,11 +954,10 @@ func (s *Session) handleRegistered(msg Message) (Event, error) {
60 }
61
62 if t, ok := msg.Tags["+typing"]; ok {
63- if t == "active" {
64+ switch t {
65+ case "active":
66 s.typings.Active(targetCf, nickCf)
67- } else if t == "paused" {
68- s.typings.Done(targetCf, nickCf)
69- } else if t == "done" {
70+ case "paused", "done":
71 s.typings.Done(targetCf, nickCf)
72 }
73 }