types
[oweals/gnunet.git] / src / fs / fs_file_information.c
index 9b806184b70e5ce64f24ebe5a07bf6393b2e5a7e..e173b1149d4c34565e7b139cecdc215c27439e2d 100644 (file)
@@ -24,7 +24,6 @@
  * @author Christian Grothoff
  *
  * TODO:
- * - publishing progress update API (increment offset, serialize)
  * - serialization/deserialization (& deserialization API)
  * - metadata filename clean up code
  * - metadata/ksk generation for directories from contained files
 
 
 /**
- * Create a temporary file disk to store the current
+ * Create a temporary file on disk to store the current
  * state of "fi" in.
  */
-static void
-fi_sync (struct GNUNET_FS_FileInformation * fi)
+void
+GNUNET_FS_file_information_sync (struct GNUNET_FS_FileInformation * fi)
 {
   if (NULL == fi->serialization)
     {
-      fi->serialization = NULL; // FIXME
+      fi->serialization = NULL; // FIXME -- need cfg!
     }
   // FIXME...
 }
@@ -57,12 +56,32 @@ fi_sync (struct GNUNET_FS_FileInformation * fi)
  * @param filename name of the file to use
  * @return NULL on error
  */
-static struct GNUNET_FS_FileInformation *
-fi_load (const char *filename)
+struct GNUNET_FS_FileInformation *
+GNUNET_FS_file_information_recover (const char *name)
 {
   struct GNUNET_FS_FileInformation *ret;
+  ret = NULL;
   // FIXME!
-  return NULL;
+  return ret;
+}
+
+
+/**
+ * Obtain the name under which this file information
+ * structure is stored on disk.  Only works for top-level
+ * file information structures.
+ *
+ * @param s structure to get the filename for
+ * @return NULL on error, otherwise filename that
+ *         can be passed to "GNUNET_FS_file_information_recover"
+ *         to read this fi-struct from disk.
+ */
+const char *
+GNUNET_FS_file_information_get_id (struct GNUNET_FS_FileInformation *s)
+{
+  if (NULL != s->dir)
+    return NULL;
+  return s->serialization;
 }
 
 
