From f9aec0367413408e654a455ad703f44d352cf476 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 5 Mar 2012 13:20:13 +0000 Subject: -reviving gnunet-gns for shortening --- doc/man/Makefile.am | 1 + doc/man/gnunet-gns.1 | 36 ++++++++++++++ doc/man/gnunet-namestore.1 | 11 +++-- src/gns/gnunet-gns.c | 121 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 165 insertions(+), 4 deletions(-) create mode 100644 doc/man/gnunet-gns.1 create mode 100644 src/gns/gnunet-gns.c diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am index 4c9d6f7c7..629ab6d13 100644 --- a/doc/man/Makefile.am +++ b/doc/man/Makefile.am @@ -4,6 +4,7 @@ man_MANS = \ gnunet-download.1 \ gnunet-download-manager.1 \ gnunet-fs.1 \ + gnunet-gns.1 \ gnunet-namestore.1 \ gnunet-nat-server.1 \ gnunet-peerinfo.1 \ diff --git a/doc/man/gnunet-gns.1 b/doc/man/gnunet-gns.1 new file mode 100644 index 000000000..4d00c82e3 --- /dev/null +++ b/doc/man/gnunet-gns.1 @@ -0,0 +1,36 @@ +.TH GNUNET\-GNS 1 "Mar 5, 2012" "GNUnet" + +.SH NAME +gnunet\-gns \- manipulate GNUnet GNS zones + +.SH SYNOPSIS +.B gnunet\-gns +.RI [ options ] -z ZONEFILE +.br + +.SH DESCRIPTION +\fBgnunet\-gns\fP can be used to create and manipulate a GNS zone. + +.SH OPTIONS +.B +.IP "\-c FILENAME, \-\-config=FILENAME" +Use the configuration file FILENAME. +.B +.IP "\-h, \-\-help" +Print short help on options. +.B +.IP "\-L LOGLEVEL, \-\-loglevel=LOGLEVEL" +Use LOGLEVEL for logging. Valid values are DEBUG, INFO, WARNING and ERROR. +.B +.IP "\-s NAME, \-\-shorten=NAME" +GNS domain name to shorten +.B +.IP "\-v, \-\-version" +Print GNUnet version number. + +.SH BUGS +Report bugs by using Mantis or by sending electronic mail to + + +.SH "SEE ALSO" +\fBgnunet\-namestore\fP(1) diff --git a/doc/man/gnunet-namestore.1 b/doc/man/gnunet-namestore.1 index 8fd4b33e4..4ecdbb0a6 100644 --- a/doc/man/gnunet-namestore.1 +++ b/doc/man/gnunet-namestore.1 @@ -1,15 +1,15 @@ -.TH GNUNET\-GNS 1 "Jan 4, 2012" "GNUnet" +.TH GNUNET\-NAMESTORE 1 "Mar 5, 2012" "GNUnet" .SH NAME -gnunet\-gns \- manipulate GNUnet GNS zones +gnunet\-namestore \- manipulate GNUnet zones .SH SYNOPSIS -.B gnunet\-gns +.B gnunet\-namestore .RI [ options ] -z ZONEFILE .br .SH DESCRIPTION -\fBgnunet\-gns\fP can be used to create and manipulate a GNS zone. +\fBgnunet\-namestore\fP can be used to create and manipulate a GNS zone. .SH OPTIONS .B @@ -53,3 +53,6 @@ Specifies the filename with the private key for the zone (mandatory option) .SH BUGS Report bugs by using Mantis or by sending electronic mail to + +.SH "SEE ALSO" +\fBgnunet\-gns\fP(1) diff --git a/src/gns/gnunet-gns.c b/src/gns/gnunet-gns.c new file mode 100644 index 000000000..3fdd8d29f --- /dev/null +++ b/src/gns/gnunet-gns.c @@ -0,0 +1,121 @@ +/* + This file is part of GNUnet. + (C) 2012 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 + by the Free Software Foundation; either version 3, 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. + + 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. +*/ +/** + * @file gnunet-gns.c + * @brief command line tool to access distributed GNS + * @author Christian Grothoff + * + * TODO: + * - everything + */ +#include "platform.h" +#include +#include +#include +#include + +/** + * Handle to GNS service. + */ +static struct GNUNET_GNS_Handle *gns; + +/** + * GNS name to shorten. (-s option) + */ +static struct char *name; + +/** + * 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) +{ + if (NULL != gns) + { + GNUNET_GNS_disconnect (gns); + gns = NULL; + } +} + + +/** + * Main function that will be run. + * + * @param cls closure + * @param args remaining command-line arguments + * @param cfgfile name of the configuration file used (for saving, can be NULL!) + * @param cfg configuration + */ +static void +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + gns = GNUNET_GNS_connect (cfg); + if (NULL == gns) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Failed to connect to GNS\n")); + return; + } + if (NULL == s) + { + GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + return; + } + // FIXME: do work here... + GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); +} + + +/** + * The main function for gnunet-gns. + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, char *const *argv) +{ + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + {'s', "shorten", NULL, + gettext_noop ("try to shorten a given GNS name"), 0, + &GNUNET_GETOPT_set_string, &name}, + GNUNET_GETOPT_OPTION_END + }; + + int ret; + + GNUNET_log_setup ("gnunet-gns", "WARNING", NULL); + ret = + (GNUNET_OK == + GNUNET_PROGRAM_run (argc, argv, "gnunet-gns", + _("GNUnet GNS access tool"), + options, + &run, NULL)) ? 0 : 1; + + return ret; +} + +/* end of gnunet-gns.c */ -- cgit v1.2.3