- fix connection.c
[oweals/gnunet.git] / src / regex / regex_api.c
index fdfd05058153e3bbe01aea0ee5165adb7ae7467b..e18674d654c66db766b4b34c690588ad8984b54d 100644 (file)
@@ -18,7 +18,7 @@
      Boston, MA 02111-1307, USA.
 */
 /**
- * @file include/gnunet_regex_service.h
+ * @file regex/regex_api.c
  * @brief access regex service to advertise capabilities via regex and discover
  *        respective peers using matching strings
  * @author Maximilian Szengel
@@ -40,11 +40,11 @@ struct GNUNET_REGEX_Announcement
    */
   struct GNUNET_CLIENT_Connection *client;
 
-  /** 
+  /**
    * Our configuration.
    */
   const struct GNUNET_CONFIGURATION_Handle *cfg;
-  
+
   /**
    * Message we're sending to the service.
    */
@@ -55,7 +55,7 @@ struct GNUNET_REGEX_Announcement
 /**
  * We got a response (!?) or disconnect after asking regex
  * to do the announcement.  Retry.
- * 
+ *
  * @param cls the 'struct GNUNET_REGEX_Announcement' to retry
  * @param msg NULL on disconnect
  */
@@ -65,7 +65,7 @@ handle_a_reconnect (void *cls,
 
 
 /**
- * Try sending the announcement request to regex.  On 
+ * Try sending the announcement request to regex.  On
  * errors (i.e. regex died), try again.
  *
  * @param a the announcement to retry
@@ -87,7 +87,7 @@ retry_announcement (struct GNUNET_REGEX_Announcement *a)
 /**
  * We got a response (!?) or disconnect after asking regex
  * to do the announcement.  Retry.
- * 
+ *
  * @param cls the 'struct GNUNET_REGEX_Announcement' to retry
  * @param msg NULL on disconnect
  */
@@ -107,9 +107,8 @@ handle_a_reconnect (void *cls,
  * Announce the given peer under the given regular expression.  Does
  * not free resources, must call GNUNET_REGEX_announce_cancel for
  * that.
- * 
+ *
  * @param cfg configuration to use
- * @param id ID to announce as provider of regex. Own ID in most cases.
  * @param regex Regular expression to announce.
  * @param refresh_delay after what delay should the announcement be repeated?
  * @param compression How many characters per edge can we squeeze?
@@ -135,7 +134,10 @@ GNUNET_REGEX_announce (const struct GNUNET_CONFIGURATION_Handle *cfg,
   a->cfg = cfg;
   a->client = GNUNET_CLIENT_connect ("regex", cfg);
   if (NULL == a->client)
+  {
+    GNUNET_free (a);
     return NULL;
+  }
   a->msg.header.type = htons (GNUNET_MESSAGE_TYPE_REGEX_ANNOUNCE);
   a->msg.header.size = htons (slen + sizeof (struct AnnounceMessage));
   a->msg.compression = htons (compression);
@@ -149,7 +151,7 @@ GNUNET_REGEX_announce (const struct GNUNET_CONFIGURATION_Handle *cfg,
 
 /**
  * Stop announcing the regex specified by the given handle.
- * 
+ *
  * @param a handle returned by a previous GNUNET_REGEX_announce call.
  */
 void
@@ -170,11 +172,11 @@ struct GNUNET_REGEX_Search
    */
   struct GNUNET_CLIENT_Connection *client;
 
-  /** 
+  /**
    * Our configuration.
    */
   const struct GNUNET_CONFIGURATION_Handle *cfg;
-  
+
   /**
    * Function to call with results.
    */
@@ -184,18 +186,18 @@ struct GNUNET_REGEX_Search
    * Closure for 'callback'.
    */
   void *callback_cls;
-  
+
   /**
    * Search message to transmit to the service.
    */
-  struct SearchMessage msg;
+  struct SearchMessage *msg;
 };
 
 
 /**
  * We got a response or disconnect after asking regex
  * to do the search.  Handle it.
- * 
+ *
  * @param cls the 'struct GNUNET_REGEX_Search' to retry
  * @param msg NULL on disconnect
  */
@@ -205,7 +207,7 @@ handle_search_response (void *cls,
 
 
 /**
- * Try sending the search request to regex.  On 
+ * Try sending the search request to regex.  On
  * errors (i.e. regex died), try again.
  *
  * @param s the search to retry
@@ -216,7 +218,7 @@ retry_search (struct GNUNET_REGEX_Search *s)
   GNUNET_assert (NULL != s->client);
   GNUNET_assert (GNUNET_OK ==
                 GNUNET_CLIENT_transmit_and_get_response (s->client,
-                                                         &s->msg.header,
+                                                         &s->msg->header,
                                                          GNUNET_TIME_UNIT_FOREVER_REL,
                                                          GNUNET_YES,
                                                          &handle_search_response,
@@ -227,7 +229,7 @@ retry_search (struct GNUNET_REGEX_Search *s)
 /**
  * We got a response or disconnect after asking regex
  * to do the search.  Handle it.
- * 
+ *
  * @param cls the 'struct GNUNET_REGEX_Search' to retry
  * @param msg NULL on disconnect, otherwise presumably a response
  */
@@ -255,7 +257,7 @@ handle_search_response (void *cls,
     result = (const struct ResultMessage *) msg;
     gpl = ntohs (result->get_path_length);
     ppl = ntohs (result->put_path_length);
-    if (size == (sizeof (struct ResultMessage) + 
+    if (size == (sizeof (struct ResultMessage) +
                 (gpl + ppl) * sizeof (struct GNUNET_PeerIdentity)))
     {
       const struct GNUNET_PeerIdentity *pid;
@@ -267,7 +269,7 @@ handle_search_response (void *cls,
       s->callback (s->callback_cls,
                   pid,
                   &pid[1], gpl,
-                  &pid[1 + gpl], ppl);            
+                  &pid[1 + gpl], ppl);         
       return;
     }
   }
@@ -300,16 +302,20 @@ GNUNET_REGEX_search (const struct GNUNET_CONFIGURATION_Handle *cfg,
   size_t slen;
 
   slen = strlen (string) + 1;
-  s = GNUNET_malloc (sizeof (struct GNUNET_REGEX_Announcement) + slen);
+  s = GNUNET_new (struct GNUNET_REGEX_Search);
   s->cfg = cfg;
   s->client = GNUNET_CLIENT_connect ("regex", cfg);
   if (NULL == s->client)
+  {
+    GNUNET_free (s);
     return NULL;
+  }
   s->callback = callback;
   s->callback_cls = callback_cls;
-  s->msg.header.type = htons (GNUNET_MESSAGE_TYPE_REGEX_SEARCH);
-  s->msg.header.size = htons (sizeof (struct SearchMessage) + slen);
-  memcpy (&s[1], string, slen);
+  s->msg = GNUNET_malloc (sizeof (struct SearchMessage) + slen);
+  s->msg->header.type = htons (GNUNET_MESSAGE_TYPE_REGEX_SEARCH);
+  s->msg->header.size = htons (sizeof (struct SearchMessage) + slen);
+  memcpy (&s->msg[1], string, slen);
   retry_search (s);
   return s;
 }
@@ -317,13 +323,14 @@ GNUNET_REGEX_search (const struct GNUNET_CONFIGURATION_Handle *cfg,
 
 /**
  * Stop search and free all data used by a GNUNET_REGEX_search call.
- * 
+ *
  * @param s Handle returned by a previous GNUNET_REGEX_search call.
  */
 void
 GNUNET_REGEX_search_cancel (struct GNUNET_REGEX_Search *s)
 {
   GNUNET_CLIENT_disconnect (s->client);
+  GNUNET_free (s->msg);
   GNUNET_free (s);
 }