uvw 2.12.1
Loading...
Searching...
No Matches
dns.h
1#ifndef UVW_DNS_INCLUDE_H
2#define UVW_DNS_INCLUDE_H
3
4#include <memory>
5#include <string>
6#include <utility>
7#include <uv.h>
8#include "loop.h"
9#include "request.hpp"
10#include "util.h"
11
12namespace uvw {
13
20 using Deleter = void (*)(addrinfo *);
21
22 AddrInfoEvent(std::unique_ptr<addrinfo, Deleter> addr);
23
30 std::unique_ptr<addrinfo, Deleter> data;
31};
32
39 NameInfoEvent(const char *host, const char *serv);
40
47 const char *hostname;
48
55 const char *service;
56};
57
66class GetAddrInfoReq final: public Request<GetAddrInfoReq, uv_getaddrinfo_t> {
67 static void addrInfoCallback(uv_getaddrinfo_t *req, int status, addrinfo *res);
68 void nodeAddrInfo(const char *node, const char *service, addrinfo *hints = nullptr);
69 auto nodeAddrInfoSync(const char *node, const char *service, addrinfo *hints = nullptr);
70
71public:
72 using Deleter = void (*)(addrinfo *);
73
74 using Request::Request;
75
82 void nodeAddrInfo(const std::string &node, addrinfo *hints = nullptr);
83
95 std::pair<bool, std::unique_ptr<addrinfo, Deleter>> nodeAddrInfoSync(const std::string &node, addrinfo *hints = nullptr);
96
103 void serviceAddrInfo(const std::string &service, addrinfo *hints = nullptr);
104
116 std::pair<bool, std::unique_ptr<addrinfo, Deleter>> serviceAddrInfoSync(const std::string &service, addrinfo *hints = nullptr);
117
125 void addrInfo(const std::string &node, const std::string &service, addrinfo *hints = nullptr);
126
139 std::pair<bool, std::unique_ptr<addrinfo, Deleter>> addrInfoSync(const std::string &node, const std::string &service, addrinfo *hints = nullptr);
140};
141
150class GetNameInfoReq final: public Request<GetNameInfoReq, uv_getnameinfo_t> {
151 static void nameInfoCallback(uv_getnameinfo_t *req, int status, const char *hostname, const char *service);
152
153public:
154 using Request::Request;
155
161 void nameInfo(const sockaddr &addr, int flags = 0);
162
169 template<typename I = IPv4>
170 void nameInfo(const std::string &ip, unsigned int port, int flags = 0);
171
177 template<typename I = IPv4>
178 void nameInfo(Addr addr, int flags = 0);
179
192 std::pair<bool, std::pair<const char *, const char *>> nameInfoSync(const sockaddr &addr, int flags = 0);
193
207 template<typename I = IPv4>
208 std::pair<bool, std::pair<const char *, const char *>> nameInfoSync(const std::string &ip, unsigned int port, int flags = 0);
209
222 template<typename I = IPv4>
223 std::pair<bool, std::pair<const char *, const char *>> nameInfoSync(Addr addr, int flags = 0);
224};
225
231// (extern) explicit instantiations
232#ifdef UVW_AS_LIB
233extern template void GetNameInfoReq::nameInfo<IPv4>(const std::string &, unsigned int, int);
234extern template void GetNameInfoReq::nameInfo<IPv6>(const std::string &, unsigned int, int);
235
236extern template void GetNameInfoReq::nameInfo<IPv4>(Addr, int);
237extern template void GetNameInfoReq::nameInfo<IPv6>(Addr, int);
238
239extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv4>(const std::string &, unsigned int, int);
240extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv6>(const std::string &, unsigned int, int);
241
242extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv4>(Addr, int);
243extern template std::pair<bool, std::pair<const char *, const char *>> GetNameInfoReq::nameInfoSync<IPv6>(Addr, int);
244#endif // UVW_AS_LIB
245
251} // namespace uvw
252
253#ifndef UVW_AS_LIB
254# include "dns.cpp"
255#endif
256
257#endif // UVW_DNS_INCLUDE_H
The GetAddrInfoReq request.
Definition dns.h:66
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 > > serviceAddrInfoSync(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.
The GetNameInfoReq request.
Definition dns.h:150
std::pair< bool, std::pair< const char *, const char * > > nameInfoSync(const std::string &ip, unsigned int port, 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.
std::pair< bool, std::pair< const char *, const char * > > nameInfoSync(Addr addr, int flags=0)
Sync getnameinfo.
void nameInfo(const std::string &ip, unsigned int port, int flags=0)
Async getnameinfo.
Request base class.
Definition request.hpp:18
uvw default namespace.
Definition async.h:8
AddrInfoEvent event.
Definition dns.h:19
std::unique_ptr< addrinfo, Deleter > data
An initialized instance of addrinfo.
Definition dns.h:30
Address representation.
Definition util.h:332
NameInfoEvent event.
Definition dns.h:38
const char * service
A valid service name.
Definition dns.h:55
const char * hostname
A valid hostname.
Definition dns.h:47