From b4a9f96a8bce812208307656ce87fddeb6b1be8a Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 17 Jun 2011 09:51:39 +0000 Subject: [PATCH] fixing 1696 --- doc/man/gnunet-search.1 | 4 ++++ src/fs/gnunet-search.c | 26 +++++++++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/doc/man/gnunet-search.1 b/doc/man/gnunet-search.1 index 526097733..8f9789400 100644 --- a/doc/man/gnunet-search.1 +++ b/doc/man/gnunet-search.1 @@ -41,6 +41,10 @@ Writes a GNUnet directory containing all of the search results to FILENAME. \fB\-n\fR, \fB\-\-no-network\fR Only search locally, do not forward requests to other peers. +.TP +\fB\-t \fIVALUE\fR, \fB\-\-timeout=\fIVALUE\fR +Automatically timeout search after VALUE ms. Otherwise the search runs until gnunet\-search is aborted with CTRL\-C. + .TP \fB\-v\fR, \fB\-\-version\fR print the version number diff --git a/src/fs/gnunet-search.c b/src/fs/gnunet-search.c index cc3ef7c87..f2414322d 100644 --- a/src/fs/gnunet-search.c +++ b/src/fs/gnunet-search.c @@ -42,6 +42,8 @@ static struct GNUNET_FS_DirectoryBuilder *db; static unsigned int anonymity = 1; +static unsigned long long timeout; + static int verbose; static int local_only; @@ -231,6 +233,7 @@ run (void *cls, struct GNUNET_FS_Uri *uri; unsigned int argc; enum GNUNET_FS_SearchOptions options; + struct GNUNET_TIME_Relative delay; argc = 0; while (NULL != args[argc]) @@ -242,7 +245,6 @@ run (void *cls, fprintf (stderr, _("Could not create keyword URI from arguments.\n")); ret = 1; - GNUNET_FS_uri_destroy (uri); return; } cfg = c; @@ -280,9 +282,19 @@ run (void *cls, ret = 1; return; } - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, - &shutdown_task, - NULL); + if (timeout != 0) + { + delay.rel_value = timeout; + GNUNET_SCHEDULER_add_delayed (delay, + &shutdown_task, + NULL); + } + else + { + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, + &shutdown_task, + NULL); + } } @@ -307,11 +319,15 @@ main (int argc, char *const *argv) gettext_noop ("write search results to file starting with PREFIX"), 1, &GNUNET_GETOPT_set_string, &output_filename}, + {'t', "timeout", "VALUE", + gettext_noop + ("automatically terminate search after VALUE ms"), + 1, &GNUNET_GETOPT_set_ulong, &timeout}, {'V', "verbose", NULL, gettext_noop ("be verbose (print progress information)"), 0, &GNUNET_GETOPT_set_one, &verbose}, GNUNET_GETOPT_OPTION_END - }; + }; return (GNUNET_OK == GNUNET_PROGRAM_run (argc, argv, -- 2.25.1