degesch: factor out irc_try_finish_cap_negotiation()

Too much repeated, non-obvious code.
This commit is contained in:
Přemysl Eric Janouch 2021-05-28 04:25:38 +02:00
parent 5a0b2d1c57
commit ddffc71abe
Signed by: p
GPG Key ID: A0420B94F92B9493

View File

@ -6600,6 +6600,15 @@ irc_toggle_cap (struct server *s, const char *cap, bool active)
if (!strcasecmp_ascii (cap, "sasl")) s->cap_sasl = active;
}
static void
irc_try_finish_cap_negotiation (struct server *s)
{
// It does not make sense to do this post-registration, although it would
// not hurt either, as the server must ignore it in that case
if (s->state == IRC_CONNECTED)
irc_send (s, "CAP END");
}
static void
irc_handle_cap (struct server *s, const struct irc_message *msg)
{
@ -6629,15 +6638,14 @@ irc_handle_cap (struct server *s, const struct irc_message *msg)
}
if (s->cap_sasl && s->transport == &g_transport_tls)
irc_send (s, "AUTHENTICATE EXTERNAL");
else if (s->state == IRC_CONNECTED)
irc_send (s, "CAP END");
else
irc_try_finish_cap_negotiation (s);
}
else if (!strcasecmp_ascii (subcommand, "NAK"))
{
log_server_error (s, s->buffer,
"#s: #S", "Capabilities not acknowledged", args);
if (s->state == IRC_CONNECTED)
irc_send (s, "CAP END");
irc_try_finish_cap_negotiation (s);
}
else if (!strcasecmp_ascii (subcommand, "DEL"))
{
@ -8002,8 +8010,7 @@ irc_process_numeric (struct server *s,
case IRC_ERR_SASLTOOLONG:
case IRC_ERR_SASLABORTED:
case IRC_ERR_SASLALREADY:
if (s->state == IRC_CONNECTED)
irc_send (s, "CAP END");
irc_try_finish_cap_negotiation (s);
break;
case IRC_RPL_LIST: