degesch: factor out irc_try_finish_cap_negotiation()
Too much repeated, non-obvious code.
This commit is contained in:
parent
5a0b2d1c57
commit
ddffc71abe
19
degesch.c
19
degesch.c
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user