fixing leak
[oweals/gnunet.git] / src / include / gnunet_fs_service.h
index 2207e274e336295671cfb056da0c102095820b0e..13b0cd2c5a422ad01598a23d7a45b14a28ef945c 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
  * @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
@@ -118,6 +114,32 @@ char *
 GNUNET_FS_uri_ksk_to_string_fancy (const struct GNUNET_FS_Uri *uri);
 
 
+/**
+ * Add the given keyword to the set of keywords represented by the URI.
+ * Does nothing if the keyword is already present.
+ *
+ * @param uri ksk uri to modify
+ * @param keyword keyword to add
+ * @param is_mandatory is this keyword mandatory?
+ */
+void
+GNUNET_FS_uri_ksk_add_keyword (struct GNUNET_FS_Uri *uri,
+                              const char *keyword,
+                              int is_mandatory);
+
+
+/**
+ * Remove the given keyword from the set of keywords represented by the URI.
+ * Does nothing if the keyword is not present.
+ *
+ * @param uri ksk uri to modify
+ * @param keyword keyword to add
+ */
+void
+GNUNET_FS_uri_ksk_remove_keyword (struct GNUNET_FS_Uri *uri,
+                                 const char *keyword);
+
+
 /**
  * Convert a UTF-8 String to a URI.
  *
@@ -205,7 +227,7 @@ GNUNET_FS_uri_loc_get_expiration (const struct GNUNET_FS_Uri *uri);
  */
 struct GNUNET_FS_Uri *
 GNUNET_FS_uri_loc_create (const struct GNUNET_FS_Uri *baseUri,
-                         struct GNUNET_CONFIGURATION_Handle *cfg,
+                         const struct GNUNET_CONFIGURATION_Handle *cfg,
                          struct GNUNET_TIME_Absolute expiration_time);
 
 
@@ -331,6 +353,18 @@ GNUNET_FS_uri_sks_create (struct GNUNET_FS_Namespace *ns,
                          char **emsg);
 
 
+/**
+ * Create an SKS URI from a namespace ID and an identifier.
+ *
+ * @param nsid namespace ID
+ * @param id identifier
+ * @return an FS URI for the given namespace and identifier
+ */
+struct GNUNET_FS_Uri *
+GNUNET_FS_uri_sks_create_from_nsid (GNUNET_HashCode *nsid,
+                                   const char *id);
+
+
 /**
  * Get the ID of a namespace from the given
  * namespace URI.
@@ -603,12 +637,6 @@ enum GNUNET_FS_Status
    */
   GNUNET_FS_STATUS_SEARCH_SUSPEND,
   
-  /**
-   * Event generated for each search result
-   * when the respective search is suspended.
-   */
-  GNUNET_FS_STATUS_SEARCH_SUSPEND_RESULT,
-
   /**
    * This search has yielded a result.
    */
@@ -760,7 +788,7 @@ struct GNUNET_FS_ProgressInfo
       /**
        * Context for controlling the upload.
        */
-      struct GNUNET_FS_PublishContext *sc;
+      struct GNUNET_FS_PublishContext *pc;
 
       /**
        * Information about the file that is being publishd.
@@ -843,9 +871,7 @@ struct GNUNET_FS_ProgressInfo
 
          /**
           * Depth of the given block in the tree; 
-          * 0 would be the highest level (the first
-          * call is guaranteed to be for the lowest
-          * level).
+          * 0 would be the lowest level (DBLOCKs).
           */
          unsigned int depth;
 
@@ -970,6 +996,11 @@ struct GNUNET_FS_ProgressInfo
        */
       uint32_t anonymity;
 
+      /**
+       * Is the download currently active.
+       */
+      int is_active;
+
       /**
        * Additional values for specific events.
        */
