-help seaspider some more
[oweals/gnunet.git] / src / fs / gnunet-pseudonym.c
index 465cbdd684e992109f297a8b0ce1f0d085bcb11e..38826d1de18ec18992d721994e600bbb5e733025 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
 
      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
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
 #include "platform.h"
 #include "gnunet_fs_service.h"
 
 #include "platform.h"
 #include "gnunet_fs_service.h"
 
-/**
- * -a optiton.
- */
-static unsigned int anonymity;
-
-/**
- * -A option.
- */
-static int start_automate;
-
-/**
- * -e option
- */
-static int stop_automate;
-
 /**
  * -C option
  */
 /**
  * -C option
  */
@@ -66,14 +51,14 @@ static int print_local_only;
 static struct GNUNET_CONTAINER_MetaData *adv_metadata;
 
 /**
 static struct GNUNET_CONTAINER_MetaData *adv_metadata;
 
 /**
- * -p option.
+ * Our block options (-p, -r, -a).
  */
  */
-static unsigned int priority = 365;
+static struct GNUNET_FS_BlockOptions bo = { {0LL}, 1, 365, 1 };
 
 /**
  * -q option given.
  */
 
 /**
  * -q option given.
  */
-static int no_remote_printing; 
+static int no_remote_printing;
 
 /**
  * -r option.
 
 /**
  * -r option.
@@ -102,135 +87,106 @@ static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
 static int ret;
 
 
 static int ret;
 
-static void* 
-progress_cb (void *cls,
-            const struct GNUNET_FS_ProgressInfo *info)
+static void *
+progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info)
 {
   return NULL;
 }
 
 
 static void
 {
   return NULL;
 }
 
 
 static void
-ns_printer (void *cls,
-           const char *name,
-           const GNUNET_HashCode *id)
+ns_printer (void *cls, const char *name, const GNUNET_HashCode * id)
 {
   struct GNUNET_CRYPTO_HashAsciiEncoded enc;
 
   GNUNET_CRYPTO_hash_to_enc (id, &enc);
 {
   struct GNUNET_CRYPTO_HashAsciiEncoded enc;
 
   GNUNET_CRYPTO_hash_to_enc (id, &enc);
-  fprintf (stdout, 
-          "%s (%s)\n",
-          name,
-          (const char*) &enc);
+  FPRINTF (stdout, "%s (%s)\n", name, (const char *) &enc);
 }
 
 
 static int
 }
 
 
 static int
-pseudo_printer (void *cls,
-               const GNUNET_HashCode *
-               pseudonym,
-               const struct
-               GNUNET_CONTAINER_MetaData * md,
-               int rating)
+pseudo_printer (void *cls, const GNUNET_HashCode * pseudonym,
+                const char *name, const char *unique_name,
+                const struct GNUNET_CONTAINER_MetaData *md, int rating)
 {
   char *id;
 {
   char *id;
-
-  id = GNUNET_PSEUDONYM_id_to_name (cfg,
-                                   pseudonym);
-  if (id == NULL)
-    {
-      GNUNET_break (0);
-      return GNUNET_OK;
-    }
-  fprintf (stdout, 
-          "%s (%d):\n",
-          id,
-          rating);
-  GNUNET_CONTAINER_meta_data_iterate (md,
-                                     &EXTRACTOR_meta_data_print, 
-                                     stdout);
-  fprintf (stdout, "\n");
+  char *unique_id;
+  int getinfo_result;
+
+  /* While we get a name from the caller, it might be NULL.
+   * GNUNET_PSEUDONYM_get_info () never returns NULL.
+   */
+  getinfo_result = GNUNET_PSEUDONYM_get_info (cfg, pseudonym,
+      NULL, NULL, &id, NULL);
+  if (getinfo_result != GNUNET_OK)
+  {
+    GNUNET_break (0);
+    return GNUNET_OK;
+  }
+  unique_id = GNUNET_PSEUDONYM_name_uniquify (cfg, pseudonym, id, NULL);
   GNUNET_free (id);
   GNUNET_free (id);
+  FPRINTF (stdout, "%s (%d):\n", unique_id, rating);
+  GNUNET_CONTAINER_meta_data_iterate (md, &EXTRACTOR_meta_data_print, stdout);
+  FPRINTF (stdout, "%s",  "\n");
+  GNUNET_free (unique_id);
   return GNUNET_OK;
 }
 
 
 static void
   return GNUNET_OK;
 }
 
 
 static void
