24 #ifndef __NETCOMM_UTILS_RESOLVER_THREAD_H_
25 #define __NETCOMM_UTILS_RESOLVER_THREAD_H_
27 #include <core/threading/thread.h>
28 #include <core/utils/lock_hashset.h>
29 #include <core/utils/lock_hashmap.h>
30 #include <utils/misc/string_compare.h>
32 #include <netcomm/dns-sd/avahi_resolver_handler.h>
34 #include <sys/socket.h>
35 #include <netinet/in.h>
44 class NetworkNameResolver;
48 class NetworkNameResolverThread :
public Thread,
public AvahiResolverHandler
62 struct sockaddr **addr, socklen_t *addr_len);
64 char **name,
bool *namefound);
66 virtual void resolved_name(
char *name,
struct sockaddr *addr, socklen_t addrlen);
67 virtual void resolved_address(
struct sockaddr_in *addr, socklen_t addrlen,
char *name);
82 Mutex *__namesq_mutex;
83 unsigned int __namesq_active;
84 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)
89 NamesQMap __namesqs[2];
91 NamesQMap *__namesq_proc;
95 unsigned int __addrq_active;
96 typedef std::map<uint32_t, std::pair<struct sockaddr *, socklen_t> > AddrQMap;
99 AddrQMap *__addrq_proc;
NetworkNameResolverThread(NetworkNameResolver *resolver, AvahiThread *avahi_thread=NULL)
Constructor.
void resolve_address(struct sockaddr *addr, socklen_t addrlen)
Enqueue address for resolution.
virtual void name_resolution_failed(char *name)
Name resolution failed.
Fawkes library namespace.
virtual void run()
Code to execute in the thread.
Thread class encapsulation of pthreads.
Worker thread for NetworkNameResolver.
virtual void resolved_name(char *name, struct sockaddr *addr, socklen_t addrlen)
Name has been successfully resolved.
virtual void address_resolution_failed(struct sockaddr_in *addr, socklen_t addrlen)
Address resolution failed.
bool resolve_address_immediately(struct sockaddr *addr, socklen_t addr_len, char **name, bool *namefound)
Immediately resolve address.
void resolve_name(const char *name)
Enqueue name for resolution.
const char * name() const
Get name of thread.
~NetworkNameResolverThread()
Destructor.
Network name and address resolver.
virtual void resolved_address(struct sockaddr_in *addr, socklen_t addrlen, char *name)
Address has been successfully resolved.
Mutex mutual exclusion lock.
virtual void run()
Stub to see name in backtrace for easier debugging.
bool resolve_name_immediately(const char *name, struct sockaddr **addr, socklen_t *addr_len)
Immediately resolve a name.
virtual void loop()
Thread loop.