@@ -982,7 +1013,10 @@ struct GNUNET_FS_ProgressInfo
        struct {
   
          /**
-          * Data block we just obtained.
+          * Data block we just obtained, can be NULL (even if
+          * data_len > 0) if we found the entire block 'intact' on
+          * disk.  In this case, it is also possible for 'data_len'
+          * to be larger than an individual (32k) block.
           */
          const void *data;
          
@@ -998,9 +1032,7 @@ struct GNUNET_FS_ProgressInfo
 
          /**
           * Depth of the given block in the tree; 
-          * 0 would be the highest level (the first
-          * call is guaranteed to be for the lowest
-          * level).
+          * 0 would be the lowest level (DBLOCKS).
           */
          unsigned int depth;
 
@@ -1078,8 +1110,10 @@ struct GNUNET_FS_ProgressInfo
 
       /**
        * 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;
 
@@ -1127,6 +1161,12 @@ struct GNUNET_FS_ProgressInfo
           */
          struct GNUNET_FS_SearchResult *result;
 
+         /**
+          * Applicability rank (the larger, the better the result
+          * fits the search criteria).
+          */
+         uint32_t applicability_rank;    
+
        } result;
        
        /**
@@ -1413,9 +1453,7 @@ struct GNUNET_FS_ProgressInfo
 
          /**
           * Depth of the given block in the tree; 
-          * 0 would be the highest level (the first
-          * call is guaranteed to be for the lowest
-          * level).
+          * 0 would be the lowest level (DBLOCKS).
           */
          unsigned int depth;
 
@@ -1535,6 +1573,68 @@ enum GNUNET_FS_OPTIONS
   };
 
 
+/**
+ * Settings for publishing a block (which may of course also
+ * apply to an entire directory or file).
+ */
+struct GNUNET_FS_BlockOptions
+{
+
+  /**
+   * At what time should the block expire?  Data blocks (DBLOCKS and
+   * IBLOCKS) may still be used even if they are expired (however,
+   * they'd be removed quickly from the datastore if we are short on
+   * space), all other types of blocks will no longer be returned
+   * after they expire.
+   */
+  struct GNUNET_TIME_Absolute expiration_time;
+
+  /**
+   * At which anonymity level should the block be shared?
+   * (0: no anonymity, 1: normal GAP, >1: with cover traffic).
+   */
+  uint32_t anonymity_level;
+
+  /**
+   * How important is it for us to store the block?  If we run
+   * out of space, the highest-priority, non-expired blocks will
+   * be kept.
+   */
+  uint32_t content_priority;
+
+  /**
+   * How often should we try to migrate the block to other peers?
+   * Only used if "CONTENT_PUSHING" is set to YES, in which case we
+   * first push each block to other peers according to their
+   * replication levels.  Once each block has been pushed that many
+   * times to other peers, blocks are chosen for migration at random.
+   * Naturally, there is no guarantee that the other peers will keep
+   * these blocks for any period of time (since they won't have any
+   * priority or might be too busy to even store the block in the
+   * first place).
+   */
+  uint32_t replication_level;
+
+};
+
+
+/**
+ * Return the current year (i.e. '2011').
+ */
+unsigned int
+GNUNET_FS_get_current_year (void);
+
+
+/**
+ * Convert a year to an expiration time of January 1st of that year.
+ *
+ * @param year a year (after 1970, please ;-)).
+ * @return absolute time for January 1st of that year.
+ */
+struct GNUNET_TIME_Absolute
+GNUNET_FS_year_to_time (unsigned int year);
+
+
 /**
  * Handle to the file-sharing service.
  */
@@ -1544,7 +1644,6 @@ struct GNUNET_FS_Handle;
 /**
  * Setup a connection to the file-sharing service.
  *
- * @param sched scheduler to use
  * @param cfg configuration to use
  * @param client_name unique identifier for this client 
  * @param upcb function to call to notify about FS actions
@@ -1554,8 +1653,7 @@ struct GNUNET_FS_Handle;
  * @return NULL on error
  */
 struct GNUNET_FS_Handle *