-post_advertising (void *cls,
-                 const struct GNUNET_FS_Uri *uri,
-                 const char *emsg)
+post_advertising (void *cls, const struct GNUNET_FS_Uri *uri, const char *emsg)
 {
   GNUNET_HashCode nsid;
   char *set;
   int delta;
 
   if (emsg != NULL)
 {
   GNUNET_HashCode nsid;
   char *set;
   int delta;
 
   if (emsg != NULL)
-    {
-      fprintf (stderr, "%s", emsg);
-      ret = 1;
-    }
+  {
+    FPRINTF (stderr, "%s", emsg);
+    ret = 1;
+  }
   if (ns != NULL)
   if (ns != NULL)
+  {
+    if (GNUNET_OK != GNUNET_FS_namespace_delete (ns, GNUNET_NO))
+      ret = 1;
+  }
+  if (NULL != rating_change)
+  {
+    set = rating_change;
+    while ((*set != '\0') && (*set != ':'))
+      set++;
+    if (*set != ':')
     {
     {
-      if (GNUNET_OK !=
-         GNUNET_FS_namespace_delete (ns,
-                                     GNUNET_NO))
-       ret = 1;
-    }
-  if (0 != stop_automate)
-    {
-      GNUNET_break (0); // FIXME: not implemented
-    }
-  if (0 != start_automate)
-    {
-      GNUNET_break (0); // FIXME: not implemented
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Invalid argument `%s'\n"),
+                  rating_change);
     }
     }
-  if (NULL != rating_change)
+    else
     {
     {
-      set = rating_change;
-      while ((*set != '\0') && (*set != ':'))
-        set++;
-      if (*set != ':')
-       {
-         GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                     _("Invalid argument `%s'\n"),
-                     rating_change);
-       }
+      *set = '\0';
+      delta = strtol (&set[1], NULL,    /* no error handling yet */
+                      10);
+      if (GNUNET_OK == GNUNET_PSEUDONYM_name_to_id (cfg, rating_change, &nsid))
+      {
+        (void) GNUNET_PSEUDONYM_rank (cfg, &nsid, delta);
+      }
       else
       else
-       {
-         *set = '\0';
-         delta = strtol (&set[1], NULL, /* no error handling yet */
-                          10);
-         if (GNUNET_OK ==
-             GNUNET_PSEUDONYM_name_to_id (cfg,
-                                          rating_change,
-                                          &nsid))
-           {
-             (void) GNUNET_PSEUDONYM_rank (cfg,
-                                           &nsid,
-                                           delta);           
-           }
-         else
-           {
-             GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                         _("Namespace `%s' unknown.\n"),
-                         rating_change);
-           }
-       }
-      GNUNET_free (rating_change);
-      rating_change = NULL;
+      {
+        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
+                    ("Namespace `%s' unknown. Make sure you specify its numeric suffix, if any.\n"),
+                    rating_change);
+      }
     }
     }
+    GNUNET_free (rating_change);
+    rating_change = NULL;
+  }
   if (0 != print_local_only)
   if (0 != print_local_only)
-    {
-      GNUNET_FS_namespace_list (h,
-                               &ns_printer, 
-                               NULL);
-    }  
+  {
+    GNUNET_FS_namespace_list (h, &ns_printer, NULL);
+  }
   else if (0 == no_remote_printing)
   else if (0 == no_remote_printing)
-    {
-      GNUNET_PSEUDONYM_list_all (cfg,
-                                &pseudo_printer,
-                                NULL);
-    }
+  {
+    GNUNET_PSEUDONYM_list_all (cfg, &pseudo_printer, NULL);
+  }
   GNUNET_FS_stop (h);
 }
 
   GNUNET_FS_stop (h);
 }
 
