add changes for cadet bug fix
authorxrs <xrs@mail36.net>
Fri, 3 Jan 2020 16:22:11 +0000 (17:22 +0100)
committerxrs <xrs@mail36.net>
Fri, 3 Jan 2020 16:22:11 +0000 (17:22 +0100)
src/cadet/cadet_protocol.h
src/cadet/gnunet-service-cadet_connection.c
src/cadet/gnunet-service-cadet_core.c
src/cadet/gnunet-service-cadet_tunnels.c

index 762babb8ae53d23824ad910f1dd81a50441b8b29..30c87b4eae1bd59b63034cf63bf6d65f0b6a03ab 100644 (file)
@@ -84,6 +84,11 @@ struct GNUNET_CADET_ConnectionCreateMessage
    */
   uint32_t options GNUNET_PACKED;
 
+  /**
+   * Infomation of known tunnel state to keep two peers synced. (xrs,t3ss)
+   */
+  int tunnel_up;
+
   /**
    * ID of the connection
    */
index 0e6423e1020fb9350ae8bf886805e82bee912d93..4d9a40927b0e3a12ec0a6d666482999d180ff7bd 100644 (file)
@@ -620,6 +620,11 @@ send_create (void *cls)
   //TODO This will be removed in a major release, because this will be a protocol breaking change. We set the deprecated 'reliable' bit here that was removed.
   create_msg->options = 2;
   create_msg->cid = cc->cid;
+
+  // check for tunnel state and define tunnel_up (xrs,t3ss)
+  t = GCP_get_tunnel (cc->destination, GNUNET_YES);
+  create_msg->tunnel_up = (t->estate == CADET_TUNNEL_KEY_UNINITIALIZED)? GNUNET_NO : GNUNET_YES;
+
   pids = (struct GNUNET_PeerIdentity *) &create_msg[1];
   pids[0] = my_full_id;
   for (unsigned int i = 0; i <= cc->off; i++)
index ec70a968b3d8d3bf09b8297bff4418b866ecfd8a..c90c97fcafaf4a3ebea0e547df1d96a2eb13e39a 100644 (file)
@@ -727,6 +727,7 @@ handle_connection_create (
   uint16_t size = ntohs (msg->header.size) - sizeof (*msg);
   unsigned int path_length;
   unsigned int off;
+  struct CadetTunnel *t;
 
   path_length = size / sizeof (struct GNUNET_PeerIdentity);
   if (0 == path_length)
@@ -825,8 +826,17 @@ handle_connection_create (
          GCP_2s (origin),
          GNUNET_sh2s (&msg->cid.connection_of_tunnel));
     path = GCPP_get_path_from_route (path_length - 1, pids);
+    t = GCP_get_tunnel (orgin, GNUNET_YES);
+
+    // Check for CADET state in case the other side has lost the tunnel (xrs,t3ss)
+    if ((GNUNET_NO == msg->tunnel_up) &&
+        (CADET_TUNNEL_KEY_OK == t->estate))
+    {
+      t->estate = CADET_TUNNEL_KEY_UNINITIALIZED;
+    }
+
     if (GNUNET_OK !=
-        GCT_add_inbound_connection (GCP_get_tunnel (origin, GNUNET_YES),
+        GCT_add_inbound_connection (t,
                                     &msg->cid,
                                     path))
     {
index 4ecdefc65fd2c9aa43f8ad3e97b7bebba376887f..8999b26da31dc99779f2af19d761dbc4868baece 100644 (file)
@@ -454,7 +454,6 @@ struct CadetTunnel
    * Force triggering KX_AUTH independent of @e estate.
    */
   int kx_auth_requested;
-
 };