indentation fixes
[oweals/gnunet.git] / src / dht / gnunet-dht-put.c
index db3f11811c6124628ac06391b5540c915b356fba..1f3df1d351856fa173254024772bef88f754cc9a 100644 (file)
@@ -1,10 +1,10 @@
 /*
      This file is part of GNUnet.
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2004, 2005, 2006, 2007, 2009 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2001, 2002, 2004, 2005, 2006, 2007, 2009 GNUnet e.V.
 
      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
@@ -14,8 +14,8 @@
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 /**
  * @file dht/gnunet-dht-put.c
 */
 /**
  * @file dht/gnunet-dht-put.c
 static unsigned int query_type;
 
 /**
 static unsigned int query_type;
 
 /**
- * The key for the query
+ * The key used in the DHT
  */
  */
-static char *query_key;
+struct GNUNET_HashCode key;
 
 /**
 
 /**
- * User supplied timeout value
+ * The key for the query
  */
  */
-static unsigned long long timeout_request = 5;
+static char *query_key;
 
 /**
  * User supplied expiration value
  */
 static unsigned long long expiration_seconds = 3600;
 
 
 /**
  * User supplied expiration value
  */
 static unsigned long long expiration_seconds = 3600;
 
+/**
+ * Desired replication level.
+ */
+static unsigned int replication = 5;
+
 /**
  * Be verbose
  */
 static int verbose;
 
 /**
 /**
  * Be verbose
  */
 static int verbose;
 
 /**
- * Handle to the DHT
+ * Use DHT demultixplex_everywhere
  */
  */
-static struct GNUNET_DHT_Handle *dht_handle;
+static int demultixplex_everywhere;
 
 /**
 
 /**
- * Global handle of the scheduler
+ * Handle to the DHT
  */
  */
-static struct GNUNET_SCHEDULER_Handle *sched;
+static struct GNUNET_DHT_Handle *dht_handle;
+
 
 /**
  * Global handle of the configuration
 
 /**
  * Global handle of the configuration
@@ -76,98 +82,105 @@ static int ret;
  */
 static char *data;
 
  */
 static char *data;
 
+
 static void
 static void
-shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+shutdown_task (void *cls)
 {
 {
-
-  if (dht_handle != NULL)
+  if (NULL != dht_handle)
+  {
     GNUNET_DHT_disconnect (dht_handle);
     GNUNET_DHT_disconnect (dht_handle);
-
-  dht_handle = NULL;
+    dht_handle = NULL;
+  }
 }
 
 }
 
+
 /**
  * Signature of the main function of a task.
  *
  * @param cls closure
 /**
  * Signature of the main function of a task.
  *
  * @param cls closure
- * @param tc context information (why was this task triggered now)
+ * @param success #GNUNET_OK if the PUT was transmitted,
+ *                #GNUNET_NO on timeout,
+ *                #GNUNET_SYSERR on disconnect from service
+ *                after the PUT message was transmitted
+ *                (so we don't know if it was received or not)
  */
  */
-void
-message_sent_cont (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+static void
+message_sent_cont (void *cls, int success)
 {
 {
-  if (tc->reason == GNUNET_SCHEDULER_REASON_TIMEOUT)
-    {
-      if (verbose)
-        fprintf (stderr,
-                 "Failed to send put request to service, quitting.\n");
-      ret = 1;
-    }
-  else
+  if (verbose)
+  {
+    switch (success)
     {
     {
-      if (verbose)
-        fprintf (stderr, "PUT request sent!\n");
+    case GNUNET_OK:
+      FPRINTF (stderr, "%s `%s'!\n",  _("PUT request sent with key"), GNUNET_h2s_full(&key));
+      break;
+    case GNUNET_NO:
+      FPRINTF (stderr, "%s",  _("Timeout sending PUT request!\n"));
+      break;
+    case GNUNET_SYSERR:
+      FPRINTF (stderr, "%s",  _("PUT request not confirmed!\n"));
+      break;
+    default:
+      GNUNET_break (0);
+      break;
     }
     }
-
-  GNUNET_SCHEDULER_add_now (sched, &shutdown_task, NULL);
+  }
+  GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
 }
 
 }
 
+
 /**
  * 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 s 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
 run (void *cls,
  * @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 *s,
      char *const *args,
      char *const *args,
-     const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c)
+     const char *cfgfile,
+     const struct GNUNET_CONFIGURATION_Handle *c)
 {
 {
-  struct GNUNET_TIME_Relative timeout;
   struct GNUNET_TIME_Absolute expiration;
   struct GNUNET_TIME_Absolute expiration;
-  GNUNET_HashCode key;
-  sched = s;
-  cfg = c;
 
 
-  if ((query_key == NULL) || (data == NULL))
-    {
-      if (verbose)
-        fprintf (stderr, "Must provide KEY and DATA for DHT put!\n");
-      ret = 1;
-      return;
-    }
-
-  dht_handle = GNUNET_DHT_connect (sched, cfg, 1);
-
-  if (dht_handle == NULL)
-    {
-      if (verbose)
-        fprintf (stderr, "Couldn't connect to DHT service!\n");
-      ret = 1;
-      return;
-    }
-  else if (verbose)
-    fprintf (stderr, "Connected to DHT service!\n");
+  cfg = c;
+  if ((NULL == query_key) || (NULL == data))
+  {
+    FPRINTF (stderr, "%s",  _("Must provide KEY and DATA for DHT put!\n"));
+    ret = 1;
+    return;
+  }
+
+  if (NULL == (dht_handle = GNUNET_DHT_connect (cfg, 1)))
+  {
+    FPRINTF (stderr, _("Could not connect to %s service!\n"), "DHT");
+    ret = 1;
+    return;
+  }
+  if (GNUNET_BLOCK_TYPE_ANY == query_type)      /* Type of data not set */
+    query_type = GNUNET_BLOCK_TYPE_TEST;
 
   GNUNET_CRYPTO_hash (query_key, strlen (query_key), &key);
 
 
   GNUNET_CRYPTO_hash (query_key, strlen (query_key), &key);
 
-  timeout =
-    GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, timeout_request);
   expiration =
   expiration =
