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>
67 [[
maybe_unused]]
const std::string& addressOptionDescription)
69 , ConfigAddressType<net::in::SocketAddress>(
this) {
71 "--numeric-reverse{true}",
72 "Suppress reverse host name lookup",
74 XSTR(IN_NUMERIC_REVERSE),
75 CLI::IsMember({
"true",
"false"}));
78 template <
template <
typename SocketAddress>
typename ConfigAddressType>
85 template <
template <
typename SocketAddress>
typename ConfigAddressType>
90 template <
template <
typename SocketAddress>
typename ConfigAddressType>
92 SocketAddress::SockLen sockAddrLen) {
93 SocketAddress socketAddress;
96 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
98 socketAddress =
Super::getSocketAddress(sockAddr, sockAddrLen);
99 }
catch ([[maybe_unused]]
const SocketAddress::
BadSocketAddress& badSocketAddress) {
104 return socketAddress;
107 template <
template <
typename SocketAddress>
typename ConfigAddressType>
112 , ConfigAddressType<net::in::SocketAddress>(
this) {
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>
189 setDefaultValue(
hostOpt, ipOrHostname);
195 template <
template <
typename SocketAddress>
typename ConfigAddressType>
197 return hostOpt->as<std::string>();
200 template <
template <
typename SocketAddress>
typename ConfigAddressType>
204 setDefaultValue(
portOpt, port);
210 template <
template <
typename SocketAddress>
typename ConfigAddressType>
212 return portOpt->as<uint16_t>();
215 template <
template <
typename SocketAddress>
typename ConfigAddressType>
219 setDefaultValue(
numericOpt, numeric ?
"true" :
"false");
224 template <
template <
typename SocketAddress>
typename ConfigAddressType>
229 template <
template <
typename SocketAddress>
typename ConfigAddressType>
238 template <
template <
typename SocketAddress>
typename ConfigAddressType>
243 template <
template <
typename SocketAddressT>
typename ConfigAddressTypeT>
245 this->setConfigurable(
hostOpt, configurable);
246 this->setConfigurable(
portOpt, configurable);
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 this->required(
hostOpt, required);
292 template <
template <
typename SocketAddress>
typename ConfigAddressType>
294 this->required(
portOpt, required);
301template class net::config::ConfigAddress<net::in::SocketAddress>;
302template class net::config::ConfigAddressLocal<net::in::SocketAddress>;
303template class net::config::ConfigAddressRemote<net::in::SocketAddress>;
304template class net::config::ConfigAddressReverse<net::in::SocketAddress>;
305template class net::config::ConfigAddressBase<net::in::SocketAddress>;
SocketAddress(const std::string &ipOrHostname, uint16_t port)
std::string getHost() const
SocketAddress(const SockAddr &sockAddr, SockLen sockAddrLen, bool numeric=true)
void init(const Hints &hints={.aiFlags=0,.aiSockType=0,.aiProtocol=0})
ConfigAddressReverse(net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)
ConfigAddressReverse & setNumericReverse(bool numeric=true)
bool getNumericReverse() const
ConfigAddressTypeT< SocketAddress > Super
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 & setAiSockType(int aiSockType)
ConfigAddress & setPortRequired(bool required=true)
ConfigAddress & setSocketAddress(const SocketAddress &socketAddress)
ConfigAddressTypeT< net::in::SocketAddress > Super
ConfigAddress(net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)
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)
void configurable(bool configurable=true) final
ConfigAddress & setNumericReverse(bool numeric=true)
ConfigAddress & setPort(uint16_t port)
std::string getHost() const
CLI::Option * numericReverseOpt