我正在构建一个IRC客户端,目前正在尝试添加SASL支持。我已经让它工作得很好(身份验证工作),但是,有一个恼人的“故障”:
据我所知,SASL请求必须在注册前完成,如下所示:
if (sasl) {
send("CAP REQ :sasl");
}
send("NICK: " + nick);
send("USER ....");
现在烦人的小事是SASL请求导致IRC服务器发回ERR_NOTREGISTERED(451)回复。现在,如果启用了SASL,我当然可以忽略第一个451回复,但这看起来有点令人讨厌。我在这里错过了什么吗?
答案 0 :(得分:1)
嗯,IRC上的SASL基于Client CAPability Negotiation。
根据此规范,您在开头发送CAP LS
,之后发送USER
和NICK
。如果您在motd / motd缺失之前收到CAP
响应,则服务器支持CAP。检查SASL是否在受支持的扩展列表中,并请求它。
如果你首先缺少motd / motd的结尾,服务器不支持CAP,因此不支持SASL。