gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r15617 - gnunet/src/mesh


From: gnunet
Subject: [GNUnet-SVN] r15617 - gnunet/src/mesh
Date: Wed, 15 Jun 2011 09:15:44 +0200

Author: toelke
Date: 2011-06-15 09:15:44 +0200 (Wed, 15 Jun 2011)
New Revision: 15617

Modified:
   gnunet/src/mesh/mesh_api.c
Log:
allow more than one mesh-hello-packet to persist

Modified: gnunet/src/mesh/mesh_api.c
===================================================================
--- gnunet/src/mesh/mesh_api.c  2011-06-15 07:15:43 UTC (rev 15616)
+++ gnunet/src/mesh/mesh_api.c  2011-06-15 07:15:44 UTC (rev 15617)
@@ -88,16 +88,19 @@
   struct tunnel_list_element *head, *tail;
 };
 
+struct type_list_element
+{
+  GNUNET_MESH_ApplicationType type;
+  struct type_list_element *next, *prev;
+};
+
 struct peer_list_element
 {
   struct GNUNET_PeerIdentity peer;
 
-  /* how many Message-Types can this peer receive */
-  unsigned int num_types;
+  /* list of application-types */
+  struct type_list_element *type_head, *type_tail;
 
-  /* array of message-types */
-  GNUNET_MESH_ApplicationType *types;
-
   struct GNUNET_TRANSPORT_ATS_Information atsi;
   struct peer_list_element *next, *prev;
 };
@@ -280,7 +283,12 @@
     {
       GNUNET_CONTAINER_DLL_remove (handle->connected_peers.head,
                                   handle->connected_peers.tail, element);
-      GNUNET_free_non_null(element->types);
+      while (element->type_head != NULL)
+        {
+          struct type_list_element* tail = element->type_tail;
+          GNUNET_CONTAINER_DLL_remove(element->type_head, element->type_tail, 
tail);
+          GNUNET_free(tail);
+        }
       GNUNET_free (element);
     }
 
@@ -341,12 +349,12 @@
       element = element->next;
     }
 
-  /* TODO: add, not replace! */
-  element->num_types = *num;
-  element->types = GNUNET_malloc (*num * sizeof (GNUNET_MESH_ApplicationType));
-
   for (i = 0; i < *num; i++)
-    element->types[i] = (GNUNET_MESH_ApplicationType)ntohs (ports[i]);
+    {
+      struct type_list_element* new_type = GNUNET_malloc(sizeof *new_type);
+      new_type->type = (GNUNET_MESH_ApplicationType)ntohs (ports[i]);
+      GNUNET_CONTAINER_DLL_insert(element->type_head, element->type_tail, 
new_type);
+    }
 
   struct tunnel_list_element *tunnel = handle->pending_by_type_tunnels.head;
   while (tunnel != NULL)
@@ -472,9 +480,9 @@
   struct peer_list_element *element = handle->connected_peers.head;
   while (element != NULL)
     {
-      unsigned int i;
-      for (i = 0; i < element->num_types; i++)
-        if (application_type == element->types[i])
+      struct type_list_element* i;
+      for (i = element->type_head; i != NULL; i = i->next)
+        if (application_type == i->type)
           return GNUNET_MESH_peer_request_connect_all (handle, timeout, 1,
                                                        &handle->myself,
                                                        connect_handler,
@@ -747,7 +755,12 @@
   while (element != NULL)
     {
       struct peer_list_element *next = element->next;
-      GNUNET_free_non_null(element->types);
+      while (element->type_head != NULL)
+        {
+          struct type_list_element* tail = element->type_tail;
+          GNUNET_CONTAINER_DLL_remove(element->type_head, element->type_tail, 
tail);
+          GNUNET_free(tail);
+        }
       GNUNET_free (element);
       element = next;
     }




reply via email to

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