does not terminate on invalid uri
[oweals/gnunet.git] / src / mesh / mesh_api.c
index 7564a7ec58a595216c30d666c58f41f652601d3c..be2ec277dd456f073fa235c77c6eda1f2f9a455d 100644 (file)
@@ -1719,8 +1719,12 @@ GNUNET_MESH_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, void *cls,
   h->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
 
   /* count handlers and apps, calculate size */
-  for (h->n_applications = 0; stypes[h->n_applications]; h->n_applications++) ;
-  for (h->n_handlers = 0; handlers[h->n_handlers].type; h->n_handlers++) ;
+  for (h->n_applications = 0;
+       stypes && stypes[h->n_applications];
+       h->n_applications++) ;
+  for (h->n_handlers = 0;
+       handlers && handlers[h->n_handlers].type;
+       h->n_handlers++) ;
   send_connect (h);
   LOG (GNUNET_ERROR_TYPE_DEBUG, "GNUNET_MESH_connect() END\n");
   return h;
@@ -1843,7 +1847,7 @@ GNUNET_MESH_announce_regex (struct GNUNET_MESH_Handle *h,
   offset = 0;
   do
   {
-    msgsize = (len > offset + payload) ? payload : len;
+    msgsize = (len - offset > payload) ? payload : len - offset;
     memcpy (&msg[1], &regex[offset], msgsize);
     offset += msgsize;
     msgsize += sizeof(struct GNUNET_MESH_RegexAnnounce);
@@ -2003,11 +2007,18 @@ GNUNET_MESH_tunnel_buffer (struct GNUNET_MESH_Tunnel *tunnel, int buffer)
   send_packet (h, &msg.header, NULL);
 }
 
+
 /**
  * Request that a peer should be added to the tunnel.  The existing
  * connect handler will be called ONCE with either success or failure.
  * This function should NOT be called again with the same peer before the
  * connect handler is called.
+ * FIXME: I think the above documentation is false. I think it should
+ * read: "The connect handler will be called once the peer was actually
+ * successfully added to the multicast group. This function should
+ * not be called twice for the same peer (unless, of course,
+ * the peer was removed using GNUNET_MESH_peer_Request_connect_del in
+ * the meantime).
  *
  * @param tunnel handle to existing tunnel
  * @param peer peer to add
@@ -2039,8 +2050,6 @@ GNUNET_MESH_peer_request_connect_add (struct GNUNET_MESH_Tunnel *tunnel,
   msg.tunnel_id = htonl (tunnel->tid);
   msg.peer = *peer;
   send_packet (tunnel->mesh, &msg.header, tunnel);
-
-  return;
 }