diff --git a/NEWS b/NEWS index 60e07d3..e0c52d3 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,8 @@ * degesch: backlog limit was made configurable + * degesch: allow changing the list IRC capabilities to use + * degesch: optimize buffer memory usage * kike: add support for IRCv3.2 server-time diff --git a/degesch.c b/degesch.c index 93d9316..0a1cb6e 100644 --- a/degesch.c +++ b/degesch.c @@ -1802,6 +1802,12 @@ static struct config_schema g_config_server[] = .comment = "Password to connect to the server, if any", .type = CONFIG_ITEM_STRING, .validate = config_validate_nonjunk_string }, + // XXX: if we add support for new capabilities, the value stays unchanged + { .name = "capabilities", + .comment = "Capabilities to use if supported by server", + .type = CONFIG_ITEM_STRING_ARRAY, + .validate = config_validate_nonjunk_string, + .default_ = "\"multi-prefix,invite-notify,server-time,echo-message\"" }, { .name = "tls", .comment = "Whether to use TLS", @@ -5470,22 +5476,25 @@ irc_handle_cap (struct server *s, const struct irc_message *msg) log_server_status (s, s->buffer, "#s: #S", "Capabilities supported", args); - struct str_vector chosen; - str_vector_init (&chosen); + struct str_vector chosen; str_vector_init (&chosen); + struct str_vector use; str_vector_init (&use); + + cstr_split_ignore_empty + (get_config_string (s->config, "capabilities"), ',', &use); // Filter server capabilities for ones we can make use of for (size_t i = 0; i < v.len; i++) { const char *cap = v.vector[i]; - if (!strcasecmp_ascii (cap, "multi-prefix") - || !strcasecmp_ascii (cap, "invite-notify") - || !strcasecmp_ascii (cap, "server-time") - || !strcasecmp_ascii (cap, "echo-message")) - str_vector_add (&chosen, cap); + for (size_t k = 0; k < use.len; k++) + if (!strcasecmp_ascii (use.vector[k], cap)) + str_vector_add (&chosen, cap); } char *chosen_str = join_str_vector (&chosen, ' '); str_vector_free (&chosen); + str_vector_free (&use); + irc_send (s, "CAP REQ :%s", chosen_str); log_server_status (s, s->buffer, "#s: #S", "Capabilities requested", chosen_str); diff --git a/liberty b/liberty index f213a76..9bff16f 160000 --- a/liberty +++ b/liberty @@ -1 +1 @@ -Subproject commit f213a76ad494efe150a786b195a744e4b87c5ca9 +Subproject commit 9bff16f5ec777d3f4a9f7e8e8140907f3b404fa2