Fixed compile warnings under windows
[oweals/gnunet.git] / src / util / pseudonym.c
index 3bc8137fed39da69a91c8853bd41df6d84c689b4..6693dadd2e8b5c6ce724b3ec4374321065767d9d 100644 (file)
 #include "gnunet_bio_lib.h"
 
 /** 
- * FIXME
+ * Name of the directory which stores meta data for pseudonym
  */
-#define PS_METADATA_DIR DIR_SEPARATOR_STR "data" DIR_SEPARATOR_STR "pseudonyms/metadata" DIR_SEPARATOR_STR
+#define PS_METADATA_DIR DIR_SEPARATOR_STR "data" DIR_SEPARATOR_STR "pseudonyms" DIR_SEPARATOR_STR "metadata" DIR_SEPARATOR_STR
 
 /** 
- * FIXME
+ * Name of the directory which stores names for pseudonyms
  */
-#define PS_NAMES_DIR    DIR_SEPARATOR_STR "data" DIR_SEPARATOR_STR "pseudonyms/names"    DIR_SEPARATOR_STR
+#define PS_NAMES_DIR    DIR_SEPARATOR_STR "data" DIR_SEPARATOR_STR "pseudonyms" DIR_SEPARATOR_STR "names"    DIR_SEPARATOR_STR
 
 
 /** 
- * FIXME
+ * Registered callbacks for discovery of pseudonyms.
  */
 struct DiscoveryCallback
 {
-
   /** 
-   * FIXME
+   * This is a linked list.
    */
   struct DiscoveryCallback *next;
 
   /** 
-   * FIXME
+   * Function to call each time a pseudonym is discovered.
    */
   GNUNET_PSEUDONYM_Iterator callback;
 
   /** 
-   * FIXME
+   * Closure for callback.
    */
   void *closure;
 };
 
 
 /** 
- * FIXME
+ * Head of the linked list of functions to call when 
+ * new pseudonyms are added.
  */
 static struct DiscoveryCallback *head;
 
 /**
  * Internal notification about new tracked URI.
- * 
- * FIXME
+ * @param id a point to the hash code of pseudonym
+ * @param md meta data to be written
+ * @param rating rating of pseudonym
  */
 static void
 internal_notify (const GNUNET_HashCode * id,
@@ -92,8 +93,9 @@ internal_notify (const GNUNET_HashCode * id,
 /**
  * Register callback to be invoked whenever we discover
  * a new pseudonym.
- * 
- * FIXME
+ * @param cfg configuration to use
+ * @param iterator iterator over pseudonym
+ * @param closure point to a closure
  */
 int
 GNUNET_PSEUDONYM_discovery_callback_register (const struct
@@ -115,8 +117,8 @@ GNUNET_PSEUDONYM_discovery_callback_register (const struct
 
 /**
  * Unregister pseudonym discovery callback.
- * 
- * FIXME
+ * @param iterator iterator over pseudonym
+ * @param closure point to a closure
  */
 int
 GNUNET_PSEUDONYM_discovery_callback_unregister (GNUNET_PSEUDONYM_Iterator
@@ -147,8 +149,10 @@ GNUNET_PSEUDONYM_discovery_callback_unregister (GNUNET_PSEUDONYM_Iterator
 /**
  * Get the filename (or directory name) for the given
  * pseudonym identifier and directory prefix.
- * 
- * FIXME
+ * @param cfg configuration to use
+ * @param prefix path components to append to the private directory name
+ * @param psid hash code of pseudonym, can be NULL
+ * @return filename of the pseudonym (if psid != NULL) or directory with the data (if psid == NULL)
  */
 static char *
 get_data_filename (const struct GNUNET_CONFIGURATION_Handle
@@ -168,7 +172,12 @@ get_data_filename (const struct GNUNET_CONFIGURATION_Handle
 
 
 /**
- * FIXME
+ * Write the pseudonym infomation into a file
+ * @param cfg configuration to use
+ * @param nsid hash code of a pseudonym
+ * @param meta meta data to be written into a file
+ * @param ranking ranking of a pseudonym
+ * @param ns_name name of a pseudonym
  */
 static void
 write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
@@ -188,26 +197,33 @@ write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
           (GNUNET_OK != GNUNET_BIO_write_string(fileW, ns_name)) ||
           (GNUNET_OK != GNUNET_BIO_write_meta_data(fileW, meta)) )
        {
-         GNUNET_BIO_write_close(fileW);
-         GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fileW));
+         (void) GNUNET_BIO_write_close(fileW);
+         GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
          GNUNET_free (fn);
          return;
        }
       if (GNUNET_OK != GNUNET_BIO_write_close(fileW))
        {
-         GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fileW));
+         GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
          GNUNET_free (fn);
          return;
        }
     }
   GNUNET_free (fn);
   /* create entry for pseudonym name in names */
+  /* FIXME: 90% of what this call does is not needed
+     here => refactor code to only create the entry! */
   GNUNET_free_non_null (GNUNET_PSEUDONYM_id_to_name (cfg, nsid));
 }
 
 
 /**
- * FIXME
+ * read the pseudonym infomation from a file
+ * @param cfg configuration to use
+ * @param nsid hash code of a pseudonym
+ * @param meta meta data to be read from a file
+ * @param ranking ranking of a pseudonym
+ * @param ns_name name of a pseudonym
  */
 static int
 read_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
@@ -217,21 +233,40 @@ read_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
 {
   char *fn;
   char *emsg;
-  int ret;
+  struct GNUNET_BIO_ReadHandle *fileR;
+
   fn = get_data_filename (cfg, PS_METADATA_DIR, nsid);
   GNUNET_assert (fn != NULL);
-  struct GNUNET_BIO_ReadHandle *fileR;
   fileR = GNUNET_BIO_read_open(fn);
-  if((NULL != fileR)&&
-     (GNUNET_OK == GNUNET_BIO_read_int32__(fileR, "Read int32 error!", ranking))&&
-     (GNUNET_OK == GNUNET_BIO_read_string(fileR, "Read string error!", ns_name, 200))&&
-     (GNUNET_OK == GNUNET_BIO_read_meta_data(fileR, "Read meta data error!", meta))&&
-     (GNUNET_OK == GNUNET_BIO_read_close(fileR, &emsg)))
-  ret = GNUNET_OK;
-  else
-  ret = GNUNET_SYSERR;
+  if (fileR == NULL)
+    {
+      GNUNET_free (fn);
+      return GNUNET_SYSERR;
+    }
+  emsg = NULL;
+  if ( (GNUNET_OK != GNUNET_BIO_read_int32 (fileR, ranking)) ||
+       (GNUNET_OK != GNUNET_BIO_read_string(fileR, "Read string error!", ns_name, 200)) ||
+       (GNUNET_OK != GNUNET_BIO_read_meta_data(fileR, "Read meta data error!", meta)) )
+    {
+      GNUNET_BIO_read_close(fileR, &emsg);
+      GNUNET_free_non_null (emsg);
+      GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
+      GNUNET_free (fn);
+      return GNUNET_SYSERR;
+    }
+  if (GNUNET_OK != GNUNET_BIO_read_close(fileR, &emsg))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                 _("Failed to parse metadata about pseudonym from file `%s': %s\n"),
+                 fn,
+                 emsg);
+      GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
+      GNUNET_free_non_null (emsg);
+      GNUNET_free (fn);
+      return GNUNET_SYSERR;
+    }
   GNUNET_free (fn);
