uvw  2.11.0
dns.h
1 #ifndef UVW_DNS_INCLUDE_H
2 #define UVW_DNS_INCLUDE_H
3 
4 
5 #include <utility>
6 #include <memory>
7 #include <string>
8 #include <uv.h>
9 #include "request.hpp"
10 #include "util.h"
11 #include "loop.h"
12 
13 
14 namespace uvw {
15 
16 
22 struct AddrInfoEvent {
23  using Deleter = void(*)(addrinfo *);
24 
25  AddrInfoEvent(std::unique_ptr<addrinfo, Deleter> addr);
26 
33  std::unique_ptr<addrinfo, Deleter> data;
34 };
35 
36 
42 struct NameInfoEvent {
43  NameInfoEvent(const char *host, const char *serv);
44 
51  const char * hostname;
52 
59  const char * service;
60 };
61 
62 
71 class GetAddrInfoReq final: public Request<GetAddrInfoReq, uv_getaddrinfo_t> {
72  static void addrInfoCallback(uv_getaddrinfo_t *req, int status, addrinfo *res);
73  void nodeAddrInfo(const char *node, const char *service, addrinfo *hints = nullptr);
74  auto nodeAddrInfoSync(const char *node, const char *service, addrinfo *hints = nullptr);
75 
76 public:
77  using Deleter = void(*)(addrinfo *);
78 
79  using Request::Request;
80 
87  void nodeAddrInfo(const std::string &node, addrinfo *hints = nullptr);
88 
100  std::pair<bool, std::unique_ptr<addrinfo, Deleter>> nodeAddrInfoSync(const std::string &node, addrinfo *hints = nullptr);
101 
108  void serviceAddrInfo(const std::string &service, addrinfo *hints = nullptr);
109 
121  std::pair<bool, std::unique_ptr<addrinfo, Deleter>> serviceAddrInfoSync(const std::string &service, addrinfo *hints = nullptr);
122 
130  void addrInfo(const std::string &node, const std::string &service, addrinfo *hints = nullptr);
131 
144  std::pair<bool, std::unique_ptr<addrinfo, Deleter>> addrInfoSync(const std::string &node, const std::string &service, addrinfo *hints = nullptr);
145 };
146 
147 
156 class GetNameInfoReq final: public Request<GetNameInfoReq, uv_getnameinfo_t> {
157  static void nameInfoCallback(uv_getnameinfo_t *req, int status, const char *hostname, const char *service);
158 
159 public:
160  using Request::Request;
161 
167  void nameInfo(const sockaddr &addr, int flags = 0);
168 
175  template<typename I = IPv4>
176  void nameInfo(const std::string &ip, unsigned int port, int flags = 0);
177 
183  template<typename I = IPv4>
184  void nameInfo(Addr addr, int flags = 0);
185 
198  std::pair<bool, std::pair<const char *, const char *>> nameInfoSync(const sockaddr &addr, int flags = 0);
199 
213  template<typename I = IPv4>
214  std::pair<bool, std::pair<const char *, const char *>> nameInfoSync(const std::string &ip, unsigned int port, int flags = 0);
215 
228  template<typename I = IPv4>
229  std::pair<bool, std::pair<const char *, const char *>> nameInfoSync(Addr addr, int flags = 0);
230 };
231 
232 
239 // (extern) explicit instantiations
240 #ifdef UVW_AS_LIB
241 extern template void GetNameInfoReq::nameInfo<IPv4>(const std::string &, unsigned int, int);
242 extern template void GetNameInfoReq::nameInfo<IPv6>(const std::string &, unsigned int, int);
243 
244 extern template void GetNameInfoReq::nameInfo<IPv4>(Addr, int);
245 extern template void GetNameInfoReq::nameInfo<IPv6>(Addr, int);
246 
247 extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv4>(const std::string &, unsigned int, int);
248 extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv6>(const std::string &, unsigned int, int);
249 
250 extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv4>(Addr, int);
251 extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv6>(Addr, int);
252 #endif // UVW_AS_LIB
253 
254 
261 }
262 
263 
264 #ifndef UVW_AS_LIB
265 #include "dns.cpp"
266 #endif
267 
268 
269 #endif // UVW_DNS_INCLUDE_H
The GetAddrInfoReq request.
Definition: dns.h:71
void addrInfo(const std::string &node, const std::string &service, addrinfo *hints=nullptr)
Async getaddrinfo.
std::pair< bool, std::unique_ptr< addrinfo, Deleter > > addrInfoSync(const std::string &node, const std::string &service, addrinfo *hints=nullptr)
Sync getaddrinfo.
std::pair< bool, std::unique_ptr< addrinfo, Deleter > > nodeAddrInfoSync(const std::string &node, addrinfo *hints=nullptr)
Sync getaddrinfo.
void serviceAddrInfo(const std::string &service, addrinfo *hints=nullptr)
Async getaddrinfo.
void nodeAddrInfo(const std::string &node, addrinfo *hints=nullptr)
Async getaddrinfo.
std::pair< bool, std::unique_ptr< addrinfo, Deleter > > serviceAddrInfoSync(const std::string &service, addrinfo *hints=nullptr)
Sync getaddrinfo.
The GetNameInfoReq request.
Definition: dns.h:156
std::pair< bool, std::pair< const char *, const char * > > nameInfoSync(Addr addr, int flags=0)
Sync getnameinfo.
void nameInfo(Addr addr, int flags=0)
Async getnameinfo.
std::pair< bool, std::pair< const char *, const char * > > nameInfoSync(const sockaddr &addr, int flags=0)
Sync getnameinfo.
void nameInfo(const sockaddr &addr, int flags=0)
Async getnameinfo.
void nameInfo(const std::string &ip, unsigned int port, int flags=0)
Async getnameinfo.
std::pair< bool, std::pair< const char *, const char * > > nameInfoSync(const std::string &ip, unsigned int port, int flags=0)
Sync getnameinfo.
Request base class.
Definition: request.hpp:21
uvw default namespace.
Definition: async.h:10
AddrInfoEvent event.
Definition: dns.h:22
std::unique_ptr< addrinfo, Deleter > data
An initialized instance of addrinfo.
Definition: dns.h:33
Address representation.
Definition: util.h:321
NameInfoEvent event.
Definition: dns.h:42
const char * service
A valid service name.
Definition: dns.h:59
const char * hostname
A valid hostname.
Definition: dns.h:51