degesch: support CAP DEL, request cap-notify
It doesn't require much effort to cancel capabilities, plus with the newer version we get the respective notification anyway.
This commit is contained in:
parent
61f15ead8a
commit
bb451a5050
2
NEWS
2
NEWS
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
* degesch: added a /squery command for IRCnet
|
* degesch: added a /squery command for IRCnet
|
||||||
|
|
||||||
* degesch: now supporting IRCv3.2 capability negotiation
|
* degesch: now supporting IRCv3.2 capability negotiation, including CAP DEL
|
||||||
|
|
||||||
|
|
||||||
1.1.0 (2020-10-31) "What Do You Mean By 'This Isn't Germany'?"
|
1.1.0 (2020-10-31) "What Do You Mean By 'This Isn't Germany'?"
|
||||||
|
|
23
degesch.c
23
degesch.c
|
@ -2340,7 +2340,7 @@ static struct config_schema g_config_server[] =
|
||||||
.type = CONFIG_ITEM_STRING_ARRAY,
|
.type = CONFIG_ITEM_STRING_ARRAY,
|
||||||
.validate = config_validate_nonjunk_string,
|
.validate = config_validate_nonjunk_string,
|
||||||
.default_ = "\"multi-prefix,invite-notify,server-time,echo-message,"
|
.default_ = "\"multi-prefix,invite-notify,server-time,echo-message,"
|
||||||
"message-tags,away-notify\"" },
|
"message-tags,away-notify,cap-notify\"" },
|
||||||
|
|
||||||
{ .name = "tls",
|
{ .name = "tls",
|
||||||
.comment = "Whether to use TLS",
|
.comment = "Whether to use TLS",
|
||||||
|
@ -6576,6 +6576,15 @@ irc_process_cap_ls (struct server *s)
|
||||||
free (chosen_str);
|
free (chosen_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
irc_toggle_cap (struct server *s, const char *cap, bool active)
|
||||||
|
{
|
||||||
|
if (!strcasecmp_ascii (cap, "echo-message"))
|
||||||
|
s->cap_echo_message = active;
|
||||||
|
if (!strcasecmp_ascii (cap, "away-notify"))
|
||||||
|
s->cap_away_notify = active;
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
@ -6601,10 +6610,7 @@ irc_handle_cap (struct server *s, const struct irc_message *msg)
|
||||||
active = false;
|
active = false;
|
||||||
cap++;
|
cap++;
|
||||||
}
|
}
|
||||||
if (!strcasecmp_ascii (cap, "echo-message"))
|
irc_toggle_cap (s, cap, active);
|
||||||
s->cap_echo_message = active;
|
|
||||||
if (!strcasecmp_ascii (cap, "away-notify"))
|
|
||||||
s->cap_away_notify = active;
|
|
||||||
}
|
}
|
||||||
irc_send (s, "CAP END");
|
irc_send (s, "CAP END");
|
||||||
}
|
}
|
||||||
|
@ -6614,6 +6620,13 @@ irc_handle_cap (struct server *s, const struct irc_message *msg)
|
||||||
"#s: #S", "Capabilities not acknowledged", args);
|
"#s: #S", "Capabilities not acknowledged", args);
|
||||||
irc_send (s, "CAP END");
|
irc_send (s, "CAP END");
|
||||||
}
|
}
|
||||||
|
else if (!strcasecmp_ascii (subcommand, "DEL"))
|
||||||
|
{
|
||||||
|
log_server_error (s, s->buffer,
|
||||||
|
"#s: #S", "Capabilities deleted", args);
|
||||||
|
for (size_t i = 0; i < v.len; i++)
|
||||||
|
irc_toggle_cap (s, v.vector[i], false);
|
||||||
|
}
|
||||||
else if (!strcasecmp_ascii (subcommand, "LS"))
|
else if (!strcasecmp_ascii (subcommand, "LS"))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue