gnunet-resolver.c   gnunet-resolver.c 
skipping to change at line 33 skipping to change at line 33
* @brief tool to test resolver * @brief tool to test resolver
* @author Christian Grothoff * @author Christian Grothoff
*/ */
#include "platform.h" #include "platform.h"
#include "gnunet_util_lib.h" #include "gnunet_util_lib.h"
#include "gnunet_resolver_service.h" #include "gnunet_resolver_service.h"
#define GET_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS , 1) #define GET_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS , 1)
/** /**
* Flag for reverse lookup.
*/
static int reverse;
/**
* Prints each hostname obtained from DNS.
*
* @param cls closure (unused)
* @param hostname one of the names for the host, NULL
* on the last call to the callback
*/
static void
print_hostname (void *cls,
const char *hostname)
{
if (NULL == hostname)
return;
FPRINTF (stdout, "%s\n", hostname);
}
/**
* Callback function to display address. * Callback function to display address.
*
* @param cls closure (unused)
* @param addr one of the addresses of the host, NULL for the last address
* @param addrlen length of the address
*/ */
static void static void
printer (void *cls, const struct sockaddr *addr, socklen_t addrlen) print_sockaddr (void *cls, const struct sockaddr *addr, socklen_t addrlen)
{ {
if (addr == NULL) if (NULL == addr)
return; return;
FPRINTF (stdout, "%s\n", GNUNET_a2s (addr, addrlen)); FPRINTF (stdout, "%s\n", GNUNET_a2s (addr, addrlen));
} }
/** /**
* Main function that will be run by the scheduler. * Main function that will be run by the scheduler.
* *
* @param cls closure * @param cls closure
* @param args remaining command-line arguments * @param args remaining command-line arguments
* @param cfgfile name of the configuration file used (for saving, can be N ULL!) * @param cfgfile name of the configuration file used (for saving, can be N ULL!)
* @param cfg configuration * @param cfg configuration
*/ */
static void static void
run (void *cls, char *const *args, const char *cfgfile, run (void *cls, char *const *args, const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg) const struct GNUNET_CONFIGURATION_Handle *cfg)
{ {
const struct sockaddr *sa;
socklen_t salen;
struct sockaddr_in v4;
struct sockaddr_in6 v6;
if (args[0] == NULL) if (args[0] == NULL)
return; return;
GNUNET_RESOLVER_ip_get (args[0], AF_UNSPEC, GET_TIMEOUT, &printer, NULL); if (! reverse)
{
GNUNET_RESOLVER_ip_get (args[0], AF_UNSPEC, GET_TIMEOUT, &print_sockadd
r, NULL);
return;
}
sa = NULL;
memset (&v4, 0, sizeof (v4));
v4.sin_family = AF_INET;
#if HAVE_SOCKADDR_IN_SIN_LEN
v4.sin_len = sizeof (v4);
#endif
if (1 == inet_pton (AF_INET,
args[0],
&v4.sin_addr))
{
sa = (struct sockaddr *) &v4;
salen = sizeof (v4);
}
memset (&v6, 0, sizeof (v6));
v6.sin6_family = AF_INET6;
#if HAVE_SOCKADDR_IN_SIN_LEN
v6.sin6_len = sizeof (v6);
#endif
if (1 == inet_pton (AF_INET6,
args[0],
&v6.sin6_addr))
{
sa = (struct sockaddr *) &v6;
salen = sizeof (v6);
}
if (NULL == sa)
{
fprintf (stderr,
"`%s' is not a valid IP: %s\n",
args[0],
strerror (errno));
return;
}
GNUNET_RESOLVER_hostname_get (sa, salen,
GNUNET_YES,
GET_TIMEOUT,
&print_hostname,
NULL);
} }
/** /**
* The main function to obtain statistics in GNUnet. * The main function to obtain statistics in GNUnet.
* *
* @param argc number of arguments from the command line * @param argc number of arguments from the command line
* @param argv command line arguments * @param argv command line arguments
* @return 0 ok, 1 on error * @return 0 ok, 1 on error
*/ */
int int
main (int argc, char *const *argv) main (int argc, char *const *argv)
{ {
static const struct GNUNET_GETOPT_CommandLineOption options[] = { static const struct GNUNET_GETOPT_CommandLineOption options[] = {
{ 'r', "reverse", NULL,
gettext_noop ("perform a reverse lookup"),
0, &GNUNET_GETOPT_set_one, &reverse },
GNUNET_GETOPT_OPTION_END GNUNET_GETOPT_OPTION_END
}; };
return (GNUNET_OK == return (GNUNET_OK ==
GNUNET_PROGRAM_run (argc, argv, "gnunet-resolver [hostname]", GNUNET_PROGRAM_run (argc, argv, "gnunet-resolver [hostname]",
gettext_noop ("Test GNUnet DNS resolver code. "), gettext_noop ("Use build-in GNUnet stub resol ver"),
options, &run, NULL)) ? 0 : 1; options, &run, NULL)) ? 0 : 1;
} }
/* end of gnunet-resolver.c */ /* end of gnunet-resolver.c */
 End of changes. 8 change blocks. 
4 lines changed or deleted 81 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/