-GNUNET_FS_start (struct GNUNET_SCHEDULER_Handle *sched,
-                const struct GNUNET_CONFIGURATION_Handle *cfg,
+GNUNET_FS_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
                 const char *client_name,
                 GNUNET_FS_ProgressCallback upcb,
                 void *upcb_cls,
@@ -1574,6 +1672,23 @@ void
 GNUNET_FS_stop (struct GNUNET_FS_Handle *h); 
 
 
+/**
+ * Extract meta-data from a file.
+ *
+ * @param md metadata to set
+ * @param filename name of file to inspect
+ * @param extractors plugins to use
+ * @return GNUNET_SYSERR on error, otherwise the number
+ *   of meta-data items obtained
+ */
+int 
+GNUNET_FS_meta_data_extract_from_file (struct
+                                      GNUNET_CONTAINER_MetaData
+                                      *md, const char *filename,
+                                      struct EXTRACTOR_PluginList *
+                                      extractors);
+
+
 /**
  * Function called on entries in a GNUNET_FS_FileInformation publish-structure.
  *
@@ -1582,9 +1697,8 @@ GNUNET_FS_stop (struct GNUNET_FS_Handle *h);
  * @param length length of the file or directory
  * @param meta metadata for the file or directory (can be modified)
  * @param uri pointer to the keywords that will be used for this entry (can be modified)
- * @param anonymity pointer to selected anonymity level (can be modified)
- * @param priority pointer to selected priority (can be modified)
- * @param expirationTime pointer to selected expiration time (can be modified)
+ * @param bo block options (can be modified)
+ * @param do_index should we index (can be modified)
  * @param client_info pointer to client context set upon creation (can be modified)
  * @return GNUNET_OK to continue, GNUNET_NO to remove
  *         this entry from the directory, GNUNET_SYSERR
@@ -1595,9 +1709,8 @@ typedef int (*GNUNET_FS_FileInformationProcessor)(void *cls,
                                                  uint64_t length,
                                                  struct GNUNET_CONTAINER_MetaData *meta,
                                                  struct GNUNET_FS_Uri **uri,
-                                                 uint32_t *anonymity,
-                                                 uint32_t *priority,
-                                                 struct GNUNET_TIME_Absolute *expirationTime,
+                                                 struct GNUNET_FS_BlockOptions *bo,
+                                                 int *do_index,
                                                  void **client_info);
 
 
@@ -1627,11 +1740,7 @@ GNUNET_FS_file_information_get_id (struct GNUNET_FS_FileInformation *s);
  * @param meta metadata for the file
  * @param do_index GNUNET_YES for index, GNUNET_NO for insertion,
  *                GNUNET_SYSERR for simulation
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- *   keep this file available?  Use 0 for maximum anonymity and
- *   minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
  * @return publish structure entry for the file
  */
 struct GNUNET_FS_FileInformation *
@@ -1641,9 +1750,7 @@ GNUNET_FS_file_information_create_from_file (struct GNUNET_FS_Handle *h,
                                             const struct GNUNET_FS_Uri *keywords,
                                             const struct GNUNET_CONTAINER_MetaData *meta,
                                             int do_index,
-                                            uint32_t anonymity,
-                                            uint32_t priority,
-                                            struct GNUNET_TIME_Absolute expirationTime);
+                                            const struct GNUNET_FS_BlockOptions *bo);
 
 
 /**
@@ -1659,11 +1766,7 @@ GNUNET_FS_file_information_create_from_file (struct GNUNET_FS_Handle *h,
  * @param meta metadata for the file
  * @param do_index GNUNET_YES for index, GNUNET_NO for insertion,
  *                GNUNET_SYSERR for simulation
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- *   keep this file available?  Use 0 for maximum anonymity and
- *   minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
  * @return publish structure entry for the file
  */
 struct GNUNET_FS_FileInformation *
@@ -1674,9 +1777,7 @@ GNUNET_FS_file_information_create_from_data (struct GNUNET_FS_Handle *h,
                                             const struct GNUNET_FS_Uri *keywords,
                                             const struct GNUNET_CONTAINER_MetaData *meta,
                                             int do_index,
-                                            uint32_t anonymity,
-                                            uint32_t priority,
-                                            struct GNUNET_TIME_Absolute expirationTime);
+                                            const struct GNUNET_FS_BlockOptions *bo);
 
 
 /**
@@ -1715,11 +1816,7 @@ typedef size_t (*GNUNET_FS_DataReader)(void *cls,
  * @param meta metadata for the file
  * @param do_index GNUNET_YES for index, GNUNET_NO for insertion,
  *                GNUNET_SYSERR for simulation
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- *   keep this file available?  Use 0 for maximum anonymity and
- *   minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
  * @return publish structure entry for the file
  */
 struct GNUNET_FS_FileInformation *
