26 #include <netcomm/utils/resolver.h>
27 #include <utils/system/argparser.h>
28 #include <utils/system/signal.h>
30 # include <netcomm/dns-sd/avahi_thread.h>
33 #include <arpa/inet.h>
34 #include <netinet/in.h>
55 printf(
"Instantiating Avahi thread\n");
58 at->wait_initialized();
64 printf(
"Avahi not available at compile time\n");
85 struct sockaddr_in *s = NULL;
88 char *test = (
char *)malloc(strlen(
"127.0.0.1") + 1);
89 strcpy(test,
"127.0.0.1");
90 r->resolve_name(test, (
struct sockaddr **)&s, &slen);
93 while (!quit && !r->resolve_name(
"127.0.0.1", (
struct sockaddr **)&s, &slen)) {
99 printf(
"Successfully resolved to 0x%x\n", s->sin_addr.s_addr);
101 if (!r->resolve_name(
"127.0.0.1", (
struct sockaddr **)&s, &slen)) {
102 printf(
"A second try to resolve failed after first success, cache broken\n");
104 printf(
"Successfully resolved to 0x%x again\n", s->sin_addr.s_addr);
108 if (!r->resolve_address((
struct sockaddr *)s, slen, name)) {
111 printf(
"Successfully resolved address to '%s'\n", name.c_str());
115 if ((atmp = argp->
arg(
"h")) != NULL) {
116 printf(
"Trying to resolve %s\n", atmp);
117 while (!quit && !r->resolve_name(atmp, (
struct sockaddr **)&s, &slen)) {
123 char addrp[INET_ADDRSTRLEN];
124 inet_ntop(AF_INET, &(s->sin_addr), addrp,
sizeof(addrp));
125 printf(
"Successfully resolved to 0x%x (%s)\n", s->sin_addr.s_addr, addrp);
127 struct sockaddr_in so;
130 so.sin_addr.s_addr = s->sin_addr.s_addr;
131 r->resolve_address((
struct sockaddr *)&so, slen, tmp);
132 printf(
"Waiting one second to allow resolver thread to suceed\n");
134 if (r->resolve_address((
struct sockaddr *)&so, slen, tmp)) {
135 printf(
"Successfully resolved 0x%x to %s\n", so.sin_addr.s_addr, tmp.c_str());
139 if ((atmp = argp->
arg(
"i")) != NULL) {
140 printf(
"Resolving %s, press Ctrl-C to end...\n", atmp);
142 if (inet_pton(AF_INET, atmp, &ia) == 1) {
144 struct sockaddr_in so;
145 so.sin_addr.s_addr = ia.s_addr;
147 if (r->resolve_address((
struct sockaddr *)&so,
sizeof(so), name)) {
152 printf(
"Result: %s\n", name.c_str());
157 printf(
"Address could not be converted to binary form. Skipping.\n");
163 handle_signal(
int signum)
178 main(
int argc,
char **argv)
182 ResolverQAMain m(&argp);
Parse command line arguments.
const char * arg(const char *argn)
Get argument value.
bool has_arg(const char *argn)
Check if argument has been supplied.
Network name and address resolver.
Interface for signal handling.
static void finalize()
Finalize (and free) the SignalManager instance, this does NOT implicitly delete the signal handlers,...
static void ignore(int signum)
Ignore a signal.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.
Fawkes library namespace.