From 08c12db845272dac9d2289ad4811199bd1e1be5a Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 30 Mar 2010 11:17:50 +0000 Subject: work on namespace stuff --- src/core/core.h | 2 +- src/fs/fs_publish.c | 2 +- src/fs/fs_search.c | 2 +- src/fs/fs_test_lib_data.conf | 4 +- src/fs/gnunet-pseudonym.c | 248 +++++++++++++++++++++++++++++++++++- src/fs/gnunet-service-fs.c | 16 ++- src/fs/test_fs_download.c | 2 +- src/fs/test_fs_namespace.c | 2 +- src/fs/test_fs_namespace_data.conf | 4 +- src/fs/test_fs_search.c | 2 +- src/fs/test_fs_search_data.conf | 4 +- src/fs/test_fs_test_lib.c | 2 +- src/fs/test_gnunet_service_fs_p2p.c | 2 +- 13 files changed, 273 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/core/core.h b/src/core/core.h index 45d138140..ea2925797 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -29,7 +29,7 @@ /** * General core debugging. */ -#define DEBUG_CORE GNUNET_YES +#define DEBUG_CORE GNUNET_NO /** * Debugging interaction core-clients. diff --git a/src/fs/fs_publish.c b/src/fs/fs_publish.c index dbecdfab7..18b064698 100644 --- a/src/fs/fs_publish.c +++ b/src/fs/fs_publish.c @@ -40,7 +40,7 @@ #include "fs.h" #include "fs_tree.h" -#define DEBUG_PUBLISH GNUNET_YES +#define DEBUG_PUBLISH GNUNET_NO /** * Main function that performs the upload. diff --git a/src/fs/fs_search.c b/src/fs/fs_search.c index 98168c3f4..596ea0c63 100644 --- a/src/fs/fs_search.c +++ b/src/fs/fs_search.c @@ -38,7 +38,7 @@ #include "gnunet_protocols.h" #include "fs.h" -#define DEBUG_SEARCH GNUNET_YES +#define DEBUG_SEARCH GNUNET_NO diff --git a/src/fs/fs_test_lib_data.conf b/src/fs/fs_test_lib_data.conf index 5d2f60527..b2fbd5ee0 100644 --- a/src/fs/fs_test_lib_data.conf +++ b/src/fs/fs_test_lib_data.conf @@ -42,14 +42,14 @@ PORT = 43470 HOSTNAME = localhost #TOTAL_QUOTA_IN = 3932160 #TOTAL_QUOTA_OUT = 3932160 -DEBUG = YES +#DEBUG = YES #PREFIX = valgrind --tool=memcheck --leak-check=yes #BINARY = /home/grothoff/bin/gnunet-service-core [fs] PORT = 43471 HOSTNAME = localhost -DEBUG = YES +#DEBUG = YES #PREFIX = valgrind --tool=memcheck --leak-check=yes #BINARY = /home/grothoff/bin/gnunet-service-fs #PREFIX = xterm -e gdb -x cmd --args diff --git a/src/fs/gnunet-pseudonym.c b/src/fs/gnunet-pseudonym.c index e443d1e32..2d35e8e8c 100644 --- a/src/fs/gnunet-pseudonym.c +++ b/src/fs/gnunet-pseudonym.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2001, 2002, 2004, 2005, 2006, 2007, 2009 Christian Grothoff (and other contributing authors) + (C) 2001, 2002, 2004, 2005, 2006, 2007, 2009, 2010 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -25,8 +25,152 @@ #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 + */ +static char *create_ns; + +/** + * -D option + */ +static char *delete_ns; + +/** + * -k option + */ +static struct GNUNET_FS_Uri *ksk_uri; + +/** + * -l option. + */ +static int print_local_only; + +/** + * -m option. + */ +static struct GNUNET_CONTAINER_MetaData *adv_metadata; + +/** + * -n option. + */ +static int no_advertising; + +/** + * -p option. + */ +static unsigned int priority = 365; + +/** + * -q option given. + */ +static int no_remote_printing; + +/** + * -r option. + */ +static char *root_identifier; + +/** + * -s option. + */ +static char *rating_change; + +/** + * Handle to fs service. + */ +static struct GNUNET_FS_Handle *h; + +/** + * Namespace we are looking at. + */ +static struct GNUNET_FS_Namespace *ns; + + static int ret; +static void* +progress_cb (void *cls, + const struct GNUNET_FS_ProgressInfo *info) +{ + return NULL; +} + + +static void +ns_printer (void *cls, + const char *name, + const GNUNET_HashCode *id) +{ + struct GNUNET_CRYPTO_HashAsciiEncoded enc; + + GNUNET_CRYPTO_hash_to_enc (id, &enc); + fprintf (stdout, + "%s (%s)\n", + name, + (const char*) &enc); +} + + +static void +post_advertising (void *cls, + const struct GNUNET_FS_Uri *uri, + const char *emsg) +{ + if (emsg != NULL) + { + fprintf (stderr, "%s", emsg); + ret = 1; + } + if (ns != NULL) + { + 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 + } + if (NULL != rating_change) + { + GNUNET_break (0); // FIXME: not implemented + } + if (0 != print_local_only) + { + GNUNET_FS_namespace_list (h, + &ns_printer, + NULL); + } + else if (0 == no_remote_printing) + { + GNUNET_break (0); // FIXME: not implemented + } + /* FIXME: is this OK here, or do we need + for completion of previous requests? */ + GNUNET_FS_stop (h); +} + + /** * Main function that will be run by the scheduler. * @@ -43,15 +187,111 @@ run (void *cls, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { - // FIXME -} + struct GNUNET_FS_Uri *ns_uri; + struct GNUNET_TIME_Absolute expiration; + h = GNUNET_FS_start (sched, + cfg, + "gnunet-pseudonym", + &progress_cb, + NULL, + GNUNET_FS_FLAGS_NONE); + if (NULL != delete_ns) + { + 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; + } + } + if (NULL != create_ns) + { + ns = GNUNET_FS_namespace_create (h, create_ns); + if (ns == NULL) + { + ret = 1; + } + else + { + if (0 == no_advertising) + { + GNUNET_break (0); // FIXME: not implemented + ns_uri = NULL; // FIXME!! + expiration = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_YEARS); + GNUNET_FS_publish_ksk (h, + ksk_uri, + adv_metadata, + ns_uri, + expiration, + anonymity, + priority, + GNUNET_FS_PUBLISH_OPTION_NONE, + &post_advertising, + NULL); + return; + } + } + } + post_advertising (NULL, NULL, NULL); +} /** * gnunet-pseudonym command line options */ static struct GNUNET_GETOPT_CommandLineOption options[] = { - // FIXME: 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}, + {'C', "create", "NAME", + gettext_noop + ("create or advertise namespace NAME"), + 1, &GNUNET_GETOPT_set_string, &create_ns}, + {'D', "delete", "NAME", + gettext_noop + ("delete namespace NAME "), + 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", + gettext_noop + ("add an additional keyword for the advertisment" + " (this option can be specified multiple times)"), + 1, &GNUNET_FS_getopt_set_keywords, &ksk_uri}, + {'l', "local-only", NULL, + gettext_noop ("print names of local namespaces"), + 0, &GNUNET_GETOPT_set_one, &print_local_only}, + {'m', "meta", "TYPE:VALUE", + gettext_noop ("set the meta-data for the given TYPE to the given VALUE"), + 1, &GNUNET_FS_getopt_set_metadata, &adv_metadata}, + {'n', "no-advertisement", NULL, + gettext_noop ("do not create an advertisement"), + 0, &GNUNET_GETOPT_set_one, &no_advertising}, + {'p', "priority", "PRIORITY", + gettext_noop ("use the given PRIORITY for the advertisments"), + 1, &GNUNET_GETOPT_set_uint, &priority}, + {'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"), + 1, &GNUNET_GETOPT_set_string, &root_identifier}, + {'s', "set-rating", "ID:VALUE", + gettext_noop + ("change rating of namespace ID by VALUE"), + 1, &GNUNET_GETOPT_set_string, &rating_change}, GNUNET_GETOPT_OPTION_END }; diff --git a/src/fs/gnunet-service-fs.c b/src/fs/gnunet-service-fs.c index 7f2230747..9b8a14052 100644 --- a/src/fs/gnunet-service-fs.c +++ b/src/fs/gnunet-service-fs.c @@ -47,7 +47,7 @@ #include "gnunet-service-fs_indexing.h" #include "fs.h" -#define DEBUG_FS 2 +#define DEBUG_FS GNUNET_NO /** * Maximum number of outgoing messages we queue per peer. @@ -1188,8 +1188,10 @@ transmit_query_continuation (void *cls, if (tpid == 0) { +#if DEBUG_FS GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission of request failed, will try again later.\n"); +#endif if (pr->task == GNUNET_SCHEDULER_NO_TASK) pr->task = GNUNET_SCHEDULER_add_delayed (sched, get_processing_delay (), @@ -1863,14 +1865,18 @@ process_reply (void *cls, gettext_noop ("# duplicate replies discarded (bloomfilter)"), 1, GNUNET_NO); +#if DEBUG_FS GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Duplicate response `%s', discarding.\n", GNUNET_h2s (&mhash)); +#endif return GNUNET_YES; /* duplicate */ } +#if DEBUG_FS GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "New response `%s', adding to filter.\n", GNUNET_h2s (&mhash)); +#endif GNUNET_CONTAINER_bloomfilter_add (pr->bf, &mhash); } @@ -1970,9 +1976,11 @@ process_reply (void *cls, } if (GNUNET_YES == do_remove) { +#if DEBUG_FS GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Removing request `%s' from request map (has been satisfied)\n", GNUNET_h2s (key)); +#endif GNUNET_break (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (query_request_map, key, @@ -2210,10 +2218,12 @@ process_local_reply (void *cls, pr); return; } +#if DEBUG_FS GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "New local response to `%s' of type %u.\n", GNUNET_h2s (key), type); +#endif if (type == GNUNET_DATASTORE_BLOCKTYPE_ONDEMAND) { #if DEBUG_FS @@ -2274,10 +2284,14 @@ process_local_reply (void *cls, pr->bf_size, BLOOMFILTER_K); } +#if DEBUG_FS GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "New local response `%s', adding to filter.\n", GNUNET_h2s (&mhash)); +#endif #if 0 + /* this would break stuff since we will check the bf later + again (and would then discard the reply!) */ GNUNET_CONTAINER_bloomfilter_add (pr->bf, &mhash); #endif diff --git a/src/fs/test_fs_download.c b/src/fs/test_fs_download.c index afb95bc71..af1fbfa50 100644 --- a/src/fs/test_fs_download.c +++ b/src/fs/test_fs_download.c @@ -29,7 +29,7 @@ #include "gnunet_arm_service.h" #include "gnunet_fs_service.h" -#define VERBOSE GNUNET_YES +#define VERBOSE GNUNET_NO #define START_ARM GNUNET_YES diff --git a/src/fs/test_fs_namespace.c b/src/fs/test_fs_namespace.c index a7ccbeccf..9e02521a8 100644 --- a/src/fs/test_fs_namespace.c +++ b/src/fs/test_fs_namespace.c @@ -31,7 +31,7 @@ #include "gnunet_arm_service.h" #include "gnunet_fs_service.h" -#define VERBOSE GNUNET_YES +#define VERBOSE GNUNET_NO #define START_ARM GNUNET_YES diff --git a/src/fs/test_fs_namespace_data.conf b/src/fs/test_fs_namespace_data.conf index 3316da3da..3b4ba5c70 100644 --- a/src/fs/test_fs_namespace_data.conf +++ b/src/fs/test_fs_namespace_data.conf @@ -19,7 +19,7 @@ HOSTNAME = localhost DEFAULTSERVICES = resolver datastore transport core fs [datastore] -DEBUG = YES +# DEBUG = YES [statistics] PORT = 42467 @@ -37,7 +37,7 @@ HOSTNAME = localhost PORT = 42471 HOSTNAME = localhost IDENTITY_DIR = $SERVICEHOME/pseudos/ -DEBUG = YES +# DEBUG = YES [testing] WEAKRANDOM = YES diff --git a/src/fs/test_fs_search.c b/src/fs/test_fs_search.c index d4d000c40..4320f965f 100644 --- a/src/fs/test_fs_search.c +++ b/src/fs/test_fs_search.c @@ -29,7 +29,7 @@ #include "gnunet_arm_service.h" #include "gnunet_fs_service.h" -#define VERBOSE GNUNET_YES +#define VERBOSE GNUNET_NO #define START_ARM GNUNET_YES diff --git a/src/fs/test_fs_search_data.conf b/src/fs/test_fs_search_data.conf index 40b440b2e..ce89cd8df 100644 --- a/src/fs/test_fs_search_data.conf +++ b/src/fs/test_fs_search_data.conf @@ -19,7 +19,7 @@ HOSTNAME = localhost DEFAULTSERVICES = resolver datastore transport core fs [datastore] -DEBUG = YES +# DEBUG = YES [statistics] PORT = 42467 @@ -36,7 +36,7 @@ HOSTNAME = localhost [fs] PORT = 42471 HOSTNAME = localhost -DEBUG = YES +# DEBUG = YES [testing] WEAKRANDOM = YES diff --git a/src/fs/test_fs_test_lib.c b/src/fs/test_fs_test_lib.c index 0abb539d6..a62200100 100644 --- a/src/fs/test_fs_test_lib.c +++ b/src/fs/test_fs_test_lib.c @@ -26,7 +26,7 @@ #include "platform.h" #include "fs_test_lib.h" -#define VERBOSE GNUNET_YES +#define VERBOSE GNUNET_NO /** * File-size we use for testing. diff --git a/src/fs/test_gnunet_service_fs_p2p.c b/src/fs/test_gnunet_service_fs_p2p.c index 024e08155..4153c6584 100644 --- a/src/fs/test_gnunet_service_fs_p2p.c +++ b/src/fs/test_gnunet_service_fs_p2p.c @@ -26,7 +26,7 @@ #include "platform.h" #include "fs_test_lib.h" -#define VERBOSE GNUNET_YES +#define VERBOSE GNUNET_NO /** * File-size we use for testing. -- cgit v1.2.3