@@ -1731,9 +1828,7 @@ GNUNET_FS_file_information_create_from_reader (struct GNUNET_FS_Handle *h,
                                               const struct GNUNET_FS_Uri *keywords,
                                               const struct GNUNET_CONTAINER_MetaData *meta,
                                               int do_index,
-                                              uint32_t anonymity,
-                                              uint32_t priority,
-                                              struct GNUNET_TIME_Absolute expirationTime);
+                                              const struct GNUNET_FS_BlockOptions *bo);
 
 
 /**
@@ -1758,9 +1853,7 @@ typedef void (*GNUNET_FS_FileProcessor)(void *cls,
  * @param h handle to the file sharing subsystem
  * @param dirname name of the directory to scan
  * @param do_index should files be indexed or inserted
- * @param anonymity desired anonymity level
- * @param priority priority for publishing
- * @param expirationTime expiration for publication
+ * @param bo block options
  * @param proc function to call on each entry
  * @param proc_cls closure for proc
  * @param emsg where to store an error message (on errors)
@@ -1770,9 +1863,7 @@ typedef int (*GNUNET_FS_DirectoryScanner)(void *cls,
                                          struct GNUNET_FS_Handle *h,
                                          const char *dirname,
                                          int do_index,
-                                         uint32_t anonymity,
-                                         uint32_t priority,
-                                         struct GNUNET_TIME_Absolute expirationTime,
+                                         const struct GNUNET_FS_BlockOptions *bo,
                                          GNUNET_FS_FileProcessor proc,
                                          void *proc_cls,
                                          char **emsg);
@@ -1794,9 +1885,7 @@ typedef int (*GNUNET_FS_DirectoryScanner)(void *cls,
  * @param h handle to the file sharing subsystem
  * @param dirname name of the directory to scan
  * @param do_index should files be indexed or inserted
- * @param anonymity desired anonymity level
- * @param priority priority for publishing
- * @param expirationTime expiration for publication
+ * @param bo block options
  * @param proc function called on each entry
  * @param proc_cls closure for proc
  * @param emsg where to store an error message (on errors)
@@ -1807,9 +1896,7 @@ GNUNET_FS_directory_scanner_default (void *cls,
                                     struct GNUNET_FS_Handle *h,
                                     const char *dirname,
                                     int do_index,
-                                    uint32_t anonymity,
-                                    uint32_t priority,
-                                    struct GNUNET_TIME_Absolute expirationTime,
+                                    const struct GNUNET_FS_BlockOptions *bo,
                                     GNUNET_FS_FileProcessor proc,
                                     void *proc_cls,
                                     char **emsg);
@@ -1831,11 +1918,7 @@ GNUNET_FS_directory_scanner_default (void *cls,
  * @param scanner function used to get a list of files in a directory
  * @param scanner_cls closure for scanner
  * @param do_index should files in the hierarchy be indexed?
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- *   keep this file available?  Use 0 for maximum anonymity and
- *   minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
  * @param emsg where to store an error message
  * @return publish structure entry for the directory, NULL on error
  */
@@ -1846,9 +1929,7 @@ GNUNET_FS_file_information_create_from_directory (struct GNUNET_FS_Handle *h,
                                                  GNUNET_FS_DirectoryScanner scanner,
                                                  void *scanner_cls,
                                                  int do_index,
-                                                 uint32_t anonymity,
-                                                 uint32_t priority,
-                                                 struct GNUNET_TIME_Absolute expirationTime,
+                                                 const struct GNUNET_FS_BlockOptions *bo,
                                                  char **emsg);
 
 
