uvw  2.6.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(std::string node, addrinfo *hints = nullptr);
88 
100  std::pair<bool, std::unique_ptr<addrinfo, Deleter>> nodeAddrInfoSync(std::string node, addrinfo *hints = nullptr);
101 
108  void serviceAddrInfo(std::string service, addrinfo *hints = nullptr);
109 
121  std::pair<bool, std::unique_ptr<addrinfo, Deleter>> serviceAddrInfoSync(std::string service, addrinfo *hints = nullptr);
122 
130  void addrInfo(std::string node, std::string service, addrinfo *hints = nullptr);
131 
144  std::pair<bool, std::unique_ptr<addrinfo, Deleter>> addrInfoSync(std::string node, 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(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(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 
241 extern template void GetNameInfoReq::nameInfo<IPv4>(std::string ip, unsigned int port, int flags);
242 extern template void GetNameInfoReq::nameInfo<IPv6>(std::string ip, unsigned int port, int flags);
243 
244 extern template void GetNameInfoReq::nameInfo<IPv4>(Addr addr, int flags);
245 extern template void GetNameInfoReq::nameInfo<IPv6>(Addr addr, int flags);
246 
247 extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv4>(std::string ip, unsigned int port, int flags);
248 extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv6>(std::string ip, unsigned int port, int flags);
249 
250 extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv4>(Addr addr, int flags);
251 extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv6>(Addr addr, int flags);
252 
253 
260 }
261 
262 
263 #ifndef UVW_AS_LIB
264 #include "dns.cpp"
265 #endif
266 
267 #endif // UVW_DNS_INCLUDE_H
uvw::AddrInfoEvent::data
std::unique_ptr< addrinfo, Deleter > data
An initialized instance of addrinfo.
Definition: dns.h:33
uvw::GetNameInfoReq::nameInfoSync
std::pair< bool, std::pair< const char *, const char * > > nameInfoSync(const sockaddr &addr, int flags=0)
Sync getnameinfo.
uvw::GetAddrInfoReq::addrInfoSync
std::pair< bool, std::unique_ptr< addrinfo, Deleter > > addrInfoSync(std::string node, std::string service, addrinfo *hints=nullptr)
Sync getaddrinfo.
uvw
uvw default namespace.
Definition: async.h:10
uvw::NameInfoEvent
NameInfoEvent event.
Definition: dns.h:42
uvw::NameInfoEvent::service
const char * service
A valid service name.
Definition: dns.h:59
uvw::GetAddrInfoReq::addrInfo
void addrInfo(std::string node, std::string service, addrinfo *hints=nullptr)
Async getaddrinfo.
uvw::GetNameInfoReq
The GetNameInfoReq request.
Definition: dns.h:156
uvw::AddrInfoEvent
AddrInfoEvent event.
Definition: dns.h:22
uvw::NameInfoEvent::hostname
const char * hostname
A valid hostname.
Definition: dns.h:51
uvw::GetAddrInfoReq
The GetAddrInfoReq request.
Definition: dns.h:71
uvw::Addr
Address representation.
Definition: util.h:321
uvw::GetNameInfoReq::nameInfo
void nameInfo(const sockaddr &addr, int flags=0)
Async getnameinfo.
uvw::GetAddrInfoReq::serviceAddrInfoSync
std::pair< bool, std::unique_ptr< addrinfo, Deleter > > serviceAddrInfoSync(std::string service, addrinfo *hints=nullptr)
Sync getaddrinfo.
uvw::GetAddrInfoReq::serviceAddrInfo
void serviceAddrInfo(std::string service, addrinfo *hints=nullptr)
Async getaddrinfo.