LRN: fix gnuent_fs_Start arguments
[oweals/gnunet.git] / src / fs / fs_getopt.c
index 8afe498523c7c390ba0a7e5a7becf9087d5b0d0c..b50d0624bfe35cf4268d3baef83d0539fca66ad7 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
  * @author Igor Wronsky, Christian Grothoff
  */
 #include "platform.h"
-#include "gnunet_fs_lib.h"
+#include "gnunet_fs_service.h"
+#include "fs.h"
 
-
-
-/* ******************** command-line option parsing API *********************** */
+/* ******************** command-line option parsing API ******************** */
 
 /**
  * Command-line option parser function that allows the user
  * @return GNUNET_OK on success
  */
 int
-GNUNET_FS_getopt_configure_set_keywords (GNUNET_GETOPT_CommandLineProcessorContext* ctx, 
-                                        void *scls,
-                                        const char *option,
-                                        const char *value)
+GNUNET_FS_getopt_set_keywords (struct GNUNET_GETOPT_CommandLineProcessorContext
+                               *ctx, void *scls, const char *option,
+                               const char *value)
 {
   struct GNUNET_FS_Uri **uri = scls;
   struct GNUNET_FS_Uri *u = *uri;
@@ -54,60 +52,58 @@ GNUNET_FS_getopt_configure_set_keywords (GNUNET_GETOPT_CommandLineProcessorConte
   size_t slen;
 
   if (u == NULL)
-    {
-      u = GNUNET_malloc (sizeof (struct GNUNET_ECRS_URI));
-      *uri = u;
-      u->type = ksk;
-      u->data.ksk.keywordCount = 0;
-      u->data.ksk.keywords = NULL;
-    }
+  {
+    u = GNUNET_malloc (sizeof (struct GNUNET_FS_Uri));
+    *uri = u;
+    u->type = ksk;
+    u->data.ksk.keywordCount = 0;
+    u->data.ksk.keywords = NULL;
+  }
   else
-    {
-      GNUNET_assert (u->type == ksk);
-    }
+  {
+    GNUNET_assert (u->type == ksk);
+  }
   slen = strlen (value);
   if (slen == 0)
     return GNUNET_SYSERR;       /* cannot be empty */
   if (value[0] == '+')
+  {
+    /* simply preserve the "mandatory" flag */
+    if (slen < 2)
+      return GNUNET_SYSERR;     /* empty keywords not allowed */
+    if ((value[1] == '"') && (slen > 3) && (value[slen - 1] == '"'))
+    {
+      /* remove the quotes, keep the '+' */
+      val = GNUNET_malloc (slen - 1);
+      val[0] = '+';
+      memcpy (&val[1], &value[2], slen - 3);
+      val[slen - 2] = '\0';
+    }
+    else
     {
-      /* simply preserve the "mandatory" flag */
-      if (slen < 2)
-        return GNUNET_SYSERR;   /* empty keywords not allowed */
-      if ((value[1] == '"') && (slen > 3) && (value[slen - 1] == '"'))
-        {
-          /* remove the quotes, keep the '+' */
-          val = GNUNET_malloc (slen - 1);
-          val[0] = '+';
-          memcpy (&val[1], &value[2], slen - 3);
-          val[slen - 2] = '\0';
-        }
-      else
-        {
-          /* no quotes, just keep the '+' */
-          val = GNUNET_strdup (value);
-        }
+      /* no quotes, just keep the '+' */
+      val = GNUNET_strdup (value);
     }
+  }
   else
+  {
+    if ((value[0] == '"') && (slen > 2) && (value[slen - 1] == '"'))
     {
-      if ((value[0] == '"') && (slen > 2) && (value[slen - 1] == '"'))
-        {
-          /* remove the quotes, add a space */
-          val = GNUNET_malloc (slen);
-          val[0] = ' ';
-          memcpy (&val[1], &value[1], slen - 2);
-          val[slen - 1] = '\0';
-        }
-      else
-        {
-          /* add a space to indicate "not mandatory" */
-          val = GNUNET_malloc (slen + 2);
-          strcpy (val, " ");
-          strcat (val, value);
-        }
+      /* remove the quotes, add a space */
+      val = GNUNET_malloc (slen);
+      val[0] = ' ';
+      memcpy (&val[1], &value[1], slen - 2);
+      val[slen - 1] = '\0';
     }
-  GNUNET_array_grow (u->data.ksk.keywords,
-                     u->data.ksk.keywordCount, u->data.ksk.keywordCount + 1);
-  u->data.ksk.keywords[u->data.ksk.keywordCount - 1] = val;
+    else
+    {
+      /* add a space to indicate "not mandatory" */
+      val = GNUNET_malloc (slen + 2);
+      strcpy (val, " ");
+      strcat (val, value);
+    }
+  }
+  GNUNET_array_append (u->data.ksk.keywords, u->data.ksk.keywordCount, val);
   return GNUNET_OK;
 }
 
@@ -125,14 +121,12 @@ GNUNET_FS_getopt_configure_set_keywords (GNUNET_GETOPT_CommandLineProcessorConte
  * @return GNUNET_OK on success
  */
 int
-GNUNET_FS_getopt_configure_set_metadata (GNUNET_GETOPT_CommandLineProcessorContext* ctx, 
-                                        void *scls,
-                                        const char *option,
-                                        const char *value)
-
+GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorContext
+                               *ctx, void *scls, const char *option,
+                               const char *value)
 {
   struct GNUNET_CONTAINER_MetaData **mm = scls;
-  EXTRACTOR_KeywordType type;
+  enum EXTRACTOR_MetaType type;
   const char *typename;
   const char *typename_i18n;
   struct GNUNET_CONTAINER_MetaData *meta;
@@ -140,52 +134,63 @@ GNUNET_FS_getopt_configure_set_metadata (GNUNET_GETOPT_CommandLineProcessorConte
 
   meta = *mm;
   if (meta == NULL)
-    {
-      meta = GNUNET_CONTAINER_meta_data_create ();
-      *mm = meta;
-    }
+  {
+    meta = GNUNET_CONTAINER_meta_data_create ();
+    *mm = meta;
+  }
 
-  tmp = GNUNET_STRINGS_to_utf8 (NULL, value, strlen (value),
 #if ENABLE_NLS
-                               nl_langinfo (CODESET)
+  tmp = GNUNET_STRINGS_to_utf8 (value, strlen (value), nl_langinfo (CODESET));
 #else
-                               "utf-8"
+  tmp = GNUNET_STRINGS_to_utf8 (value, strlen (value), "utf-8");
 #endif
-    );
-  type = EXTRACTOR_getHighestKeywordTypeNumber ();
+  type = EXTRACTOR_metatype_get_max ();
   while (type > 0)
+  {
+    type--;
+    typename = EXTRACTOR_metatype_to_string (type);
+    typename_i18n = dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, typename);
+    if ((strlen (tmp) >= strlen (typename) + 1) &&
+        (tmp[strlen (typename)] == ':') &&
+        (0 == strncmp (typename, tmp, strlen (typename))))
     {
-      type--;
-      typename = EXTRACTOR_getKeywordTypeAsString (type);
-      typename_i18n = dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, typename);
-      if ((strlen (tmp) >= strlen (typename) + 1) &&
-          (tmp[strlen (typename)] == ':') &&
-          (0 == strncmp (typename, tmp, strlen (typename))))
-        {
-          GNUNET_CONTAINER_meta_data_insert (meta, type, &tmp[strlen (typename) + 1]);
-          GNUNET_free (tmp);
-          tmp = NULL;
-          break;
-        }
-      if ((strlen (tmp) >= strlen (typename_i18n) + 1) &&
-          (tmp[strlen (typename_i18n)] == ':') &&
-          (0 == strncmp (typename_i18n, tmp, strlen (typename_i18n))))
-        {
-          GNUNET_CONTAINER_meta_data_insert (meta, type,
-                                            &tmp[strlen (typename_i18n) + 1]);
-          GNUNET_free (tmp);
-          tmp = NULL;
-          break;
-        }
+      GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>", type,
+                                         EXTRACTOR_METAFORMAT_UTF8,
+                                         "text/plain",
+                                         &tmp[strlen (typename) + 1],
+                                         strlen (&tmp[strlen (typename) + 1]) +
+                                         1);
+      GNUNET_free (tmp);
+      tmp = NULL;
+      break;
     }
-  if (tmp != NULL)
+    if ((strlen (tmp) >= strlen (typename_i18n) + 1) &&
+        (tmp[strlen (typename_i18n)] == ':') &&
+        (0 == strncmp (typename_i18n, tmp, strlen (typename_i18n))))
     {
-      GNUNET_CONTAINER_meta_data_insert (meta, EXTRACTOR_UNKNOWN, tmp);
+      GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>", type,
+                                         EXTRACTOR_METAFORMAT_UTF8,
+                                         "text/plain",
+                                         &tmp[strlen (typename_i18n) + 1],
+                                         strlen (&tmp
+                                                 [strlen (typename_i18n) + 1]) +
+                                         1);
       GNUNET_free (tmp);
-      printf (_
-              ("Unknown metadata type in metadata option `%s'.  Using metadata type `unknown' instead.\n"),
-              value);
+      tmp = NULL;
+      break;
     }
+  }
+  if (tmp != NULL)
+  {
+    GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>",
+                                       EXTRACTOR_METATYPE_UNKNOWN,
+                                       EXTRACTOR_METAFORMAT_UTF8, "text/plain",
+                                       tmp, strlen (tmp) + 1);
+    GNUNET_free (tmp);
+    printf (_
+            ("Unknown metadata type in metadata option `%s'.  Using metadata type `unknown' instead.\n"),
+            value);
+  }
   return GNUNET_OK;
 }