Mercurial > irccd
changeset 1043:0e48e22a7493
irccd: re-implement server-reconnect
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 17 Jun 2021 13:57:37 +0200 |
parents | 76fecad14b00 |
children | a4afc89f6ea8 |
files | irccd/peer.c irccdctl/irccdctl.c lib/irccd/server.c lib/irccd/server.h |
diffstat | 4 files changed, 46 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/irccd/peer.c Thu Jun 17 13:36:30 2021 +0200 +++ b/irccd/peer.c Thu Jun 17 13:57:37 2021 +0200 @@ -900,6 +900,27 @@ } /* + * SERVER-RECONNECT [server] + */ +static int +cmd_server_reconnect(struct peer *p, char *line) +{ + const char *args; + struct irc_server *s; + + if (parse(line, &args, 1) == 1) { + if (!(s = require_server(p, args))) + return 0; + + irc_server_reconnect(s); + } else + LIST_FOREACH(s, &irc.servers, link) + irc_server_reconnect(s); + + return ok(p); +} + +/* * SERVER-TOPIC server channel topic */ static int @@ -960,6 +981,7 @@ { "SERVER-MODE", cmd_server_mode }, { "SERVER-NOTICE", cmd_server_notice }, { "SERVER-PART", cmd_server_part }, + { "SERVER-RECONNECT", cmd_server_reconnect }, { "SERVER-TOPIC", cmd_server_topic }, { "WATCH", cmd_watch } };
--- a/irccdctl/irccdctl.c Thu Jun 17 13:36:30 2021 +0200 +++ b/irccdctl/irccdctl.c Thu Jun 17 13:57:37 2021 +0200 @@ -819,6 +819,17 @@ } static void +cmd_server_reconnect(int argc, char **argv) +{ + if (argc == 1) + req("SERVER-RECONNECT %s", argv[0]); + else + req("SERVER-RECONNECT"); + + ok(); +} + +static void cmd_server_topic(int argc, char **argv) { (void)argc; @@ -882,6 +893,7 @@ { "server-nick", 2, 2, cmd_server_nick }, { "server-notice", 3, 3, cmd_server_notice }, { "server-part", 3, 3, cmd_server_part }, + { "server-reconnect", 0, 1, cmd_server_reconnect }, { "server-topic", 3, 3, cmd_server_topic }, { "watch", 0, 0, cmd_watch } };
--- a/lib/irccd/server.c Thu Jun 17 13:36:30 2021 +0200 +++ b/lib/irccd/server.c Thu Jun 17 13:57:37 2021 +0200 @@ -771,6 +771,15 @@ } void +irc_server_reconnect(struct irc_server *s) +{ + assert(s); + + irc_server_disconnect(s); + irc_server_connect(s); +} + +void irc_server_prepare(const struct irc_server *s, struct pollfd *pfd) { assert(s);
--- a/lib/irccd/server.h Thu Jun 17 13:36:30 2021 +0200 +++ b/lib/irccd/server.h Thu Jun 17 13:57:37 2021 +0200 @@ -115,6 +115,9 @@ irc_server_disconnect(struct irc_server *); void +irc_server_reconnect(struct irc_server *); + +void irc_server_prepare(const struct irc_server *, struct pollfd *); void