@@ -239,96 +195,77 @@ post_advertising (void *cls,
  * Main function that will be run by the scheduler.
  *
  * @param cls closure
  * Main function that will be run by the scheduler.
  *
  * @param cls closure
- * @param sched the scheduler to use
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
  * @param c configuration
  */
 static void
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
  * @param c configuration
  */
 static void
-run (void *cls,
-     struct GNUNET_SCHEDULER_Handle *sched,
-     char *const *args,
-     const char *cfgfile,
+run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
-  struct GNUNET_TIME_Absolute expiration;
   char *emsg;
 
   cfg = c;
   char *emsg;
 
   cfg = c;
-  h = GNUNET_FS_start (sched,
-                      cfg,
-                      "gnunet-pseudonym",
-                      &progress_cb,
-                      NULL,
-                      GNUNET_FS_FLAGS_NONE,
-                      GNUNET_FS_OPTIONS_END);
+  h = GNUNET_FS_start (cfg, "gnunet-pseudonym", &progress_cb, NULL,
+                       GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END);
   if (NULL != delete_ns)
   if (NULL != delete_ns)
+  {
+    ns = GNUNET_FS_namespace_create (h, delete_ns);
+    if (ns == NULL)
     {
     {
-      ns = GNUNET_FS_namespace_create (h, delete_ns);
-      if (ns == NULL)
-       {
-         ret = 1;
-       }
-      else
-       {
-         if (GNUNET_OK !=
-             GNUNET_FS_namespace_delete (ns,
-                                         GNUNET_YES))
-           ret = 1;
-         ns = NULL;
-       }
+      ret = 1;
+    }
+    else
+    {
+      if (GNUNET_OK != GNUNET_FS_namespace_delete (ns, GNUNET_YES))
+        ret = 1;
+      ns = NULL;
     }
     }
+  }
   if (NULL != create_ns)
   if (NULL != create_ns)
+  {
+    ns = GNUNET_FS_namespace_create (h, create_ns);
+    if (ns == NULL)
+    {
+      ret = 1;
+    }
+    else
     {
     {
-      ns = GNUNET_FS_namespace_create (h, create_ns);
-      if (ns == NULL)
-       {
-         ret = 1;
-       }
+      if (NULL != root_identifier)
+      {
+        if (ksk_uri == NULL)
+        {
+          emsg = NULL;
+          ksk_uri = GNUNET_FS_uri_parse ("gnunet://fs/ksk/namespace", &emsg);
+          GNUNET_assert (NULL == emsg);
+        }
+        GNUNET_FS_namespace_advertise (h, ksk_uri, ns, adv_metadata, &bo,
+                                       root_identifier, &post_advertising,
+                                       NULL);
+        return;
+      }
       else
       else
-       {
-         if (NULL != root_identifier)
-           {
-             expiration = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_YEARS);
-             if (ksk_uri == NULL)
-               {
-                 emsg = NULL;
-                 ksk_uri = GNUNET_FS_uri_parse ("gnunet://fs/ksk/namespace", &emsg);
-                 GNUNET_assert (NULL == emsg);
-               }
-             GNUNET_FS_namespace_advertise (h,
-                                            ksk_uri,
-                                            ns,
-                                            adv_metadata,
-                                            anonymity,
-                                            priority,                                       
-                                            expiration,
-                                            root_identifier,
-                                            &post_advertising,
-                                            NULL);
-             return;
-           }
-         else
-           {
-             if (ksk_uri != NULL)
-               fprintf (stderr, _("Option `%s' ignored\n"), "-k");   
-           }
-       }
+      {
+        if (ksk_uri != NULL)
+          FPRINTF (stderr, _("Option `%s' ignored\n"), "-k");
+      }
     }
     }
+  }
   else
   else
-    {
-      if (root_identifier != NULL) 
-       fprintf (stderr, _("Option `%s' ignored\n"), "-r");
-      if (ksk_uri != NULL)
-       fprintf (stderr, _("Option `%s' ignored\n"), "-k");   
-    }    
-    
+  {
+    if (root_identifier != NULL)
+      FPRINTF (stderr, _("Option `%s' ignored\n"), "-r");
+    if (ksk_uri != NULL)
+      FPRINTF (stderr, _("Option `%s' ignored\n"), "-k");
+  }
+
   post_advertising (NULL, NULL, NULL);
 }
 
 
 /**
   post_advertising (NULL, NULL, NULL);
 }
 
 
 /**
- * The main function to inspect GNUnet directories.
+ * The main function to manipulate GNUnet pseudonyms (and publish
+ * to namespaces).
  *
  * @param argc number of arguments from the command line
  * @param argv command line arguments
  *
  * @param argc number of arguments from the command line
  * @param argv command line arguments
@@ -340,25 +277,16 @@ main (int argc, char *const *argv)
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
     {'a', "anonymity", "LEVEL",
      gettext_noop ("set the desired LEVEL of sender-anonymity"),
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
     {'a', "anonymity", "LEVEL",
      gettext_noop ("set the desired LEVEL of sender-anonymity"),
-     1, &GNUNET_GETOPT_set_uint, &anonymity},
-    {'A', "automate", NULL,
-     gettext_noop ("start a collection"),
-     0, &GNUNET_GETOPT_set_one, &start_automate},
+     1, &GNUNET_GETOPT_set_uint, &bo.anonymity_level},
     {'C', "create", "NAME",
     {'C', "create", "NAME",
-     gettext_noop
-     ("create or advertise namespace NAME"),
+     gettext_noop ("create or advertise namespace NAME"),
      1, &GNUNET_GETOPT_set_string, &create_ns},
     {'D', "delete", "NAME",
      1, &GNUNET_GETOPT_set_string, &create_ns},
     {'D', "delete", "NAME",
-     gettext_noop
-     ("delete namespace NAME "),
+     gettext_noop ("delete namespace NAME "),
      1, &GNUNET_GETOPT_set_string, &delete_ns},
      1, &GNUNET_GETOPT_set_string, &delete_ns},
-    {'e', "end", NULL,
-     gettext_noop ("end current collection"),
-     0, &GNUNET_GETOPT_set_one, &stop_automate},
     {'k', "keyword", "VALUE",
     {'k', "keyword", "VALUE",
-     gettext_noop
-     ("add an additional keyword for the advertisment"
-      " (this option can be specified multiple times)"),
+     gettext_noop ("add an additional keyword for the advertisment"
+                   " (this option can be specified multiple times)"),
      1, &GNUNET_FS_getopt_set_keywords, &ksk_uri},
     {'m', "meta", "TYPE:VALUE",
      gettext_noop ("set the meta-data for the given TYPE to the given VALUE"),
      1, &GNUNET_FS_getopt_set_keywords, &ksk_uri},
     {'m', "meta", "TYPE:VALUE",
      gettext_noop ("set the meta-data for the given TYPE to the given VALUE"),
@@ -368,26 +296,26 @@ main (int argc, char *const *argv)
      0, &GNUNET_GETOPT_set_one, &print_local_only},
     {'p', "priority", "PRIORITY",
      gettext_noop ("use the given PRIORITY for the advertisments"),
      0, &GNUNET_GETOPT_set_one, &print_local_only},
     {'p', "priority", "PRIORITY",
      gettext_noop ("use the given PRIORITY for the advertisments"),
-     1, &GNUNET_GETOPT_set_uint, &priority},
+     1, &GNUNET_GETOPT_set_uint, &bo.content_priority},
     {'q', "quiet", NULL,
      gettext_noop ("do not print names of remote namespaces"),
      0, &GNUNET_GETOPT_set_one, &no_remote_printing},
     {'q', "quiet", NULL,
      gettext_noop ("do not print names of remote namespaces"),
      0, &GNUNET_GETOPT_set_one, &no_remote_printing},
-    {'r', "root", "ID",
-     gettext_noop
-     ("specify ID of the root of the namespace"),
+    {'r', "replication", "LEVEL",
+     gettext_noop ("set the desired replication LEVEL"),
+     1, &GNUNET_GETOPT_set_uint, &bo.replication_level},
+    {'R', "root", "ID",
+     gettext_noop ("specify ID of the root of the namespace"),
      1, &GNUNET_GETOPT_set_string, &root_identifier},
     {'s', "set-rating", "ID:VALUE",
      1, &GNUNET_GETOPT_set_string, &root_identifier},
     {'s', "set-rating", "ID:VALUE",
-     gettext_noop
-     ("change rating of namespace ID by VALUE"),
+     gettext_noop ("change rating of namespace ID by VALUE"),
      1, &GNUNET_GETOPT_set_string, &rating_change},
     GNUNET_GETOPT_OPTION_END
   };
      1, &GNUNET_GETOPT_set_string, &rating_change},
     GNUNET_GETOPT_OPTION_END
   };
+  bo.expiration_time =
+      GNUNET_FS_year_to_time (GNUNET_FS_get_current_year () + 2);
   return (GNUNET_OK ==
   return (GNUNET_OK ==
-          GNUNET_PROGRAM_run (argc,
-                              argv,
-                              "gnunet-pseudonym",
-                              gettext_noop
-                              ("Manage GNUnet pseudonyms."),
+          GNUNET_PROGRAM_run (argc, argv, "gnunet-pseudonym [OPTIONS]",
+                              gettext_noop ("Manage GNUnet pseudonyms."),
                               options, &run, NULL)) ? ret : 1;
 }
 
                               options, &run, NULL)) ? ret : 1;
 }