gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r11185 - in gnunet: . src/fs src/include


From: gnunet
Subject: [GNUnet-SVN] r11185 - in gnunet: . src/fs src/include
Date: Tue, 4 May 2010 17:48:39 +0200

Author: grothoff
Date: 2010-05-04 17:48:39 +0200 (Tue, 04 May 2010)
New Revision: 11185

Modified:
   gnunet/TODO
   gnunet/src/fs/fs.c
   gnunet/src/fs/fs.h
   gnunet/src/fs/fs_search.c
   gnunet/src/include/gnunet_fs_service.h
Log:
fixing mess with search update serialization and parenting

Modified: gnunet/TODO
===================================================================
--- gnunet/TODO 2010-05-04 15:12:21 UTC (rev 11184)
+++ gnunet/TODO 2010-05-04 15:48:39 UTC (rev 11185)
@@ -1,8 +1,5 @@
 0.9.0pre1:
 * FS: [CG]
-  - SKS update searches should be attached to individual search results, not 
to the 
-    entire SKS search (!)
-    => API change (event signalling) & serialization change (!)
   - persistence testing (publish, unindex, search, download):
     => need driver!
     => schedule suspending tasks DURING event handler => good coverage!

Modified: gnunet/src/fs/fs.c
===================================================================
--- gnunet/src/fs/fs.c  2010-05-04 15:12:21 UTC (rev 11184)
+++ gnunet/src/fs/fs.c  2010-05-04 15:48:39 UTC (rev 11185)
@@ -1706,14 +1706,14 @@
   uris = NULL;
   if (NULL == sr->serialization)
     sr->serialization = make_serialization_file_name_in_dir (sr->sc->h,
-                                                            (sr->sc->parent == 
NULL) 
+                                                            
(sr->sc->psearch_result == NULL) 
                                                             ? 
GNUNET_FS_SYNC_PATH_MASTER_SEARCH
                                                             : 
GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
                                                             
sr->sc->serialization);
   if (NULL == sr->serialization)
     return;
   wh = get_write_handle_in_dir (sr->sc->h, 
-                               (sr->sc->parent == NULL) 
+                               (sr->sc->psearch_result == NULL) 
                                ? GNUNET_FS_SYNC_PATH_MASTER_SEARCH
                                : GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
                                sr->sc->serialization,
@@ -1724,6 +1724,8 @@
        (GNUNET_OK !=
        GNUNET_BIO_write_string (wh, sr->download != NULL ? 
sr->download->serialization : NULL)) ||
        (GNUNET_OK !=
+       GNUNET_BIO_write_string (wh, sr->update_search != NULL ? 
sr->update_search->serialization : NULL)) ||
+       (GNUNET_OK !=
        GNUNET_BIO_write_meta_data (wh, sr->meta)) ||
        (GNUNET_OK !=
        GNUNET_BIO_write (wh, &sr->key, sizeof (GNUNET_HashCode))) ||
@@ -1749,7 +1751,7 @@
   if (wh != NULL)
     (void)  GNUNET_BIO_write_close (wh);
   remove_sync_file_in_dir (sr->sc->h,
-                          (sr->sc->parent == NULL) 
+                          (sr->sc->psearch_result == NULL) 
                           ? GNUNET_FS_SYNC_PATH_MASTER_SEARCH
                           : GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
                           sr->sc->serialization,
@@ -1771,13 +1773,13 @@
 GNUNET_FS_search_sync_ (struct GNUNET_FS_SearchContext *sc)
 {  
   struct GNUNET_BIO_WriteHandle *wh;
-  struct GNUNET_FS_SearchContext *scc;
   char *uris;
   char in_pause;
   const char *category;
-
   
-  category = (sc->parent == NULL) ? GNUNET_FS_SYNC_PATH_MASTER_SEARCH : 
GNUNET_FS_SYNC_PATH_CHILD_SEARCH;      
+  category = (sc->psearch_result == NULL) 
+    ? GNUNET_FS_SYNC_PATH_MASTER_SEARCH 
+    : GNUNET_FS_SYNC_PATH_CHILD_SEARCH;      
   if (NULL == sc->serialization)
     sc->serialization = make_serialization_file_name (sc->h,
                                                      category);
@@ -1803,17 +1805,6 @@
     goto cleanup;          
   GNUNET_free (uris);
   uris = NULL;
-  scc = sc->child_head;
-  while (NULL != scc)
-    {
-      if (scc->serialization == NULL)
-       break;
-      if (GNUNET_OK !=
-         GNUNET_BIO_write_string (wh, scc->serialization))
-       goto cleanup;
-      scc = scc->next;
-    }
-  GNUNET_BIO_write_string (wh, NULL);
   if (GNUNET_OK !=
       GNUNET_BIO_write_close (wh))
     {
@@ -1971,6 +1962,21 @@
 
 
 /**
+ * Deserialize a search. 
+ *
+ * @param h overall context
+ * @param rh file to deserialize from
+ * @param psearch_result parent search result
+ * @param serialization name under which the search was serialized
+ */
+static struct GNUNET_FS_SearchContext *
+deserialize_search (struct GNUNET_FS_Handle *h,
+                   struct GNUNET_BIO_ReadHandle *rh,
+                   struct GNUNET_FS_SearchResult *psearch_result,
+                   const char *serialization);
+
+
+/**
  * Function called with a filename of serialized search result
  * to deserialize.
  *
@@ -1987,6 +1993,7 @@
   char *uris;
   char *emsg;
   char *download;
+  char *update_srch;
   struct GNUNET_BIO_ReadHandle *rh;
   struct GNUNET_BIO_ReadHandle *drh;
   struct GNUNET_FS_SearchResult *sr;
@@ -1998,7 +2005,7 @@
       if (ser != NULL)
        {
          remove_sync_file_in_dir (sc->h, 
-                                  (sc->parent == NULL) 
+                                  (sc->psearch_result == NULL) 
                                   ? GNUNET_FS_SYNC_PATH_MASTER_SEARCH
                                   : GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
                                   sc->serialization,
@@ -2018,6 +2025,8 @@
        (GNUNET_OK !=
        GNUNET_BIO_read_string (rh, "download-lnk", &download, 16)) ||
        (GNUNET_OK !=
+       GNUNET_BIO_read_string (rh, "search-lnk", &update_srch, 16)) ||
+       (GNUNET_OK !=
        GNUNET_BIO_read_meta_data (rh, "result-meta", &sr->meta)) ||
        (GNUNET_OK !=
        GNUNET_BIO_read (rh, "result-key", &sr->key, sizeof (GNUNET_HashCode))) 
||
@@ -2052,6 +2061,26 @@
        }
       GNUNET_free (download);
     }
+  if (update_srch != NULL)
+    {
+      drh = get_read_handle (sc->h, 
+                            GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
+                            update_srch);
+      deserialize_search (sc->h,
+                         drh,
+                         sr,
+                         update_srch);
+      if (GNUNET_OK !=
+         GNUNET_BIO_read_close (drh, &emsg))
+       {
+         GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                     _("Failed to resume sub-search `%s': %s\n"),
+                     update_srch,
+                     emsg);
+         GNUNET_free (emsg);
+       }
+      GNUNET_free (update_srch);      
+    }
   GNUNET_CONTAINER_multihashmap_put (sc->master_result_map,
                                     &sr->key,
                                     sr,
@@ -2102,6 +2131,16 @@
 
 
 /**
+ * Signal resuming of a search to our clients (for the
+ * top level search and all sub-searches).
+ *
+ * @param sc search being resumed
+ */
+static void
+signal_search_resume (struct GNUNET_FS_SearchContext *sc);
+
+
+/**
  * Iterator over search results signaling resume to the client for
  * each result.
  *
@@ -2139,11 +2178,22 @@
     {
       GNUNET_FS_search_start_probe_ (sr);
     }
+  if (sr->update_search != NULL)
+    signal_search_resume (sr->update_search);
   return GNUNET_YES;
 }
 
 
 /**
+ * Free memory allocated by the search context and its children
+ *
+ * @param sc search context to free
+ */
+static void
+free_search_context (struct GNUNET_FS_SearchContext *sc);
+
+
+/**
  * Iterator over search results freeing each.
  *
  * @param cls closure, the 'struct GNUNET_FS_SearchContext'
@@ -2158,6 +2208,11 @@
 {
   struct GNUNET_FS_SearchResult *sr = value;
 
+  if (sr->update_search != NULL)
+    {
+      free_search_context (sr->update_search);
+      GNUNET_assert (NULL == sr->update_search);
+    }
   GNUNET_CONTAINER_meta_data_destroy (sr->meta);
   GNUNET_FS_uri_destroy (sr->uri);
   GNUNET_free (sr);
@@ -2173,30 +2228,21 @@
 static void
 free_search_context (struct GNUNET_FS_SearchContext *sc)
 {
-  struct GNUNET_FS_SearchContext *scc;
-
-  while (NULL != (scc = sc->child_head))
-    {
-      GNUNET_CONTAINER_DLL_remove (sc->child_head,
-                                  sc->child_tail,
-                                  scc);      
-      free_search_context (scc);
-    }
-  GNUNET_free_non_null (sc->emsg);
   if (sc->serialization != NULL)
     {
       GNUNET_FS_remove_sync_file_ (sc->h,
-                                  (sc->parent == NULL) 
+                                  (sc->psearch_result == NULL) 
                                   ? GNUNET_FS_SYNC_PATH_MASTER_SEARCH
                                   : GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
                                   sc->serialization);
       GNUNET_FS_remove_sync_dir_ (sc->h,
-                                  (sc->parent == NULL) 
+                                  (sc->psearch_result == NULL) 
                                   ? GNUNET_FS_SYNC_PATH_MASTER_SEARCH
                                   : GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
                                  sc->serialization);
     }
   GNUNET_free_non_null (sc->serialization);
+  GNUNET_free_non_null (sc->emsg);
   if (sc->uri != NULL)
     GNUNET_FS_uri_destroy (sc->uri);
   if (sc->master_result_map != NULL)
@@ -2407,7 +2453,6 @@
 static void
 signal_search_resume (struct GNUNET_FS_SearchContext *sc)
 {
-  struct GNUNET_FS_SearchContext *scc;
   struct GNUNET_FS_ProgressInfo pi;
 
   pi.status = GNUNET_FS_STATUS_SEARCH_RESUME;
@@ -2415,12 +2460,10 @@
   pi.value.search.specifics.resume.is_paused = (sc->client == NULL) ? 
GNUNET_YES : GNUNET_NO;
   sc->client_info = GNUNET_FS_search_make_status_ (&pi,
                                                   sc);
-  scc = sc->child_head;
-  while (NULL != scc)
-    {
-      signal_search_resume (scc);
-      scc = scc->next;
-    }
+  GNUNET_CONTAINER_multihashmap_iterate (sc->master_result_map,
+                                        &signal_result_resume,
+                                        sc);
+
 }
 
 
@@ -2429,29 +2472,36 @@
  *
  * @param h overall context
  * @param rh file to deserialize from
- * @param parent parent search
+ * @param psearch_result parent search result
  * @param serialization name under which the search was serialized
  */
 static struct GNUNET_FS_SearchContext *
 deserialize_search (struct GNUNET_FS_Handle *h,
                    struct GNUNET_BIO_ReadHandle *rh,
-                   struct GNUNET_FS_SearchContext *parent,
+                   struct GNUNET_FS_SearchResult *psearch_result,
                    const char *serialization)
 {
   struct GNUNET_FS_SearchContext *sc;
-  struct GNUNET_FS_SearchContext *scc;
-  struct GNUNET_BIO_ReadHandle *rhc;
   char *emsg;
   char *uris;
-  char *child_ser;
   char *dn;
   uint32_t options;
   char in_pause;
 
+  if ( (psearch_result != NULL) &&
+       (psearch_result->update_search != NULL) )
+    {
+      GNUNET_break (0);
+      return NULL;
+    }
   uris = NULL;
   emsg = NULL;
   sc = GNUNET_malloc (sizeof (struct GNUNET_FS_SearchContext));
-  sc->parent = parent;
+  if (psearch_result != NULL)
+    {
+      sc->psearch_result = psearch_result;
+      psearch_result->update_search = sc;
+    }
   sc->h = h;
   sc->serialization = GNUNET_strdup (serialization);
   if ( (GNUNET_OK !=
@@ -2473,7 +2523,7 @@
   sc->options = (enum GNUNET_FS_SearchOptions) options;
   sc->master_result_map = GNUNET_CONTAINER_multihashmap_create (16);
   dn = get_serialization_file_name_in_dir (h,
-                                          (sc->parent == NULL) 
+                                          (sc->psearch_result == NULL) 
                                           ? GNUNET_FS_SYNC_PATH_MASTER_SEARCH
                                           : GNUNET_FS_SYNC_PATH_CHILD_SEARCH,
                                           sc->serialization,
@@ -2490,42 +2540,7 @@
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                  _("Could not resume running search, will resume as paused 
search\n"));    
     }
-  while (1)
-    {
-      if ( (GNUNET_OK !=
-           GNUNET_BIO_read_string (rh, "child-serialization", &child_ser, 32)))
-       goto cleanup;
-      if (child_ser == NULL)
-       break;    
-      rhc = get_read_handle (h, GNUNET_FS_SYNC_PATH_CHILD_SEARCH, child_ser);
-      if (rhc != NULL)
-       {
-         scc = deserialize_search (h, rhc, sc, child_ser);
-         if (scc != NULL)          
-           GNUNET_CONTAINER_DLL_insert (sc->child_head,
-                                        sc->child_tail,
-                                        scc);      
-         emsg = NULL;
-         if (GNUNET_OK !=
-             GNUNET_BIO_read_close (rhc, &emsg))
-           {
-             GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                         _("Failed to resume sub-search `%s': %s\n"),
-                         child_ser,
-                         emsg);
-             GNUNET_free (emsg);
-           }
-       }    
-      GNUNET_free (child_ser);  
-    }
-  if (parent != NULL)
-    GNUNET_CONTAINER_DLL_insert (parent->child_head,
-                                parent->child_tail,
-                                sc);
   signal_search_resume (sc);
-  GNUNET_CONTAINER_multihashmap_iterate (sc->master_result_map,
-                                        &signal_result_resume,
-                                        sc);
   GNUNET_free (uris);
   return sc;
  cleanup:

Modified: gnunet/src/fs/fs.h
===================================================================
--- gnunet/src/fs/fs.h  2010-05-04 15:12:21 UTC (rev 11184)
+++ gnunet/src/fs/fs.h  2010-05-04 15:48:39 UTC (rev 11185)
@@ -646,12 +646,16 @@
   /**
    * ID of an associated download based on this search result (or
    * NULL for none).
-   *
-   * FIXME: not yet serialized.
    */
   struct GNUNET_FS_DownloadContext *download;
 
   /**
+   * If this search result triggered an update search, this field
+   * links to the update search.
+   */
+  struct GNUNET_FS_SearchContext *update_search;
+
+  /**
    * Name under which this search result is stored on disk.
    */
   char *serialization;
@@ -1457,36 +1461,12 @@
   struct GNUNET_FS_Uri *uri;
 
   /**
-   * For update-searches, link to the base-SKS search that triggered
+   * For update-searches, link to the search result that triggered
    * the update search; otherwise NULL.
    */
-  struct GNUNET_FS_SearchContext *parent;
+  struct GNUNET_FS_SearchResult *psearch_result;
 
   /**
-   * For update-searches, link to the first child search that
-   * triggered the update search; otherwise NULL.
-   */
-  struct GNUNET_FS_SearchContext *child_head;
-
-  /**
-   * For update-searches, link to the last child search that triggered
-   * the update search; otherwise NULL.
-   */
-  struct GNUNET_FS_SearchContext *child_tail;
-
-  /**
-   * For update-searches, link to the next child belonging to the same
-   * parent.
-   */
-  struct GNUNET_FS_SearchContext *next;
-
-  /**
-   * For update-searches, link to the previous child belonging to the
-   * same parent.
-   */
-  struct GNUNET_FS_SearchContext *prev;
-
-  /**
    * Connection to the FS service.
    */
   struct GNUNET_CLIENT_Connection *client;
@@ -1618,8 +1598,6 @@
   /**
    * Associated search (used when downloading files
    * based on search results), or NULL for none.
-   *
-   * FIXME: not yet serialized
    */
   struct GNUNET_FS_SearchResult *search;
 

Modified: gnunet/src/fs/fs_search.c
===================================================================
--- gnunet/src/fs/fs_search.c   2010-05-04 15:12:21 UTC (rev 11184)
+++ gnunet/src/fs/fs_search.c   2010-05-04 15:48:39 UTC (rev 11185)
@@ -53,7 +53,7 @@
   pi->value.search.cctx
     = sc->client_info;
   pi->value.search.pctx
-    = (sc->parent == NULL) ? NULL : sc->parent->client_info;
+    = (sc->psearch_result == NULL) ? NULL : sc->psearch_result->client_info;
   pi->value.search.query 
     = sc->uri;
   pi->value.search.duration = GNUNET_TIME_absolute_get_duration 
(sc->start_time);
@@ -462,7 +462,7 @@
  * @param anonymity desired level of anonymity
  * @param options options for the search
  * @param cctx client context
- * @param parent parent search (for namespace update searches)
+ * @param psearch parent search result (for namespace update searches)
  * @return context that can be used to control the search
  */
 static struct GNUNET_FS_SearchContext *
@@ -471,7 +471,7 @@
              uint32_t anonymity,
              enum GNUNET_FS_SearchOptions options,
              void *cctx,
-             struct GNUNET_FS_SearchContext *parent);
+             struct GNUNET_FS_SearchResult *psearch);
 
 
 /**
@@ -523,14 +523,12 @@
   uu.type = sks;
   uu.data.sks.namespace = sc->uri->data.sks.namespace;
   uu.data.sks.identifier = GNUNET_strdup (id_update);
-  /* FIXME: should attach update search to the individual result, not
-     the entire SKS search! */
-  search_start (sc->h,
-               &uu,
-               sc->anonymity,
-               sc->options,
-               NULL,
-               sc);
+  (void) search_start (sc->h,
+                      &uu,
+                      sc->anonymity,
+                      sc->options,
+                      NULL,
+                      sr);
 }
 
 
@@ -1064,7 +1062,7 @@
  * @param anonymity desired level of anonymity
  * @param options options for the search
  * @param cctx initial value for the client context
- * @param parent parent search (for namespace update searches)
+ * @param psearch parent search result (for namespace update searches)
  * @return context that can be used to control the search
  */
 static struct GNUNET_FS_SearchContext *
@@ -1073,7 +1071,7 @@
              uint32_t anonymity,
              enum GNUNET_FS_SearchOptions options,
              void *cctx,
-             struct GNUNET_FS_SearchContext *parent)
+             struct GNUNET_FS_SearchResult *psearch)
 {
   struct GNUNET_FS_SearchContext *sc;
   struct GNUNET_FS_ProgressInfo pi;
@@ -1084,13 +1082,13 @@
   sc->uri = GNUNET_FS_uri_dup (uri);
   sc->anonymity = anonymity;
   sc->start_time = GNUNET_TIME_absolute_get ();
-  sc->parent = parent;
+  if (psearch != NULL)
+    {
+      sc->psearch_result = psearch;  
+      psearch->update_search = sc;
+    }
   sc->master_result_map = GNUNET_CONTAINER_multihashmap_create (16);
   sc->client_info = cctx;
-  if (NULL != parent)
-    GNUNET_CONTAINER_DLL_insert (parent->child_head,
-                                parent->child_tail,
-                                sc);
   if (GNUNET_OK !=
       GNUNET_FS_search_start_searching_ (sc))
     {
@@ -1206,6 +1204,8 @@
                               sr->probe_cancel_task);  
       sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK;
     }
+  if (sr->update_search != NULL)
+    GNUNET_FS_search_pause (sr->update_search);
   return GNUNET_OK;
 }
 
@@ -1226,11 +1226,23 @@
   struct GNUNET_FS_SearchResult *sr = value;
 
   GNUNET_FS_search_start_probe_ (sr);
+  if (sr->update_search != NULL)
+    GNUNET_FS_search_continue (sr->update_search);
   return GNUNET_OK;
 }
 
 
 /**
+ * Create SUSPEND event for the given search operation
+ * and then clean up our state (without stop signal).
+ *
+ * @param cls the 'struct GNUNET_FS_SearchContext' to signal for
+ */
+static void
+search_signal_suspend (void *cls);
+
+
+/**
  * Signal suspend and free the given search result.
  *
  * @param cls the global FS handle
@@ -1250,6 +1262,8 @@
 
   if (sr->download != NULL)
     GNUNET_FS_download_signal_suspend_ (sr->download);
+  if (sr->update_search != NULL)
+    search_signal_suspend (sr->update_search);
   pi.status = GNUNET_FS_STATUS_SEARCH_RESULT_SUSPEND;
   pi.value.search.specifics.result_suspend.cctx = sr->client_info;
   pi.value.search.specifics.result_suspend.meta = sr->meta;
@@ -1279,20 +1293,10 @@
 search_signal_suspend (void *cls)
 {
   struct GNUNET_FS_SearchContext *sc = cls;
-  struct GNUNET_FS_SearchContext *parent = cls;
   struct GNUNET_FS_ProgressInfo pi;
   unsigned int i;
 
   GNUNET_FS_end_top (sc->h, sc->top);
-  if (NULL != (parent = sc->parent))
-    {
-      GNUNET_CONTAINER_DLL_remove (parent->child_head,
-                                  parent->child_tail,
-                                  sc);
-      sc->parent = NULL;
-    }
-  while (NULL != sc->child_head)
-    search_signal_suspend (sc->child_head);
   GNUNET_CONTAINER_multihashmap_iterate (sc->master_result_map,
                                         &search_result_suspend,
                                         sc);
@@ -1426,6 +1430,11 @@
       GNUNET_FS_download_sync_ (sr->download);
       sr->download = NULL;     
     }
+  if (NULL != sr->update_search)
+    {
+      GNUNET_FS_search_stop (sr->update_search);
+      GNUNET_assert (sr->update_search == NULL);
+    }
   pi.status = GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED;
   pi.value.search.specifics.result_stopped.cctx = sr->client_info;
   pi.value.search.specifics.result_stopped.meta = sr->meta;
@@ -1455,31 +1464,23 @@
 {
   struct GNUNET_FS_ProgressInfo pi;
   unsigned int i;
-  struct GNUNET_FS_SearchContext *parent;
 
   if (sc->top != NULL)
     GNUNET_FS_end_top (sc->h, sc->top);
-  if (NULL != (parent = sc->parent))
-    {
-      GNUNET_CONTAINER_DLL_remove (parent->child_head,
-                                  parent->child_tail,
-                                  sc);
-      sc->parent = NULL;
-    }
-  while (NULL != sc->child_head)
-    GNUNET_FS_search_stop (sc->child_head);
+  if (sc->psearch_result != NULL)
+    sc->psearch_result->update_search = NULL;
   GNUNET_CONTAINER_multihashmap_iterate (sc->master_result_map,
                                         &search_result_free,
                                         sc);
   if (sc->serialization != NULL)
     {
       GNUNET_FS_remove_sync_file_ (sc->h,
-                                  (sc->parent != NULL)  
+                                  (sc->psearch_result != NULL)  
                                   ? GNUNET_FS_SYNC_PATH_CHILD_SEARCH 
                                   : GNUNET_FS_SYNC_PATH_MASTER_SEARCH,
                                   sc->serialization);
       GNUNET_FS_remove_sync_dir_ (sc->h,
-                                 (sc->parent != NULL)  
+                                 (sc->psearch_result != NULL)  
                                  ? GNUNET_FS_SYNC_PATH_CHILD_SEARCH 
                                  : GNUNET_FS_SYNC_PATH_MASTER_SEARCH,
                                  sc->serialization);

Modified: gnunet/src/include/gnunet_fs_service.h
===================================================================
--- gnunet/src/include/gnunet_fs_service.h      2010-05-04 15:12:21 UTC (rev 
11184)
+++ gnunet/src/include/gnunet_fs_service.h      2010-05-04 15:48:39 UTC (rev 
11185)
@@ -21,10 +21,6 @@
  * @file include/gnunet_fs_service.h
  * @brief API for file-sharing via GNUnet 
  * @author Christian Grothoff
- *
- * TODO:
- * - extend API with support for publish simulation (-s)
- *   and URI-argument binding to keyword/namespace (-u)
  */
 #ifndef GNUNET_FS_LIB_H
 #define GNUNET_FS_LIB_H
@@ -1078,8 +1074,10 @@
 
       /**
        * Client parent-context pointer; NULL for top-level searches,
-       * non-NULL for automatically triggered searches for updates in
-       * namespaces.
+       * refers to the client context of the associated search result
+       * for automatically triggered searches for updates in
+       * namespaces.  In this case, 'presult' refers to that search
+       * result.
        */
       void *pctx;
 





reply via email to

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