changeset 1747:c4f67e2e675f

Randomize reconnection delay Conforming to rfc3920bis, 4.5: "The time that expires before an entity first seeks to reconnect MUST be randomized" (We should still increase the delay if the reconnection keeps failing.)
author Mikael Berthe <mikael@lilotux.net>
date Thu, 11 Mar 2010 22:27:36 +0100
parents b7574de9ae4b
children 51a23403cc80
files mcabber/mcabber/xmpp.c
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabber/xmpp.c	Thu Mar 11 21:53:46 2010 +0100
+++ b/mcabber/mcabber/xmpp.c	Thu Mar 11 22:27:36 2010 +0100
@@ -882,7 +882,8 @@
 {
   xmpp_disconnect();
   if (AutoConnection)
-    g_timeout_add_seconds(RECONNECTION_TIMEOUT, xmpp_reconnect, NULL);
+    g_timeout_add_seconds(RECONNECTION_TIMEOUT + (random() % 90L),
+                          xmpp_reconnect, NULL);
 }
 
 static void connection_open_cb(LmConnection *connection, gboolean success,
@@ -1707,12 +1708,14 @@
   if (!resource)
     resource = resource_prefix;
 
+  // Initialize pseudo-random seed
+  srandom(time(NULL));
+
   if (!settings_opt_get("disable_random_resource")) {
 #if HAVE_ARC4RANDOM
     dynresource = g_strdup_printf("%s.%08x", resource, arc4random());
 #else
     unsigned int tab[2];
-    srandom(time(NULL));
     tab[0] = (unsigned int) (0xffff * (random() / (RAND_MAX + 1.0)));
     tab[1] = (unsigned int) (0xffff * (random() / (RAND_MAX + 1.0)));
     dynresource = g_strdup_printf("%s.%04x%04x", resource, tab[0], tab[1]);