3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-22 11:59:40 +01:00

correctly account for nickname in CAP LS arithmetic

The arithmetic was assuming that the nickname is * (which it is
pre-registration). However, we were sending the actual nickname
post-registration. It would be simpler to always send *, but it
appears that the nickname is actually required by the spec:

>Replies from the server must [sic] contain the client identifier name or
>asterisk if one is not yet available.
This commit is contained in:
Shivaram Lingamneni 2021-12-16 01:43:33 -05:00
parent c5746c5105
commit 76f7748c8a

View File

@ -527,9 +527,9 @@ func capHandler(server *Server, client *Client, msg ircmsg.Message, rb *Response
// 1. WeeChat 1.4 won't accept the CAP reply unless it contains the server.name source // 1. WeeChat 1.4 won't accept the CAP reply unless it contains the server.name source
// 2. old versions of Kiwi and The Lounge can't parse multiline CAP LS 302 (#661), // 2. old versions of Kiwi and The Lounge can't parse multiline CAP LS 302 (#661),
// so try as hard as possible to get the response to fit on one line. // so try as hard as possible to get the response to fit on one line.
// :server.name CAP * LS * :<tokens>\r\n // :server.name CAP nickname LS * :<tokens>\r\n
// 1 [ 7 ] [4 ] [2 ] // 1 [5 ] 1 [4 ] [2 ]
maxLen := (MaxLineLen - 2) - 1 - len(server.name) - 7 - len(subCommand) - 4 maxLen := (MaxLineLen - 2) - 1 - len(server.name) - 5 - len(details.nick) - 1 - len(subCommand) - 4
capLines := cset.Strings(version, values, maxLen) capLines := cset.Strings(version, values, maxLen)
for i, capStr := range capLines { for i, capStr := range capLines {
if version >= caps.Cap302 && i < len(capLines)-1 { if version >= caps.Cap302 && i < len(capLines)-1 {