26 #include <arpa/inet.h>
27 #include <core/exception.h>
28 #include <netcomm/dns-sd/avahi_resolver_handler.h>
29 #include <netcomm/dns-sd/avahi_thread.h>
30 #include <netinet/in.h>
31 #include <utils/system/argparser.h>
32 #include <utils/system/signal.h>
46 wait_for_name =
false;
47 wait_for_addr =
false;
50 ~QAAvahiResolverMain()
56 handle_signal(
int signum)
64 printf(
"Starting AvahiThread\n");
67 printf(
"Waiting until AvahiThread has been initialized\n");
68 at->wait_initialized();
70 wait_for_name = argp->has_arg(
"n");
71 wait_for_addr = argp->has_arg(
"a");
74 if ((tmp = argp->arg(
"n")) != NULL) {
75 printf(
"Calling name resolver\n");
76 at->resolve_name(tmp,
this);
79 if ((tmp = argp->arg(
"a")) != NULL) {
80 printf(
"Calling address resolver\n");
81 struct sockaddr_in saddr;
82 if (inet_pton(AF_INET, tmp, &(saddr.sin_addr)) >= 0) {
83 at->resolve_address((
struct sockaddr *)&saddr,
sizeof(saddr),
this);
87 printf(
"Waiting for thread\n");
92 resolved_name(
char *name,
struct sockaddr *addr, socklen_t addrlen)
94 char addrp[INET_ADDRSTRLEN];
95 struct sockaddr_in *in_addr = (
struct sockaddr_in *)addr;
96 if (inet_ntop(AF_INET, &(in_addr->sin_addr), addrp,
sizeof(addrp))) {
97 printf(
"'%s' resolved to '%s'\n", name, addrp);
99 printf(
"'%s' resolved, but could not transform address to presentation form\n", name);
105 wait_for_name =
false;
106 if (!wait_for_name && !wait_for_addr)
111 resolved_address(
struct sockaddr_in *addr, socklen_t addrlen,
char *name)
113 char addrp[INET_ADDRSTRLEN];
114 struct sockaddr_in *in_addr = (
struct sockaddr_in *)addr;
115 if (inet_ntop(AF_INET, &(in_addr->sin_addr), addrp,
sizeof(addrp))) {
116 printf(
"Address %s resolved to %s\n", addrp, name);
118 printf(
"Unknown address resolved to '%s'\n", name);
124 wait_for_addr =
false;
125 if (!wait_for_name && !wait_for_addr)
130 name_resolution_failed(
char *name)
132 printf(
"Could not resolve '%s'\n", name);
135 wait_for_name =
false;
136 if (!wait_for_name && !wait_for_addr)
141 address_resolution_failed(
struct sockaddr_in *addr, socklen_t addrlen)
145 wait_for_addr =
false;
146 if (!wait_for_name && !wait_for_addr)
159 main(
int argc,
char **argv)
164 printf(
"Usage: %s [-n name] [-a address]\n\n", argv[0]);
170 QAAvahiResolverMain m(argp);