SNode.C
Loading...
Searching...
No Matches
net::in6::config::ConfigAddress< ConfigAddressTypeT > Class Template Reference

#include <ConfigAddress.h>

Inheritance diagram for net::in6::config::ConfigAddress< ConfigAddressTypeT >:
Collaboration diagram for net::in6::config::ConfigAddress< ConfigAddressTypeT >:

Public Member Functions

SocketAddress getSocketAddress (const SocketAddress::SockAddr &sockAddr, SocketAddress::SockLen sockAddrLen)
 
ConfigAddresssetSocketAddress (const SocketAddress &socketAddress)
 
ConfigAddresssetHost (const std::string &ipOrHostname)
 
std::string getHost () const
 
ConfigAddresssetPort (uint16_t port)
 
uint16_t getPort () const
 
ConfigAddresssetNumeric (bool numeric=true)
 
bool getNumeric () const
 
ConfigAddresssetNumericReverse (bool numeric=true)
 
bool getNumericReverse () const
 

Protected Member Functions

 ConfigAddress (net::config::ConfigInstance *instance, const std::string &addressOptionName, const std::string &addressOptionDescription)
 
ConfigAddresssetIpv4Mapped (bool ipv4Mapped=true)
 
bool getIpv4Mapped () const
 
ConfigAddresssetAiFlags (int aiFlags)
 
int getAiFlags () const
 
ConfigAddresssetAiSockType (int aiSocktype)
 
int getAiSockType () const
 
ConfigAddresssetAiProtocol (int aiProtocol)
 
int getAiProtocol () const
 
ConfigAddresssetHostRequired (bool required=true)
 
ConfigAddresssetPortRequired (bool required=true)
 

Private Types

using Super = ConfigAddressTypeT<SocketAddress>
 

Private Member Functions

SocketAddressinit () final
 

Private Attributes

CLI::Option * hostOpt = nullptr
 
CLI::Option * portOpt = nullptr
 
CLI::Option * numericOpt = nullptr
 
CLI::Option * numericReverseOpt = nullptr
 
CLI::Option * ipv4MappedOpt = nullptr
 
int aiFlags = 0
 
int aiSockType = 0
 
int aiProtocol = 0
 

Detailed Description

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
class net::in6::config::ConfigAddress< ConfigAddressTypeT >

Definition at line 90 of file ConfigAddress.h.

Member Typedef Documentation

◆ Super

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
using net::in6::config::ConfigAddress< ConfigAddressTypeT >::Super = ConfigAddressTypeT<SocketAddress>
private

Definition at line 92 of file ConfigAddress.h.

Constructor & Destructor Documentation

◆ ConfigAddress()

template<template< typename SocketAddress > typename ConfigAddressType>
net::in6::config::ConfigAddress< ConfigAddressType >::ConfigAddress ( net::config::ConfigInstance * instance,
const std::string & addressOptionName,
const std::string & addressOptionDescription )
explicitprotected

Definition at line 109 of file ConfigAddress.cpp.

112 : Super(instance, addressOptionName, addressOptionDescription) {
113 hostOpt = Super::addOption( //
114 "--host",
115 "Host name or IPv6 address",
116 "hostname|IPv6",
117 "::",
118 CLI::TypeValidator<std::string>());
119 portOpt = Super::addOption( //
120 "--port",
121 "Port number",
122 "port",
123 0,
124 CLI::Range(std::numeric_limits<uint16_t>::min(), std::numeric_limits<uint16_t>::max()));
125 numericOpt = Super::addFlag( //
126 "--numeric",
127 "Suppress host name lookup",
128 "bool",
129 XSTR(IN6_NUMERIC),
130 CLI::IsMember({"true", "false"}));
131 numericReverseOpt = Super::addFlag( //
132 "--numeric-reverse",
133 "Suppress reverse host name lookup",
134 "bool",
135 XSTR(IN6_NUMERIC_REVERSE),
136 CLI::IsMember({"true", "false"}));
137 ipv4MappedOpt = Super::addFlag( //
138 "--ipv4-mapped",
139 "Resolve IPv4-mapped IPv6 addresses also",
140 "bool",
141 XSTR(IN6_IPV4_MAPPED),
142 CLI::IsMember({"true", "false"}));
143 }
#define XSTR(s)
ConfigAddressTypeT< SocketAddress > Super

Member Function Documentation

◆ getAiFlags()

