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/in/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) {
70 "--numeric-reverse{true}",
71 "Suppress reverse host name lookup",
73 XSTR(IN_NUMERIC_REVERSE),
74 CLI::IsMember({
"true",
"false"}));
77 template <
template <
typename SocketAddress>
typename ConfigAddressType>
80 ->default_str(numeric ?
"true" :
"false")
86 template <
template <
typename SocketAddress>
typename ConfigAddressType>
91 template <
template <
typename SocketAddress>
typename ConfigAddressType>
93 SocketAddress::SockLen sockAddrLen) {
94 SocketAddress socketAddress;
97 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
99 socketAddress = Super::getSocketAddress(sockAddr, sockAddrLen);
100 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
105 return socketAddress;
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 IPv4 address",
118 CLI::TypeValidator<std::string>());
125 CLI::Range(std::numeric_limits<uint16_t>::min(), std::numeric_limits<uint16_t>::max()));
129 "Suppress host name lookup",
132 CLI::IsMember({
"true",
"false"}));
135 "--numeric-reverse{true}",
136 "Suppress reverse host name lookup",
138 XSTR(IN_NUMERIC_REVERSE),
139 CLI::IsMember({
"true",
"false"}));
142 template <
template <
typename SocketAddress>
typename ConfigAddressType>
144 SocketAddress* socketAddress =
new SocketAddress
(hostOpt->as<std::string>()
, portOpt->as<uint16_t>()
);
147 socketAddress->init({.aiFlags = (aiFlags & ~AI_NUMERICHOST) | (numericOpt->as<
bool>() ? AI_NUMERICHOST : 0),
148 .aiSockType = aiSockType,
149 .aiProtocol = aiProtocol});
151 delete socketAddress;
152 socketAddress =
nullptr;
157 return socketAddress;
160 template <
template <
typename SocketAddress>
typename ConfigAddressType>
162 SocketAddress::SockLen sockAddrLen) {
163 SocketAddress socketAddress;
166 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
168 socketAddress = Super::getSocketAddress(sockAddr, sockAddrLen);
169 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
174 return socketAddress;
177 template <
template <
typename SocketAddress>
typename ConfigAddressType>
185 template <
template <
typename SocketAddress>
typename ConfigAddressType>
190 ->default_val(ipOrHostname)
192 Super::required(
hostOpt,
false);
197 template <
template <
typename SocketAddress>
typename ConfigAddressType>
199 return hostOpt->as<std::string>();
202 template <
template <
typename SocketAddress>
typename ConfigAddressType>
209 Super::required(
portOpt,
false);
214 template <
template <
typename SocketAddress>
typename ConfigAddressType>
216 return portOpt->as<uint16_t>();
219 template <
template <
typename SocketAddress>
typename ConfigAddressType>
224 ->default_str(numeric ?
"true" :
"false")
230 template <
template <
typename SocketAddress>
typename ConfigAddressType>
235 template <
template <
typename SocketAddress>
typename ConfigAddressType>
238 ->default_str(numeric ?
"true" :
"false")
244 template <
template <
typename SocketAddress>
typename ConfigAddressType>
249 template <
template <
typename SocketAddress>
typename ConfigAddressType>
256 template <
template <
typename SocketAddress>
typename ConfigAddressType>
261 template <
template <
typename SocketAddress>
typename ConfigAddressType>
268 template <
template <
typename SocketAddress>
typename ConfigAddressType>
273 template <
template <
typename SocketAddress>
typename ConfigAddressType>
280 template <
template <
typename SocketAddress>
typename ConfigAddressType>
285 template <
template <
typename SocketAddress>
typename ConfigAddressType>
287 Super::required(
hostOpt, required);
292 template <
template <
typename SocketAddress>
typename ConfigAddressType>
294 Super::required(
portOpt, required);
SocketAddress(const std::string &ipOrHostname, uint16_t port)
std::string getHost() const
SocketAddress(const SockAddr &sockAddr, SockLen sockAddrLen, bool numeric=true)
ConfigAddressReverse(net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)
ConfigAddressReverse & setNumericReverse(bool numeric=true)
bool getNumericReverse() const
CLI::Option * numericReverseOpt
SocketAddress getSocketAddress(const SocketAddress::SockAddr &sockAddr, SocketAddress::SockLen sockAddrLen)
int getAiProtocol() const
SocketAddress getSocketAddress(const SocketAddress::SockAddr &sockAddr, SocketAddress::SockLen sockAddrLen)
ConfigAddress & setPortRequired(bool required=true)
ConfigAddress & setSocketAddress(const SocketAddress &socketAddress)
ConfigAddress(net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)
ConfigAddress & setAiSockType(int aiSocktype)
ConfigAddress & setHostRequired(bool required=true)
ConfigAddress & setHost(const std::string &ipOrHostname)
SocketAddress * init() final
ConfigAddress & setAiFlags(int aiFlags)
int getAiSockType() const
ConfigAddress & setNumeric(bool numeric=true)
bool getNumericReverse() const
ConfigAddress & setAiProtocol(int aiProtocol)
ConfigAddress & setNumericReverse(bool numeric=true)
ConfigAddress & setPort(uint16_t port)
std::string getHost() const
CLI::Option * numericReverseOpt