X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgns%2Fgnunet-gns.c;h=83dd7b27b5f32efbbbf8d9e75ac8de01fb9cd7f0;hb=a12b8c2c4cbf952c8c305cde193bb25c13a0912b;hp=c0de0f30c5028c7599ff1d1fe5b70b654f38097e;hpb=990c536e0f1c4adce5ba49897e2084d6296fdafc;p=oweals%2Fgnunet.git diff --git a/src/gns/gnunet-gns.c b/src/gns/gnunet-gns.c index c0de0f30c..83dd7b27b 100644 --- a/src/gns/gnunet-gns.c +++ b/src/gns/gnunet-gns.c @@ -1,21 +1,21 @@ /* This file is part of GNUnet. - Copyright (C) 2012-2013, 2017 GNUnet e.V. + Copyright (C) 2012-2013, 2017-2018 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 - by the Free Software Foundation; either version 3, or (at your - option) any later version. + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Affero General Public License for more details. - 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., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later */ /** * @file gnunet-gns.c @@ -25,7 +25,6 @@ #include "platform.h" #include #include -#include #include #include #include @@ -40,11 +39,6 @@ static const struct GNUNET_CONFIGURATION_Handle *cfg; */ static struct GNUNET_GNS_Handle *gns; -/** - * Desired timeout for the lookup (default is no timeout). - */ -static struct GNUNET_TIME_Relative timeout; - /** * GNS name to lookup. (-u option) */ @@ -55,55 +49,29 @@ static char *lookup_name; */ static char *lookup_type; -/** - * Identity of the zone to use for the lookup (-z option) - */ -static char *zone_ego_name; - -/** - * Public key of the zone to use for the lookup (-p option) - */ -static char *public_key; - -/** - * Set to GNUNET_GNS_LO_LOCAL_MASTER if we are looking up in the master zone. - */ -static enum GNUNET_GNS_LocalOptions local_options; - /** * raw output */ static int raw; /** - * Requested record type. + * Desired record type. */ -static int rtype; +static uint32_t rtype; /** * Handle to lookup request */ -static struct GNUNET_GNS_LookupRequest *lookup_request; - -/** - * Lookup an ego with the identity service. - */ -static struct GNUNET_IDENTITY_EgoLookup *el; +static struct GNUNET_GNS_LookupWithTldRequest *lr; /** - * Handle for identity service. + * Global return value. + * 0 on success (default), + * 1 on internal failures + * 2 on launch failure, + * 4 if the name is not a GNS-supported TLD, */ -static struct GNUNET_IDENTITY_Handle *identity; - -/** - * Active operation on identity service. - */ -static struct GNUNET_IDENTITY_Operation *id_op; - -/** - * Task scheduled to handle timeout. - */ -static struct GNUNET_SCHEDULER_Task *tt; +static int global_ret; /** @@ -114,49 +82,17 @@ static struct GNUNET_SCHEDULER_Task *tt; static void do_shutdown (void *cls) { - if (NULL != el) - { - GNUNET_IDENTITY_ego_lookup_cancel (el); - el = NULL; - } - if (NULL != id_op) + (void) cls; + if (NULL != lr) { - GNUNET_IDENTITY_cancel (id_op); - id_op = NULL; - } - if (NULL != lookup_request) - { - GNUNET_GNS_lookup_cancel (lookup_request); - lookup_request = NULL; - } - if (NULL != identity) - { - GNUNET_IDENTITY_disconnect (identity); - identity = NULL; + GNUNET_GNS_lookup_with_tld_cancel (lr); + lr = NULL; } if (NULL != gns) { GNUNET_GNS_disconnect (gns); gns = NULL; } - if (NULL != tt) - { - GNUNET_SCHEDULER_cancel (tt); - tt = NULL; - } -} - - -/** - * Task run on timeout. Triggers shutdown. - * - * @param cls unused - */ -static void -do_timeout (void *cls) -{ - tt = NULL; - GNUNET_SCHEDULER_shutdown (); } @@ -164,21 +100,28 @@ do_timeout (void *cls) * Function called with the result of a GNS lookup. * * @param cls the 'const char *' name that was resolved + * @param was_gns #GNUNET_NO if TLD did not indicate use of GNS * @param rd_count number of records returned * @param rd array of @a rd_count records with the results */ static void process_lookup_result (void *cls, + int was_gns, uint32_t rd_count, const struct GNUNET_GNSRECORD_Data *rd) { const char *name = cls; - uint32_t i; const char *typename; char* string_val; - lookup_request = NULL; - if (!raw) + lr = NULL; + if (GNUNET_NO == was_gns) + { + global_ret = 4; /* not for GNS */ + GNUNET_SCHEDULER_shutdown (); + return; + } + if (! raw) { if (0 == rd_count) printf ("No results.\n"); @@ -186,7 +129,7 @@ process_lookup_result (void *cls, printf ("%s:\n", name); } - for (i=0; i 4) && - (0 == strcmp (".zkey", - &lookup_name[strlen (lookup_name) - 4])) ) - { - /* no zone required, use 'anonymous' zone */ - GNUNET_CRYPTO_ecdsa_key_get_public (GNUNET_CRYPTO_ecdsa_key_get_anonymous (), - &pkey); - lookup_with_public_key (&pkey); - } - else - { - GNUNET_break (NULL == id_op); - id_op = GNUNET_IDENTITY_get (identity, - "gns-master", - &identity_master_cb, - NULL); - GNUNET_assert (NULL != id_op); - } } @@ -421,63 +226,42 @@ main (int argc, char *const *argv) { struct GNUNET_GETOPT_CommandLineOption options[] = { - - GNUNET_GETOPT_option_string ('u', - "lookup", - "NAME", - gettext_noop ("Lookup a record for the given name"), - &lookup_name), - + GNUNET_GETOPT_option_mandatory + (GNUNET_GETOPT_option_string ('u', + "lookup", + "NAME", + gettext_noop ("Lookup a record for the given name"), + &lookup_name)), GNUNET_GETOPT_option_string ('t', "type", "TYPE", gettext_noop ("Specify the type of the record to lookup"), &lookup_type), - - GNUNET_GETOPT_option_relative_time ('T', - "timeout", - "DELAY", - gettext_noop ("Specify timeout for the lookup"), - &timeout), - GNUNET_GETOPT_option_flag ('r', - "raw", - gettext_noop ("No unneeded output"), - &raw), - - GNUNET_GETOPT_option_string ('p', - "public-key", - "PKEY", - gettext_noop ("Specify the public key of the zone to lookup the record in"), - &public_key), - - GNUNET_GETOPT_option_string ('z', - "zone", - "NAME", - gettext_noop ("Specify the name of the ego of the zone to lookup the record in"), - &zone_ego_name), - + "raw", + gettext_noop ("No unneeded output"), + &raw), GNUNET_GETOPT_OPTION_END }; int ret; - timeout = GNUNET_TIME_UNIT_FOREVER_REL; - if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, - &argc, &argv)) + if (GNUNET_OK != + GNUNET_STRINGS_get_utf8_args (argc, argv, + &argc, &argv)) return 2; GNUNET_log_setup ("gnunet-gns", "WARNING", NULL); - ret = - (GNUNET_OK == - GNUNET_PROGRAM_run (argc, argv, - "gnunet-gns", - _("GNUnet GNS resolver tool"), - options, - &run, NULL)) ? 0 : 1; + ret = GNUNET_PROGRAM_run (argc, argv, + "gnunet-gns", + _("GNUnet GNS resolver tool"), + options, + &run, NULL); GNUNET_free ((void*) argv); - return ret; + if (GNUNET_OK != ret) + return 1; + return global_ret; } /* end of gnunet-gns.c */