2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "net/in6/config/ConfigAddress.h"
44#include "net/config/ConfigAddressBase.hpp"
45#include "net/config/ConfigAddressLocal.hpp"
46#include "net/config/ConfigAddressRemote.hpp"
47#include "net/config/ConfigAddressReverse.hpp"
48#include "net/config/ConfigSection.hpp"
50#ifndef DOXYGEN_SHOULD_SKIP_THIS
52#include "core/system/netdb.h"
53#include "utils/PreserveErrno.h"
64 template <
template <
typename SocketAddress>
typename ConfigAddressType>
66 const std::string& addressOptionName,
67 const std::string& addressOptionDescription)
68 : Super(instance, addressOptionName, addressOptionDescription) {
71 "Suppress reverse host name lookup",
73 XSTR(IN6_NUMERIC_REVERSE),
74 CLI::IsMember({
"true",
"false"}));
77 template <
template <
typename SocketAddress>
typename ConfigAddressType>
79 SocketAddress::SockLen sockAddrLen) {
80 SocketAddress socketAddress;
83 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
85 socketAddress = Super::getSocketAddress(sockAddr, sockAddrLen);
86 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
94 template <
template <
typename SocketAddress>
typename ConfigAddressType>
97 ->default_str(numeric ?
"true" :
"false")
103 template <
template <
typename SocketAddress>
typename ConfigAddressType>
108 template <
template <
typename SocketAddress>
typename ConfigAddressType>
110 const std::string& addressOptionName,
111 const std::string& addressOptionDescription)
112 : Super(instance, addressOptionName, addressOptionDescription) {
115 "Host name or IPv6 address",
118 CLI::TypeValidator<std::string>());
124 CLI::Range(std::numeric_limits<uint16_t>::min(), std::numeric_limits<uint16_t>::max()));
127 "Suppress host name lookup",
130 CLI::IsMember({
"true",
"false"}));
133 "Suppress reverse host name lookup",
135 XSTR(IN6_NUMERIC_REVERSE),
136 CLI::IsMember({
"true",
"false"}));
139 "Resolve IPv4-mapped IPv6 addresses also",
141 XSTR(IN6_IPV4_MAPPED),
142 CLI::IsMember({
"true",
"false"}));
145 template <
template <
typename SocketAddress>
typename ConfigAddressType>
147 SocketAddress* socketAddress =
new SocketAddress
(hostOpt->as<std::string>()
, portOpt->as<uint16_t>()
);
150 socketAddress->init({.aiFlags = (aiFlags & ~AI_NUMERICHOST) | (numericOpt->as<
bool>() ? AI_NUMERICHOST : 0),
151 .aiSockType = aiSockType,
152 .aiProtocol = aiProtocol});
154 delete socketAddress;
155 socketAddress =
nullptr;
160 return socketAddress;
163 template <
template <
typename SocketAddress>
typename ConfigAddressType>
165 SocketAddress::SockLen sockAddrLen) {
166 SocketAddress socketAddress;
169 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
171 socketAddress = Super::getSocketAddress(sockAddr, sockAddrLen);
172 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
177 return socketAddress;
180 template <
template <
typename SocketAddress>
typename ConfigAddressType>
188 template <
template <
typename SocketAddress>
typename ConfigAddressType>
193 ->default_val(ipOrHostname)
195 Super::required(
hostOpt,
false);
200 template <
template <
typename SocketAddress>
typename ConfigAddressType>
202 return hostOpt->as<std::string>();
205 template <
template <
typename SocketAddress>
typename ConfigAddressType>
212 Super::required(
portOpt,
false);
217 template <
template <
typename SocketAddress>
typename ConfigAddressType>
219 return portOpt->as<uint16_t>();
222 template <
template <
typename SocketAddress>
typename ConfigAddressType>
227 ->default_str(numeric ?
"true" :
"false")
233 template <
template <
typename SocketAddress>
typename ConfigAddressType>
238 template <
template <
typename SocketAddress>
typename ConfigAddressType>
241 ->default_str(numeric ?
"true" :
"false")
247 template <
template <
typename SocketAddress>
typename ConfigAddressType>
252 ->default_val(ipv4Mapped)
258 template <
template <
typename SocketAddress>
typename ConfigAddressType>
263 template <
template <
typename SocketAddress>
typename ConfigAddressType>
270 template <
template <
typename SocketAddress>
typename ConfigAddressType>
275 template <
template <
typename SocketAddress>
typename ConfigAddressType>
282 template <
template <
typename SocketAddress>
typename ConfigAddressType>
287 template <
template <
typename SocketAddress>
typename ConfigAddressType>
294 template <
template <
typename SocketAddress>
typename ConfigAddressType>
299 template <
template <
typename SocketAddress>
typename ConfigAddressType>
301 Super::required(
hostOpt, required);
306 template <
template <
typename SocketAddress>
typename ConfigAddressType>
308 Super::required(
portOpt, required);
std::string getHost() const
SocketAddress(const std::string &ipOrHostname, uint16_t port)
SocketAddress(const SockAddr &sockAddr, SockLen sockAddrLen, bool numeric=true)
ConfigAddressReverse(net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)
CLI::Option * numericReverseOpt
ConfigAddressReverse & setNumericReverse(bool numeric=true)
SocketAddress getSocketAddress(const SocketAddress::SockAddr &sockAddr, SocketAddress::SockLen sockAddrLen)
bool getNumericReverse() const
ConfigAddress & setIpv4Mapped(bool ipv4Mapped=true)
ConfigAddress & setNumericReverse(bool numeric=true)
bool getIpv4Mapped() const
ConfigAddress & setAiFlags(int aiFlags)
CLI::Option * numericReverseOpt
ConfigAddress & setPortRequired(bool required=true)
SocketAddress getSocketAddress(const SocketAddress::SockAddr &sockAddr, SocketAddress::SockLen sockAddrLen)
ConfigAddress(net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)
ConfigAddress & setNumeric(bool numeric=true)
ConfigAddress & setPort(uint16_t port)
ConfigAddress & setSocketAddress(const SocketAddress &socketAddress)
int getAiProtocol() const
SocketAddress * init() final
ConfigAddress & setHost(const std::string &ipOrHostname)
ConfigAddress & setAiSockType(int aiSocktype)
ConfigAddress & setHostRequired(bool required=true)
std::string getHost() const
ConfigAddress & setAiProtocol(int aiProtocol)
CLI::Option * ipv4MappedOpt
int getAiSockType() const