template<template< typename SocketAddress > typename ConfigAddressType>
int net::in6::config::ConfigAddress< ConfigAddressType >::getAiFlags ( ) const
protected

Definition at line 271 of file ConfigAddress.cpp.

271 {
272 return aiFlags;
273 }

◆ getAiProtocol()

template<template< typename SocketAddress > typename ConfigAddressType>
int net::in6::config::ConfigAddress< ConfigAddressType >::getAiProtocol ( ) const
protected

Definition at line 295 of file ConfigAddress.cpp.

295 {
296 return aiProtocol;
297 }

◆ getAiSockType()

template<template< typename SocketAddress > typename ConfigAddressType>
int net::in6::config::ConfigAddress< ConfigAddressType >::getAiSockType ( ) const
protected

Definition at line 283 of file ConfigAddress.cpp.

283 {
284 return aiSockType;
285 }

◆ getHost()

template<template< typename SocketAddress > typename ConfigAddressType>
std::string net::in6::config::ConfigAddress< ConfigAddressType >::getHost ( ) const

Definition at line 201 of file ConfigAddress.cpp.

201 {
202 return hostOpt->as<std::string>();
203 }

◆ getIpv4Mapped()

template<template< typename SocketAddress > typename ConfigAddressType>
bool net::in6::config::ConfigAddress< ConfigAddressType >::getIpv4Mapped ( ) const
protected

Definition at line 259 of file ConfigAddress.cpp.

259 {
260 return ipv4MappedOpt->as<bool>();
261 }

◆ getNumeric()

template<template< typename SocketAddress > typename ConfigAddressType>
bool net::in6::config::ConfigAddress< ConfigAddressType >::getNumeric ( ) const

Definition at line 234 of file ConfigAddress.cpp.

234 {
235 return numericOpt->as<bool>();
236 }

◆ getNumericReverse()

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
bool net::in6::config::ConfigAddress< ConfigAddressTypeT >::getNumericReverse ( ) const

◆ getPort()

template<template< typename SocketAddress > typename ConfigAddressType>
uint16_t net::in6::config::ConfigAddress< ConfigAddressType >::getPort ( ) const

Definition at line 218 of file ConfigAddress.cpp.

218 {
219 return portOpt->as<uint16_t>();
220 }

◆ getSocketAddress()

template<template< typename SocketAddress > typename ConfigAddressType>
SocketAddress net::in6::config::ConfigAddress< ConfigAddressType >::getSocketAddress ( const SocketAddress::SockAddr & sockAddr,
SocketAddress::SockLen sockAddrLen )

Definition at line 164 of file ConfigAddress.cpp.

165 {
166 SocketAddress socketAddress;
167 try {
168 socketAddress = SocketAddress(sockAddr, sockAddrLen, numericReverseOpt->as<bool>());
169 } catch ([[maybe_unused]] const SocketAddress::BadSocketAddress& badSocketAddress) {
170 try {
171 socketAddress = Super::getSocketAddress(sockAddr, sockAddrLen);
172 } catch ([[maybe_unused]] const SocketAddress::BadSocketAddress& badSocketAddress) {
173 throw;
174 }
175 }
176
177 return socketAddress;
178 }
SocketClient::SocketAddress SocketAddress

◆ init()

template<template< typename SocketAddress > typename ConfigAddressType>
SocketAddress * net::in6::config::ConfigAddress< ConfigAddressType >::init ( )
finalprivate

Definition at line 146 of file ConfigAddress.cpp.

