X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fgns%2Fgnunet-gns.c;h=83dd7b27b5f32efbbbf8d9e75ac8de01fb9cd7f0;hb=a12b8c2c4cbf952c8c305cde193bb25c13a0912b;hp=7951eb5693434ddf23a3967bda9ba90020bc8e72;hpb=b3e4bdd6d25ad08e7b592204d4f13f19bc73b668;p=oweals%2Fgnunet.git diff --git a/src/gns/gnunet-gns.c b/src/gns/gnunet-gns.c index 7951eb569..83dd7b27b 100644 --- a/src/gns/gnunet-gns.c +++ b/src/gns/gnunet-gns.c @@ -1,21 +1,21 @@ /* This file is part of GNUnet. - (C) 2012-2013 Christian Grothoff (and other contributing authors) + 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., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, 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,81 +49,44 @@ 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_YES if we must not use the DHT (only local lookup). - */ -static int only_cached; - /** * 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; - -/** - * Handle for identity service. - */ -static struct GNUNET_IDENTITY_Handle *identity; +static struct GNUNET_GNS_LookupWithTldRequest *lr; /** - * Active operation on 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_Operation *id_op; +static int global_ret; /** * Task run on shutdown. Cleans up everything. * * @param cls unused - * @param tc scheduler context */ static void -do_shutdown (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +do_shutdown (void *cls) { - if (NULL != el) - { - GNUNET_IDENTITY_ego_lookup_cancel (el); - el = NULL; - } - if (NULL != id_op) - { - GNUNET_IDENTITY_cancel (id_op); - id_op = NULL; - } - if (NULL != lookup_request) + (void) cls; + if (NULL != lr) { - 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) { @@ -143,20 +100,28 @@ do_shutdown (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, uint32_t rd_count, +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"); @@ -164,7 +129,7 @@ process_lookup_result (void *cls, uint32_t rd_count, 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); - } } @@ -439,44 +222,46 @@ run (void *cls, char *const *args, const char *cfgfile, * @return 0 ok, 1 on error */ int -main (int argc, char *const *argv) +main (int argc, + char *const *argv) { - static const struct GNUNET_GETOPT_CommandLineOption options[] = { - {'u', "lookup", "NAME", - gettext_noop ("Lookup a record for the given name"), 1, - &GNUNET_GETOPT_set_string, &lookup_name}, - {'t', "type", "TYPE", - gettext_noop ("Specify the type of the record to lookup"), 1, - &GNUNET_GETOPT_set_string, &lookup_type}, - { 'T', "timeout", "DELAY", - gettext_noop ("Specify timeout for the lookup"), 1, - &GNUNET_GETOPT_set_relative_time, &timeout }, - {'r', "raw", NULL, - gettext_noop ("No unneeded output"), 0, - &GNUNET_GETOPT_set_one, &raw}, - {'p', "public-key", "PKEY", - gettext_noop ("Specify the public key of the zone to lookup the record in"), 1, - &GNUNET_GETOPT_set_string, &public_key}, - {'z', "zone", "NAME", - gettext_noop ("Specify the name of the ego of the zone to lookup the record in"), 1, - &GNUNET_GETOPT_set_string, &zone_ego_name}, + struct GNUNET_GETOPT_CommandLineOption options[] = { + 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_flag ('r', + "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; + GNUNET_log_setup ("gnunet-gns", + "WARNING", + NULL); + 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 */