/* This file is part of GNUnet. 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 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ /** * @file gnunet-gns.c * @brief command line tool to access distributed GNS * @author Christian Grothoff */ #include "platform.h" #include #include #include #include #include /** * Configuration we are using. */ static const struct GNUNET_CONFIGURATION_Handle *cfg; /** * Handle to GNS service. */ static struct GNUNET_GNS_Handle *gns; /** * GNS name to lookup. (-u option) */ static char *lookup_name; /** * record type to look up (-t option) */ static char *lookup_type; /** * raw output */ static int raw; /** * Desired record type. */ static uint32_t rtype; /** * Handle to lookup request */ static struct GNUNET_GNS_LookupWithTldRequest *lr; /** * 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 int global_ret; /** * Task run on shutdown. Cleans up everything. * * @param cls unused */ static void do_shutdown (void *cls) { (void) cls; if (NULL != lr) { GNUNET_GNS_lookup_with_tld_cancel (lr); lr = NULL; } if (NULL != gns) { GNUNET_GNS_disconnect (gns); gns = NULL; } } /** * 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; const char *typename; char* string_val; 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"); else printf ("%s:\n", name); } for (uint32_t i=0; i