146 {
147 SocketAddress* socketAddress = new SocketAddress(hostOpt->as<std::string>(), portOpt->as<uint16_t>());
148
149 try {
150 socketAddress->init({.aiFlags = (aiFlags & ~AI_NUMERICHOST) | (numericOpt->as<bool>() ? AI_NUMERICHOST : 0),
154 delete socketAddress;
155 socketAddress = nullptr;
156
157 throw;
158 }
159
160 return socketAddress;
161 }

◆ setAiFlags()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setAiFlags ( int aiFlags)
protected

Definition at line 264 of file ConfigAddress.cpp.

264 {
265 this->aiFlags = aiFlags;
266
267 return *this;
268 }

◆ setAiProtocol()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setAiProtocol ( int aiProtocol)
protected

Definition at line 288 of file ConfigAddress.cpp.

288 {
289 this->aiProtocol = aiProtocol;
290
291 return *this;
292 }

◆ setAiSockType()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setAiSockType ( int aiSocktype)
protected

Definition at line 276 of file ConfigAddress.cpp.

276 {
277 this->aiSockType = aiSockType;
278
279 return *this;
280 }

◆ setHost()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setHost ( const std::string & ipOrHostname)

Definition at line 189 of file ConfigAddress.cpp.

189 {
190 const utils::PreserveErrno preserveErrno;
191
192 hostOpt //
193 ->default_val(ipOrHostname)
194 ->clear();
195 Super::required(hostOpt, false);
196
197 return *this;
198 }

◆ setHostRequired()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setHostRequired ( bool required = true)
protected

Definition at line 300 of file ConfigAddress.cpp.

300 {
301 Super::required(hostOpt, required);
302
303 return *this;
304 }

◆ setIpv4Mapped()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setIpv4Mapped ( bool ipv4Mapped = true)
protected

Definition at line 248 of file ConfigAddress.cpp.

248 {
249 const utils::PreserveErrno preserveErrno;
250
252 ->default_val(ipv4Mapped)
253 ->clear();
254
255 return *this;
256 }

◆ setNumeric()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setNumeric ( bool numeric = true)

Definition at line 223 of file ConfigAddress.cpp.

223 {
224 const utils::PreserveErrno preserveErrno;
225
226 numericOpt //
227 ->default_str(numeric ? "true" : "false")
228 ->clear();
229
230 return *this;
231 }

◆ setNumericReverse()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setNumericReverse ( bool numeric = true)

Definition at line 239 of file ConfigAddress.cpp.

239 {
241 ->default_str(numeric ? "true" : "false")
242 ->clear();
243
244 return *this;
245 }

◆ setPort()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setPort ( uint16_t port)

Definition at line 206 of file ConfigAddress.cpp.

206 {
207 const utils::PreserveErrno preserveErrno;
208
209 portOpt //
210 ->default_val(port)
211 ->clear();
212 Super::required(portOpt, false);
213
214 return *this;
215 }

◆ setPortRequired()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setPortRequired ( bool required = true)
protected

Definition at line 307 of file ConfigAddress.cpp.

307 {
308 Super::required(portOpt, required);
309
310 return *this;
311 }

◆ setSocketAddress()

template<template< typename SocketAddress > typename ConfigAddressType>
ConfigAddress< ConfigAddressType > & net::in6::config::ConfigAddress< ConfigAddressType >::setSocketAddress ( const SocketAddress & socketAddress)

Definition at line 181 of file ConfigAddress.cpp.

181 {
182 setHost(socketAddress.getHost());
183 setPort(socketAddress.getPort());
184
185 return *this;
186 }
ConfigAddress & setPort(uint16_t port)
ConfigAddress & setHost(const std::string &ipOrHostname)

Member Data Documentation

◆ aiFlags

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
int net::in6::config::ConfigAddress< ConfigAddressTypeT >::aiFlags = 0
private

Definition at line 143 of file ConfigAddress.h.

◆ aiProtocol

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
int net::in6::config::ConfigAddress< ConfigAddressTypeT >::aiProtocol = 0
private

Definition at line 145 of file ConfigAddress.h.

◆ aiSockType

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
int net::in6::config::ConfigAddress< ConfigAddressTypeT >::aiSockType = 0
private

Definition at line 144 of file ConfigAddress.h.

◆ hostOpt

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
CLI::Option* net::in6::config::ConfigAddress< ConfigAddressTypeT >::hostOpt = nullptr
private

Definition at line 137 of file ConfigAddress.h.

◆ ipv4MappedOpt

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
CLI::Option* net::in6::config::ConfigAddress< ConfigAddressTypeT >::ipv4MappedOpt = nullptr
private

Definition at line 141 of file ConfigAddress.h.

◆ numericOpt

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
CLI::Option* net::in6::config::ConfigAddress< ConfigAddressTypeT >::numericOpt = nullptr
private

Definition at line 139 of file ConfigAddress.h.

◆ numericReverseOpt

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
CLI::Option* net::in6::config::ConfigAddress< ConfigAddressTypeT >::numericReverseOpt = nullptr
private

Definition at line 140 of file ConfigAddress.h.

◆ portOpt

template<template< typename SocketAddressT > typename ConfigAddressTypeT>
CLI::Option* net::in6::config::ConfigAddress< ConfigAddressTypeT >::portOpt = nullptr
private

Definition at line 138 of file ConfigAddress.h.


The documentation for this class was generated from the following files: