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;
|
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
|
static void
|
||||||
irc_handle_cap (struct server *s, const struct irc_message *msg)
|
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)
|
if (s->cap_sasl && s->transport == &g_transport_tls)
|
||||||
irc_send (s, "AUTHENTICATE EXTERNAL");
|
irc_send (s, "AUTHENTICATE EXTERNAL");
|
||||||
else if (s->state == IRC_CONNECTED)
|
else
|
||||||
irc_send (s, "CAP END");
|
irc_try_finish_cap_negotiation (s);
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_ascii (subcommand, "NAK"))
|
else if (!strcasecmp_ascii (subcommand, "NAK"))
|
||||||
{
|
{
|
||||||
log_server_error (s, s->buffer,
|
log_server_error (s, s->buffer,
|
||||||
"#s: #S", "Capabilities not acknowledged", args);
|
"#s: #S", "Capabilities not acknowledged", args);
|
||||||
if (s->state == IRC_CONNECTED)
|
irc_try_finish_cap_negotiation (s);
|
||||||
irc_send (s, "CAP END");
|
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_ascii (subcommand, "DEL"))
|
else if (!strcasecmp_ascii (subcommand, "DEL"))
|
||||||
{
|
{
|
||||||
@ -8002,8 +8010,7 @@ irc_process_numeric (struct server *s,
|
|||||||
case IRC_ERR_SASLTOOLONG:
|
case IRC_ERR_SASLTOOLONG:
|
||||||
case IRC_ERR_SASLABORTED:
|
case IRC_ERR_SASLABORTED:
|
||||||
case IRC_ERR_SASLALREADY:
|
case IRC_ERR_SASLALREADY:
|
||||||
if (s->state == IRC_CONNECTED)
|
irc_try_finish_cap_negotiation (s);
|
||||||
irc_send (s, "CAP END");
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IRC_RPL_LIST:
|
case IRC_RPL_LIST:
|
||||||
|
Loading…
Reference in New Issue
Block a user