-  return ret;
+  return GNUNET_OK;
 }
 
 
@@ -266,15 +301,14 @@ GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg,
     {
       if ((meta != NULL) && (name == NULL))
         name = GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
-                                                              EXTRACTOR_TITLE,
-                                                              EXTRACTOR_FILENAME,
-                                                              EXTRACTOR_DESCRIPTION,
-                                                              EXTRACTOR_SUBJECT,
-                                                              EXTRACTOR_PUBLISHER,
-                                                              EXTRACTOR_AUTHOR,
-                                                              EXTRACTOR_COMMENT,
-                                                              EXTRACTOR_SUMMARY,
-                                                              EXTRACTOR_OWNER,
+                                                              EXTRACTOR_METATYPE_TITLE,
+                                                              EXTRACTOR_METATYPE_FILENAME,
+                                                              EXTRACTOR_METATYPE_DESCRIPTION,
+                                                              EXTRACTOR_METATYPE_SUBJECT,
+                                                              EXTRACTOR_METATYPE_PUBLISHER,
+                                                              EXTRACTOR_METATYPE_AUTHOR_NAME,
+                                                              EXTRACTOR_METATYPE_COMMENT,
+                                                              EXTRACTOR_METATYPE_SUMMARY,
                                                               -1);
       if (meta != NULL)
         {
@@ -384,23 +418,23 @@ GNUNET_PSEUDONYM_name_to_id (const struct GNUNET_CONFIGURATION_Handle *cfg,
 
 
 /**
- * FIXME
+ * struct used to list the pseudonym
  */
 struct ListPseudonymClosure
 {
 
   /**
-   * FIXME
+   * iterator over pseudonym
    */
   GNUNET_PSEUDONYM_Iterator iterator;
 
   /**
-   * FIXME
+   * Closure for iterator.
    */
   void *closure;
 
   /**
-   * FIXME
+   * Configuration to use.
    */
   const struct GNUNET_CONFIGURATION_Handle *cfg;
 };
@@ -408,7 +442,9 @@ struct ListPseudonymClosure
 
 
 /**
- * FIXME
+ * the help function to list all available pseudonyms
+ * @param cls point to a struct ListPseudonymClosure
+ * @param fullname name of pseudonym
  */
 static int
 list_pseudonym_helper (void *cls, const char *fullname)
@@ -469,6 +505,7 @@ GNUNET_PSEUDONYM_list_all (const struct GNUNET_CONFIGURATION_Handle *cfg,
   return ret;
 }
 
+
 /**
  * Change the ranking of a pseudonym.
  *
@@ -501,22 +538,6 @@ GNUNET_PSEUDONYM_rank (const struct GNUNET_CONFIGURATION_Handle *cfg,
   return ranking;
 }
 
-/**
- * Insert metadata into existing MD record (passed as cls).
- *
- * @param cls metadata to add to
- * @param type type of entry to insert
- * @param data value of entry to insert
- */
-static int
-merge_meta_helper (void *cls, EXTRACTOR_KeywordType type, const char *data)
-{
-  struct GNUNET_CONTAINER_MetaData *meta = cls;
-  GNUNET_CONTAINER_meta_data_insert (meta, type, data);
-  return GNUNET_OK;
-}
-
-
 
 /**
  * Add a pseudonym to the set of known pseudonyms.
@@ -545,7 +566,7 @@ GNUNET_PSEUDONYM_add (const struct GNUNET_CONFIGURATION_Handle *cfg,
   if ((0 == STAT (fn, &sbuf)) &&
       (GNUNET_OK == read_info (cfg, id, &old, &ranking, &name)))
     {
-      GNUNET_CONTAINER_meta_data_get_contents (meta, &merge_meta_helper, old);
+      GNUNET_CONTAINER_meta_data_merge (old, meta);
       write_pseudonym_info (cfg, id, old, ranking, name);
       GNUNET_CONTAINER_meta_data_destroy (old);
       GNUNET_free_non_null (name);
@@ -559,7 +580,4 @@ GNUNET_PSEUDONYM_add (const struct GNUNET_CONFIGURATION_Handle *cfg,
 }
 
 
-
-
-
 /* end of pseudonym.c */