2

我正在构建一个 IRC 客户端,目前正在尝试添加 SASL 支持。我让它工作得很好(身份验证工作),但是,有一个烦人的“故障”:

据我了解,SASL 请求必须在注册之前完成,如下所示:

if (sasl) {
    send("CAP REQ :sasl");
}
send("NICK: " + nick);
send("USER ....");

现在烦人的小事是 SASL 请求导致 IRC 服务器发回 ERR_NOTREGISTERED (451) 回复。现在,如果启用了 SASL,我当然可以忽略第一个 451 回复,但这似乎有点讨厌。我在这里错过了什么吗?

4

1 回答 1

1

好吧,IRC 上的 SASL 是基于Client CAPability Negotiation的。

根据此规范,您CAP LS在开始时发送 a ,在此之后发送USERand NICK。如果您CAP在 motd/motd 丢失结束之前收到响应,则服务器支持 CAP。检查 SASL 是否在支持的扩展列表中,并请求它。如果你先得到 motd/motd 的结尾,服务器不支持 CAP,因此不支持 SASL。

于 2013-08-21T14:02:50.503 回答