-    GNUNET_TIME_relative_to_absolute (GNUNET_TIME_relative_multiply
-                                      (GNUNET_TIME_UNIT_SECONDS,
-                                       expiration_seconds));
-
+      GNUNET_TIME_relative_to_absolute (GNUNET_TIME_relative_multiply
+                                        (GNUNET_TIME_UNIT_SECONDS,
+                                         expiration_seconds));
   if (verbose)
   if (verbose)
-    fprintf (stderr, "Issuing put request for `%s' with data `%s'!\n",
+    FPRINTF (stderr, _("Issuing put request for `%s' with data `%s'!\n"),
              query_key, data);
              query_key, data);
-
-  GNUNET_DHT_put (dht_handle, &key, query_type, strlen (data), data,
-                  expiration, timeout, &message_sent_cont, NULL);
-
+  GNUNET_DHT_put (dht_handle,
+                  &key,
+                  replication,
+                  (demultixplex_everywhere) ? GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE : GNUNET_DHT_RO_NONE,
+                  query_type,
+                  strlen (data),
+                  data,
+                  expiration,
+                  &message_sent_cont,
+                  NULL);
 }
 
 
 }
 
 
@@ -175,21 +188,24 @@ run (void *cls,
  * gnunet-dht-put command line options
  */
 static struct GNUNET_GETOPT_CommandLineOption options[] = {
  * gnunet-dht-put command line options
  */
 static struct GNUNET_GETOPT_CommandLineOption options[] = {
-  {'k', "key", "KEY",
-   gettext_noop ("the query key"),
-   1, &GNUNET_GETOPT_set_string, &query_key},
   {'d', "data", "DATA",
    gettext_noop ("the data to insert under the key"),
    1, &GNUNET_GETOPT_set_string, &data},
   {'d', "data", "DATA",
    gettext_noop ("the data to insert under the key"),
    1, &GNUNET_GETOPT_set_string, &data},
-  {'t', "type", "TYPE",
-   gettext_noop ("the type to insert data as"),
-   1, &GNUNET_GETOPT_set_uint, &query_type},
-  {'T', "timeout", "TIMEOUT",
-   gettext_noop ("how long to execute this query before giving up?"),
-   1, &GNUNET_GETOPT_set_ulong, &timeout_request},
   {'e', "expiration", "EXPIRATION",
    gettext_noop ("how long to store this entry in the dht (in seconds)"),
    1, &GNUNET_GETOPT_set_ulong, &expiration_seconds},
   {'e', "expiration", "EXPIRATION",
    gettext_noop ("how long to store this entry in the dht (in seconds)"),
    1, &GNUNET_GETOPT_set_ulong, &expiration_seconds},
+  {'k', "key", "KEY",
+   gettext_noop ("the query key"),
+   1, &GNUNET_GETOPT_set_string, &query_key},
+  {'x', "demultiplex", NULL,
+   gettext_noop ("use DHT's demultiplex everywhere option"),
+   0, &GNUNET_GETOPT_set_one, &demultixplex_everywhere},
+  {'r', "replication", "LEVEL",
+   gettext_noop ("how many replicas to create"),
+   1, &GNUNET_GETOPT_set_uint, &replication},
+  {'t', "type", "TYPE",
+   gettext_noop ("the type to insert data as"),
+   1, &GNUNET_GETOPT_set_uint, &query_type},
   {'V', "verbose", NULL,
    gettext_noop ("be verbose (print progress information)"),
    0, &GNUNET_GETOPT_set_one, &verbose},
   {'V', "verbose", NULL,
    gettext_noop ("be verbose (print progress information)"),
    0, &GNUNET_GETOPT_set_one, &verbose},
@@ -207,11 +223,14 @@ static struct GNUNET_GETOPT_CommandLineOption options[] = {
 int
 main (int argc, char *const *argv)
 {
 int
 main (int argc, char *const *argv)
 {
+  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv,
+                                                 &argc, &argv))
+    return 2;
   return (GNUNET_OK ==
   return (GNUNET_OK ==
-          GNUNET_PROGRAM_run (argc,
-                              argv,
-                              "gnunet-dht-put",
+          GNUNET_PROGRAM_run (argc, argv, "gnunet-dht-put",
                               gettext_noop
                               ("Issue a PUT request to the GNUnet DHT insert DATA under KEY."),
                               options, &run, NULL)) ? ret : 1;
 }
                               gettext_noop
                               ("Issue a PUT request to the GNUnet DHT insert DATA under KEY."),
                               options, &run, NULL)) ? ret : 1;
 }
+
+/* end of gnunet-dht-put.c */