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