@@ -1863,11 +1944,7 @@ GNUNET_FS_file_information_create_from_directory (struct GNUNET_FS_Handle *h,
  * @param keywords under which keywords should this directory be available
  *         directly; can be NULL
  * @param meta metadata for the directory
- * @param anonymity what is the desired anonymity level for sharing?
- * @param priority what is the priority for OUR node to
- *   keep this file available?  Use 0 for maximum anonymity and
- *   minimum reliability...
- * @param expirationTime when should this content expire?
+ * @param bo block options
  * @return publish structure entry for the directory , NULL on error
  */
 struct GNUNET_FS_FileInformation *
@@ -1875,9 +1952,17 @@ GNUNET_FS_file_information_create_empty_directory (struct GNUNET_FS_Handle *h,
                                                   void *client_info,
                                                   const struct GNUNET_FS_Uri *keywords,
                                                   const struct GNUNET_CONTAINER_MetaData *meta,
-                                                  uint32_t anonymity,
-                                                  uint32_t priority,
-                                                  struct GNUNET_TIME_Absolute expirationTime);
+                                                  const struct GNUNET_FS_BlockOptions *bo);
+
+
+/**
+ * Test if a given entry represents a directory.
+ *
+ * @param ent check if this FI represents a directory
+ * @return GNUNET_YES if so, GNUNET_NO if not
+ */
+int
+GNUNET_FS_file_information_is_directory (struct GNUNET_FS_FileInformation *ent);
 
 
 /**
@@ -2004,9 +2089,8 @@ typedef void (*GNUNET_FS_PublishContinuation)(void *cls,
  * @param ksk_uri keywords to use
  * @param meta metadata to use
  * @param uri URI to refer to in the KBlock
- * @param expirationTime when the KBlock expires
- * @param anonymity anonymity level for the KBlock
- * @param priority priority for the KBlock
+ * @param bo block options
+ * @param options publication options
  * @param cont continuation
  * @param cont_cls closure for cont
  */
@@ -2015,9 +2099,7 @@ GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h,
                       const struct GNUNET_FS_Uri *ksk_uri,
                       const struct GNUNET_CONTAINER_MetaData *meta,
                       const struct GNUNET_FS_Uri *uri,
-                      struct GNUNET_TIME_Absolute expirationTime,
-                      uint32_t anonymity,
-                      uint32_t priority,
+                      const struct GNUNET_FS_BlockOptions *bo,
                       enum GNUNET_FS_PublishOptions options,
                       GNUNET_FS_PublishContinuation cont,
                       void *cont_cls);
@@ -2032,9 +2114,8 @@ GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h,
  * @param update update identifier to use
  * @param meta metadata to use
  * @param uri URI to refer to in the SBlock
- * @param expirationTime when the SBlock expires
- * @param anonymity anonymity level for the SBlock
- * @param priority priority for the SBlock
+ * @param bo block options
+ * @param options publication options
  * @param cont continuation
  * @param cont_cls closure for cont
  */
@@ -2045,9 +2126,7 @@ GNUNET_FS_publish_sks (struct GNUNET_FS_Handle *h,
                       const char *update,
                       const struct GNUNET_CONTAINER_MetaData *meta,
                       const struct GNUNET_FS_Uri *uri,
-                      struct GNUNET_TIME_Absolute expirationTime,
-                      uint32_t anonymity,
-                      uint32_t priority,
+                      const struct GNUNET_FS_BlockOptions *bo,
                       enum GNUNET_FS_PublishOptions options,
                       GNUNET_FS_PublishContinuation cont,
                       void *cont_cls);
@@ -2115,9 +2194,7 @@ GNUNET_FS_unindex_stop (struct GNUNET_FS_UnindexContext *uc);
  * @param ksk_uri keywords to use for advertisment
  * @param namespace handle for the namespace that should be advertised
  * @param meta meta-data for the namespace advertisement
- * @param anonymity for the namespace advertismement
- * @param priority for the namespace advertisement
- * @param expiration for the namespace advertisement
+ * @param bo block options
  * @param rootEntry name of the root of the namespace
  * @param cont continuation
  * @param cont_cls closure for cont
@@ -2127,9 +2204,7 @@ GNUNET_FS_namespace_advertise (struct GNUNET_FS_Handle *h,
                               struct GNUNET_FS_Uri *ksk_uri,
                               struct GNUNET_FS_Namespace *namespace,
                               const struct GNUNET_CONTAINER_MetaData *meta,
-                              uint32_t anonymity,
-                              uint32_t priority,
-                              struct GNUNET_TIME_Absolute expiration,
+                              const struct GNUNET_FS_BlockOptions *bo,
                               const char *rootEntry,
                               GNUNET_FS_PublishContinuation cont,
                               void *cont_cls);
