summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-02-19 04:50:58 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-02-19 04:50:58 +0000
commita191df786d0412e5de7f40be580e090596a3fe72 (patch)
tree8e18d54579f33705e033eeb1aba2de68e21d80ff
parent455020478310df80cc1cb4041cbacf399b8af8cc (diff)
downloadirssi-a191df786d0412e5de7f40be580e090596a3fe72.zip
/RECONNECT ALL - reconnects to all servers in reconnection queue
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1253 dbcabf3a-b0e7-0310-adc4-f8d773084564
-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)