summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/servers-reconnect.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/core/servers-reconnect.c b/src/core/servers-reconnect.c
index bb8b0b45..147f6436 100644
--- a/src/core/servers-reconnect.c
+++ b/src/core/servers-reconnect.c
@@ -293,6 +293,32 @@ static RECONNECT_REC *reconnect_find_tag(int tag)
return NULL;
}
+static void reconnect_all(void)
+{
+ GSList *list;
+ SERVER_CONNECT_REC *conn;
+ RECONNECT_REC *rec;
+
+ /* first move reconnects to another list so if server_connect()
+ fails and goes to reconnection list again, we won't get stuck
+ here forever */
+ list = NULL;
+ while (reconnects != NULL) {
+ rec = reconnects->data;
+
+ list = g_slist_append(list, rec->conn);
+ server_reconnect_destroy(rec, FALSE);
+ }
+
+
+ while (list != NULL) {
+ conn = list->data;
+
+ CHAT_PROTOCOL(conn)->server_connect(conn);
+ list = g_slist_remove(list, conn);
+ }
+}
+
/* SYNTAX: RECONNECT <tag> */
static void cmd_reconnect(const char *data, SERVER_REC *server)
{
@@ -315,6 +341,12 @@ static void cmd_reconnect(const char *data, SERVER_REC *server)
return;
}
+ if (g_strcasecmp(data, "all") == 0) {
+ /* reconnect all servers in reconnect queue */
+ reconnect_all();
+ return;
+ }
+
if (*data == '\0') {
/* reconnect to first server in reconnection list */
if (reconnects == NULL)