26 #include <netcomm/dns-sd/avahi_thread.h> 27 #include <netcomm/dns-sd/avahi_resolver_handler.h> 29 #include <core/exception.h> 30 #include <utils/system/signal.h> 31 #include <utils/system/argparser.h> 35 #include <arpa/inet.h> 36 #include <netinet/in.h> 47 wait_for_name =
false;
48 wait_for_addr =
false;
51 ~QAAvahiResolverMain()
56 virtual void handle_signal(
int signum)
63 printf(
"Starting AvahiThread\n");
66 printf(
"Waiting until AvahiThread has been initialized\n");
67 at->wait_initialized();
69 wait_for_name = argp->has_arg(
"n");
70 wait_for_addr = argp->has_arg(
"a");
73 if ( (tmp = argp->arg(
"n")) != NULL ) {
74 printf(
"Calling name resolver\n");
75 at->resolve_name(tmp,
this);
78 if ( (tmp = argp->arg(
"a")) != NULL ) {
79 printf(
"Calling address resolver\n");
80 struct sockaddr_in saddr;
81 if ( inet_pton(AF_INET, tmp, &(saddr.sin_addr)) >= 0 ) {
82 at->resolve_address((
struct sockaddr *)&saddr,
sizeof(saddr),
this);
86 printf(
"Waiting for thread\n");
90 virtual void resolved_name(
char *name,
struct sockaddr *addr, socklen_t addrlen)
92 char addrp[INET_ADDRSTRLEN];
93 struct sockaddr_in *in_addr = (
struct sockaddr_in *)addr;
94 if ( inet_ntop(AF_INET, &(in_addr->sin_addr), addrp,
sizeof(addrp)) ) {
95 printf(
"'%s' resolved to '%s'\n", name, addrp);
97 printf(
"'%s' resolved, but could not transform address to presentation form\n", name);
103 wait_for_name =
false;
104 if ( ! wait_for_name && ! wait_for_addr ) at->cancel();
108 virtual void resolved_address(
struct sockaddr_in *addr, socklen_t addrlen,
char *name)
110 char addrp[INET_ADDRSTRLEN];
111 struct sockaddr_in *in_addr = (
struct sockaddr_in *)addr;
112 if ( inet_ntop(AF_INET, &(in_addr->sin_addr), addrp,
sizeof(addrp)) ) {
113 printf(
"Address %s resolved to %s\n", addrp, name);
115 printf(
"Unknown address resolved to '%s'\n", name);
121 wait_for_addr =
false;
122 if ( ! wait_for_name && ! wait_for_addr ) at->cancel();
125 virtual void name_resolution_failed(
char *name)
127 printf(
"Could not resolve '%s'\n", name);
130 wait_for_name =
false;
131 if ( ! wait_for_name && ! wait_for_addr ) at->cancel();
135 virtual void address_resolution_failed(
struct sockaddr_in *addr, socklen_t addrlen)
139 wait_for_addr =
false;
140 if ( ! wait_for_name && ! wait_for_addr ) at->cancel();
153 main(
int argc,
char **argv)
158 printf(
"Usage: %s [-n name] [-a address]\n\n", argv[0]);
164 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.