@@ -173,8 +192,8 @@ GNUNET_FS_file_information_create_from_file (void *client_info,
                                             const struct GNUNET_FS_Uri *keywords,
                                             const struct GNUNET_CONTAINER_MetaData *meta,
                                             int do_index,
-                                            unsigned int anonymity,
-                                            unsigned int priority,
+                                            uint32_t anonymity,
+                                            uint32_t priority,
                                             struct GNUNET_TIME_Absolute expirationTime)
 {
   struct FileInfo *fi;
@@ -261,8 +280,8 @@ GNUNET_FS_file_information_create_from_data (void *client_info,
                                             const struct GNUNET_FS_Uri *keywords,
                                             const struct GNUNET_CONTAINER_MetaData *meta,
                                             int do_index,
-                                            unsigned int anonymity,
-                                            unsigned int priority,
+                                            uint32_t anonymity,
+                                            uint32_t priority,
                                             struct GNUNET_TIME_Absolute expirationTime)
 {
   return GNUNET_FS_file_information_create_from_reader (client_info,
@@ -304,8 +323,8 @@ GNUNET_FS_file_information_create_from_reader (void *client_info,
                                               const struct GNUNET_FS_Uri *keywords,
                                               const struct GNUNET_CONTAINER_MetaData *meta,
                                               int do_index,
-                                              unsigned int anonymity,
-                                              unsigned int priority,
+                                              uint32_t anonymity,
+                                              uint32_t priority,
                                               struct GNUNET_TIME_Absolute expirationTime)
 {
   struct GNUNET_FS_FileInformation *ret;
@@ -320,7 +339,7 @@ GNUNET_FS_file_information_create_from_reader (void *client_info,
   ret->data.file.do_index = do_index;
   ret->anonymity = anonymity;
   ret->priority = priority;
-  fi_sync (ret);
+  GNUNET_FS_file_information_sync (ret);
   return ret;
 }
 
@@ -368,12 +387,12 @@ struct DirScanCls
   /**
    * Desired anonymity level.
    */
-  unsigned int anonymity;
+  uint32_t anonymity;
 
   /**
    * Desired publishing priority.
    */
-  unsigned int priority;
+  uint32_t priority;
 
   /**
    * Expiration time for publication.
@@ -480,8 +499,8 @@ int
 GNUNET_FS_directory_scanner_default (void *cls,
                                     const char *dirname,
                                     int do_index,
-                                    unsigned int anonymity,
-                                    unsigned int priority,
+                                    uint32_t anonymity,
+                                    uint32_t priority,
                                     struct GNUNET_TIME_Absolute expirationTime,
                                     GNUNET_FS_FileProcessor proc,
                                     void *proc_cls,
@@ -574,8 +593,8 @@ GNUNET_FS_file_information_create_from_directory (void *client_info,
                                                  GNUNET_FS_DirectoryScanner scanner,
                                                  void *scanner_cls,
                                                  int do_index,
-                                                 unsigned int anonymity,
-                                                 unsigned int priority,
+                                                 uint32_t anonymity,
+                                                 uint32_t priority,
                                                  struct GNUNET_TIME_Absolute expirationTime,
                                                  char **emsg)
 {
@@ -609,10 +628,10 @@ GNUNET_FS_file_information_create_from_directory (void *client_info,
   while (dc.entries != NULL)
     {
       dc.entries->dir = ret;
-      fi_sync (dc.entries);
+      GNUNET_FS_file_information_sync (dc.entries);
       dc.entries = dc.entries->next;
     }
-  fi_sync (ret);
+  GNUNET_FS_file_information_sync (ret);
   return ret;
 }
 
@@ -637,8 +656,8 @@ struct GNUNET_FS_FileInformation *
 GNUNET_FS_file_information_create_empty_directory (void *client_info,
                                                   const struct GNUNET_CONTAINER_MetaData *meta,
                                                   const struct GNUNET_FS_Uri *keywords,
-                                                  unsigned int anonymity,
-                                                  unsigned int priority,
+                                                  uint32_t anonymity,
+                                                  uint32_t priority,
                                                   struct GNUNET_TIME_Absolute expirationTime)
 {
   struct GNUNET_FS_FileInformation *ret;
@@ -651,7 +670,7 @@ GNUNET_FS_file_information_create_empty_directory (void *client_info,
   ret->is_directory = GNUNET_YES;
   ret->anonymity = anonymity;
   ret->priority = priority;
-  fi_sync (ret);
+  GNUNET_FS_file_information_sync (ret);
   return ret;
 }
 
@@ -682,9 +701,8 @@ GNUNET_FS_file_information_add (struct GNUNET_FS_FileInformation *dir,
   ent->next = dir->data.dir.entries;
   dir->data.dir.entries = ent;
   dir->data.dir.dir_size = 0;
-  dir->publish_offset = 0;
-  fi_sync (ent);
-  fi_sync (dir);
+  GNUNET_FS_file_information_sync (ent);
+  GNUNET_FS_file_information_sync (dir);
   return GNUNET_OK;
 }
 
@@ -786,6 +804,7 @@ GNUNET_FS_file_information_destroy (struct GNUNET_FS_FileInformation *fi,
               &fi->priority,
               &fi->expirationTime,
               &fi->client_info);
+      GNUNET_free_non_null (fi->data.dir.dir_data);
       GNUNET_free (fi->data.dir.dirname);
     }
   else
@@ -803,7 +822,7 @@ GNUNET_FS_file_information_destroy (struct GNUNET_FS_FileInformation *fi,
               &fi->expirationTime,
               &fi->client_info);
     }
-
+  GNUNET_free_non_null (fi->emsg);
   /* clean up serialization */
   if (0 != UNLINK (fi->serialization))
     GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,