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);
static void finalize()
Finalize (and free) the SignalManager instance, this does NOT implicitly delete the signal handlers,...
Fawkes library namespace.
Interface for signal handling.
Parse command line arguments.
Avahi resolver handler interface.
Base class for exceptions in Fawkes.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.
void print_trace()
Prints trace to stderr.
bool has_arg(const char *argn)
Check if argument has been supplied.