@@ -2211,15 +2286,28 @@ typedef void
 
 
 /**
- * List all of the identifiers in the namespace for 
- * which we could produce an update.
+ * List all of the identifiers in the namespace for which we could
+ * produce an update.  Namespace updates form a graph where each node
+ * has a name.  Each node can have any number of URI/meta-data entries
+ * which can each be linked to other nodes.  Cycles are possible.
+ * 
+ * Calling this function with "next_id" NULL will cause the library to
+ * call "ip" with a root for each strongly connected component of the
+ * graph (a root being a node from which all other nodes in the Scc
+ * are reachable).
+ * 
+ * Calling this function with "next_id" being the name of a node will
+ * cause the library to call "ip" with all children of the node.  Note
+ * that cycles within an SCC are possible (including self-loops).
  *
  * @param namespace namespace to inspect for updateable content
+ * @param next_id ID to look for; use NULL to look for SCC roots
  * @param ip function to call on each updateable identifier
  * @param ip_cls closure for ip
  */
 void
 GNUNET_FS_namespace_list_updateable (struct GNUNET_FS_Namespace *namespace,
+                                    const char *next_id,
                                     GNUNET_FS_IdentifierProcessor ip, 
                                     void *ip_cls);
 
@@ -2433,66 +2521,6 @@ GNUNET_FS_download_stop (struct GNUNET_FS_DownloadContext *dc,
                         int do_delete);
 
 
-/**
- * Initialize collection.
- *
- * @param h handle to the file sharing subsystem
- * @param namespace namespace to use for the collection
- * @return GNUNET_OK on success, GNUNET_SYSERR if another
- *         namespace is already set for our collection
- */
-int 
-GNUNET_FS_collection_start (struct GNUNET_FS_Handle *h,
-                           struct GNUNET_FS_Namespace *namespace);
-
-
-/**
- * Stop collection.
- *
- * @param h handle to the file sharing subsystem
- * @return GNUNET_OK on success, GNUNET_SYSERR if no collection is active
- */
-int 
-GNUNET_FS_collection_stop (struct GNUNET_FS_Handle *h);
-
-
-/**
- * Are we using a collection?
- *
- * @param h handle to the file sharing subsystem
- * @return NULL if there is no collection,
- */
-struct GNUNET_FS_Namespace *
-GNUNET_FS_collection_get(struct GNUNET_FS_Handle *h);
-
-
-/**
- * Publish an update of the current collection information to the
- * network now.  The function has no effect if the collection has not
- * changed since the last publication.  If we are currently not
- * collecting, this function does nothing.
- *
- * @param h handle to the file sharing subsystem
- */
-void GNUNET_FS_collection_publish (struct GNUNET_FS_Handle *h);
-
-
-/**
- * If we are currently building a collection, publish the given file
- * information in that collection.  If we are currently not
- * collecting, this function does nothing.
- *
- * @param h handle to the file sharing subsystem
- * @param uri uri to add to the collection
- * @param meta metadata for the uri
- */
-void GNUNET_FS_collection_add (const struct GNUNET_FS_Handle *h,
-                              const struct GNUNET_FS_Uri *uri,
-                              const struct GNUNET_CONTAINER_MetaData *meta);
-
-
-
-
 
 /* ******************** Directory API *********************** */
 
@@ -2570,8 +2598,11 @@ typedef void (*GNUNET_FS_DirectoryEntryProcessor)(void *cls,
  * @param offset offset of data in the directory
  * @param dep function to call on each entry
  * @param dep_cls closure for dep
+ * @return GNUNET_OK if this could be a block in a directory,
+ *         GNUNET_NO if this could be part of a directory (but not 100% OK)
+ *         GNUNET_SYSERR if 'data' does not represent a directory
  */
-void 
+int 
 GNUNET_FS_directory_list_contents (size_t size,
                                   const void *data,
                                   uint64_t offset,