Changeset 463 in code
- Timestamp:
- Mar 15, 2021, 10:41:37 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r461 r463 80 80 "extended-join": "", 81 81 "multi-prefix": "", 82 } 83 84 // passthroughIsupport is the set of ISUPPORT tokens that are directly passed 85 // through from the upstream server to downstream clients. 86 // 87 // This is only effective in single-upstream mode. 88 var passthroughIsupport = map[string]bool{ 89 "AWAYLEN": true, 90 "CHANLIMIT": true, 91 "CHANMODES": true, 92 "CHANNELLEN": true, 93 "CHANTYPES": true, 94 "EXCEPTS": true, 95 "EXTBAN": true, 96 "HOSTLEN": true, 97 "INVEX": true, 98 "KICKLEN": true, 99 "MAXLIST": true, 100 "MAXTARGETS": true, 101 "MODES": true, 102 "NETWORK": true, 103 "NICKLEN": true, 104 "PREFIX": true, 105 "SAFELIST": true, 106 "TARGMAX": true, 107 "TOPICLEN": true, 108 "USERLEN": true, 82 109 } 83 110 … … 881 908 } 882 909 883 if uc := dc.upstream(); uc != nil && uc.isupport["NETWORK"] != nil { 884 isupport = append(isupport, fmt.Sprintf("NETWORK=%v", *uc.isupport["NETWORK"])) 910 if uc := dc.upstream(); uc != nil { 911 for k := range passthroughIsupport { 912 v, ok := uc.isupport[k] 913 if !ok { 914 continue 915 } 916 if v != nil { 917 isupport = append(isupport, fmt.Sprintf("%v=%v", k, *v)) 918 } else { 919 isupport = append(isupport, k) 920 } 921 } 885 922 } 886 923 … … 905 942 Params: []string{dc.nick, dc.srv.Hostname, "soju", "aiwroO", "OovaimnqpsrtklbeI"}, 906 943 }) 907 // TODO: other RPL_ISUPPORT tokens 908 dc.SendMessage(&irc.Message{ 909 Prefix: dc.srv.prefix(), 910 Command: irc.RPL_ISUPPORT, 911 Params: append(append([]string{dc.nick}, isupport...), "are supported"), 912 }) 944 for _, msg := range generateIsupport(dc.srv.prefix(), dc.nick, isupport) { 945 dc.SendMessage(msg) 946 } 913 947 dc.SendMessage(&irc.Message{ 914 948 Prefix: dc.srv.prefix(), -
trunk/irc.go
r392 r463 18 18 ) 19 19 20 const maxMessageLength = 512 20 const ( 21 maxMessageLength = 512 22 maxMessageParams = 15 23 ) 21 24 22 25 // The server-time layout, as defined in the IRCv3 spec. … … 349 352 } 350 353 354 func generateIsupport(prefix *irc.Prefix, nick string, tokens []string) []*irc.Message { 355 maxTokens := maxMessageParams - 2 // 2 reserved params: nick + text 356 357 var msgs []*irc.Message 358 for len(tokens) > 0 { 359 var msgTokens []string 360 if len(tokens) > maxTokens { 361 msgTokens = tokens[:maxTokens] 362 tokens = tokens[maxTokens:] 363 } else { 364 msgTokens = tokens 365 tokens = nil 366 } 367 368 msgs = append(msgs, &irc.Message{ 369 Prefix: prefix, 370 Command: irc.RPL_ISUPPORT, 371 Params: append(append([]string{nick}, msgTokens...), "are supported"), 372 }) 373 } 374 375 return msgs 376 } 377 351 378 type joinSorter struct { 352 379 channels []string -
trunk/upstream.go
r462 r463 614 614 return err 615 615 } 616 617 var downstreamIsupport []string 616 618 for _, token := range msg.Params[1 : len(msg.Params)-1] { 617 619 parameter := token … … 659 661 return err 660 662 } 661 } 663 664 if passthroughIsupport[parameter] { 665 downstreamIsupport = append(downstreamIsupport, token) 666 } 667 } 668 669 uc.forEachDownstream(func(dc *downstreamConn) { 670 if dc.network == nil { 671 return 672 } 673 msgs := generateIsupport(dc.srv.prefix(), dc.nick, downstreamIsupport) 674 for _, msg := range msgs { 675 dc.SendMessage(msg) 676 } 677 }) 662 678 case "BATCH": 663 679 var tag string
Note:
See TracChangeset
for help on using the changeset viewer.