gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r19820 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r19820 - gnunet/src/transport
Date: Thu, 16 Feb 2012 15:29:25 +0100

Author: wachs
Date: 2012-02-16 15:29:25 +0100 (Thu, 16 Feb 2012)
New Revision: 19820

Modified:
   gnunet/src/transport/gnunet-service-transport_neighbours.c
Log:
fix for fast reconnect: send ack after fast reconnect even when we are already 
connected since other peer waits for it


Modified: gnunet/src/transport/gnunet-service-transport_neighbours.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_neighbours.c  2012-02-16 
14:28:37 UTC (rev 19819)
+++ gnunet/src/transport/gnunet-service-transport_neighbours.c  2012-02-16 
14:29:25 UTC (rev 19820)
@@ -1229,7 +1229,7 @@
 #if DEBUG_TRANSPORT
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Failed to switch connected peer `%s' to address '%s' session 
%X, asking ATS for new address \n",
-                GNUNET_i2s (&n->id), GST_plugins_a2s (n->address), n->session);
+                GNUNET_i2s (&n->id), GST_plugins_a2s (cc->address), 
cc->session);
 #endif
     GNUNET_assert (strlen (cc->address->transport_name) > 0);
     GNUNET_ATS_address_destroyed (GST_ats, cc->address, cc->session);
@@ -2343,11 +2343,9 @@
   size_t msg_len;
   size_t ret;
 
-#if DEBUG_TRANSPORT
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Received CONNECT_ACK message from peer `%s'\n",
               GNUNET_i2s (peer));
-#endif
 
   if (ntohs (message->size) != sizeof (struct SessionConnectMessage))
   {
@@ -2374,6 +2372,31 @@
    * We also received an CONNECT message, switched from SENDT to RECV and
    * ATS already suggested us an address after a successful blacklist check
    */
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Received CONNECT_ACK message from peer `%s' in state `%s'\n",
+              GNUNET_i2s (peer),
+              print_state(n->state));
+
+  if ((n->address != NULL) && (n->state == S_CONNECTED))
+  {
+    /* After fast reconnect: send ACK (ACK) even when we are connected */
+    msg_len = sizeof (msg);
+    msg.size = htons (msg_len);
+    msg.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_ACK);
+
+    ret = send_with_session(n,
+              (const char *) &msg, msg_len,
+              UINT32_MAX, GNUNET_TIME_UNIT_FOREVER_REL,
+              NULL, NULL);
+
+    if (ret == GNUNET_SYSERR)
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "Failed to send SESSION_ACK to `%4s' using address '%s' 
session %X\n",
+                  GNUNET_i2s (&n->id), GST_plugins_a2s (n->address), 
n->session);
+    return;
+  }
+
   if ((n->state != S_CONNECT_SENT) &&
       ((n->state != S_CONNECT_RECV) && (n->address != NULL)))
   {
@@ -2383,9 +2406,9 @@
                               GNUNET_NO);
     return;
   }
+  if (n->state != S_CONNECTED)
+    change_state (n, S_CONNECTED);
 
-  change_state (n, S_CONNECTED);
-
   if (NULL != session)
   {
     GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]