1#ifndef LIBS_COMM_CSOCKETADDRESS_HPP_
2#define LIBS_COMM_CSOCKETADDRESS_HPP_
32 if constexpr (std::is_same<T, sockaddr_in>::value)
36 if (inet_pton(AF_INET, address, &
m_sockaddr->sin_addr) <= 0)
38 throw std::runtime_error(
"Invalid address");
41 else if constexpr (std::is_same<T, sockaddr_in6>::value)
45 if (inet_pton(AF_INET6, address, &
m_sockaddr->sin6_addr) <= 0)
47 throw std::runtime_error(
"Invalid address");
52 throw std::runtime_error(
"Invalid address family");
60 return reinterpret_cast<sockaddr *
>(
m_sockaddr.get());
73 [[nodiscard]] socklen_t
size()
const
75 return sizeof(*m_sockaddr);
94 [[nodiscard]]
virtual socklen_t
size()
const = 0;
102 return p ? p->sa_family : AF_UNSPEC;
115 throw std::length_error(
"Address length out of range");
125 throw std::length_error(
"Address length out of range");
131 [[nodiscard]] socklen_t
size()
const override
138 return reinterpret_cast<sockaddr *
>(&
m_address);
143 return reinterpret_cast<const sockaddr *
>(&
m_address);
162 create(in_addr_t(INADDR_ANY), port);
197 return ((
const uint8_t *) &addr)[i];
200 void create(in_addr_t address, in_port_t port);
203 [[nodiscard]] std::string
ip()
const
209 [[nodiscard]] std::string
toString()
const;
221 [[nodiscard]] socklen_t
size()
const override
228 return reinterpret_cast<sockaddr *
>(&
m_address);
233 return reinterpret_cast<const sockaddr *
>(&
m_address);
238 return static_cast<sockaddr_in *
>(&
m_address);
243 return static_cast<const sockaddr_in *
>(&
m_address);
246 [[nodiscard]]
bool isSet()
const;
265 const in6_addr ANY IN6ADDR_ANY_INIT;
299 void create(
const in6_addr &address, in_port_t port);
300 void create(
const std::string &address, in_port_t port);
304 const in6_addr LOOPBACK IN6ADDR_LOOPBACK_INIT;
307 addr.
create(LOOPBACK, port);
312 static in6_addr
resolveName(
const std::string &address);
314 [[nodiscard]] std::string
toString()
const;
326 [[nodiscard]] socklen_t
size()
const override
333 return reinterpret_cast<const sockaddr *
>(&
m_address);
338 return reinterpret_cast<sockaddr *
>(&
m_address);
351 [[nodiscard]]
bool isSet()
const;
std::ostream & operator<<(std::ostream &os, const CIpV4Address &address)
Definition CSocketAddress.cpp:137
Definition CSocketAddress.hpp:154
std::string toString() const
Definition CSocketAddress.cpp:54
static constexpr size_t kSizeAddressStruct
Definition CSocketAddress.hpp:251
static constexpr sa_family_t ADDRESS_FAMILY
Definition CSocketAddress.hpp:156
CIpV4Address(in_addr_t address, in_port_t port)
Definition CSocketAddress.hpp:165
bool isSet() const
Definition CSocketAddress.cpp:62
const sockaddr_in * getSocketAddressIn() const
Definition CSocketAddress.hpp:241
CIpV4Address(const CIpV4Address &address)
Definition CSocketAddress.hpp:189
const sockaddr * getSocketAddress() const override
Definition CSocketAddress.hpp:231
CIpV4Address(in_port_t port)
Definition CSocketAddress.hpp:160
sockaddr_in m_address
Definition CSocketAddress.hpp:249
uint8_t operator[](int32_t i) const
Definition CSocketAddress.hpp:193
static in_addr_t resolveName(const iv::types::ipAddress &address)
Definition CSocketAddress.cpp:21
in_addr_t getAddress() const
Definition CSocketAddress.hpp:211
CIpV4Address(const CSocketAddress &address)
Definition CSocketAddress.hpp:180
void create(in_addr_t address, in_port_t port)
Definition CSocketAddress.cpp:5
CIpV4Address(const sockaddr_in &address)
Definition CSocketAddress.hpp:185
sockaddr * getSocketAddress() override
Definition CSocketAddress.hpp:226
sockaddr_in * getSocketAddressIn()
Definition CSocketAddress.hpp:236
socklen_t size() const override
Definition CSocketAddress.hpp:221
in_port_t getPort() const
Definition CSocketAddress.hpp:216
CIpV4Address(const sockaddr &address)
Definition CSocketAddress.hpp:175
CIpV4Address(const iv::types::ipAddress &address, in_port_t port)
Definition CSocketAddress.hpp:170
std::string ip() const
Definition CSocketAddress.hpp:203
Definition CSocketAddress.hpp:255
std::string toString() const
Definition CSocketAddress.cpp:121
socklen_t size() const override
Definition CSocketAddress.hpp:326
sockaddr_in6 m_address
Definition CSocketAddress.hpp:354
CIpV6Address()
Definition CSocketAddress.hpp:259
static in6_addr resolveName(const std::string &address)
Definition CSocketAddress.cpp:87
CIpV6Address(const sockaddr_storage &address)
Definition CSocketAddress.hpp:275
CIpV6Address(const CSocketAddress &address)
Definition CSocketAddress.hpp:280
in_port_t getPort() const
Definition CSocketAddress.hpp:321
const sockaddr * getSocketAddress() const override
Definition CSocketAddress.hpp:331
static constexpr sa_family_t ADDRESS_FAMILY
Definition CSocketAddress.hpp:257
sockaddr * getSocketAddress() override
Definition CSocketAddress.hpp:336
static CIpV6Address loopBack(in_port_t port)
Definition CSocketAddress.hpp:302
void create(const in6_addr &address, in_port_t port)
Definition CSocketAddress.cpp:69
in6_addr getAddress() const
Definition CSocketAddress.hpp:316
const sockaddr_in6 * getSocketAddressIn6() const
Definition CSocketAddress.hpp:341
CIpV6Address(const sockaddr_in6 &address)
Definition CSocketAddress.hpp:285
CIpV6Address(const std::string &address, in_port_t port)
Definition CSocketAddress.hpp:270
uint8_t operator[](int32_t i) const
Definition CSocketAddress.hpp:294
bool isSet() const
Definition CSocketAddress.cpp:130
static constexpr size_t kSizeAddressStruct
Definition CSocketAddress.hpp:356
CIpV6Address(in_port_t port)
Definition CSocketAddress.hpp:263
sockaddr_in6 * getSocketAddressIn6()
Definition CSocketAddress.hpp:346
CIpV6Address(const CIpV6Address &address)
Definition CSocketAddress.hpp:290
Definition CSocketAddress.hpp:107
const sockaddr * getSocketAddress() const override
Definition CSocketAddress.hpp:141
static constexpr size_t kPrvMaxSize
Definition CSocketAddress.hpp:150
CSocketAddressAny()=default
CSocketAddressAny(const sockaddr_storage &address, socklen_t size)
Definition CSocketAddress.hpp:121
sockaddr_storage m_address
Definition CSocketAddress.hpp:147
sockaddr * getSocketAddress() override
Definition CSocketAddress.hpp:136
socklen_t m_size
Definition CSocketAddress.hpp:148
CSocketAddressAny(const sockaddr *address, socklen_t size)
Definition CSocketAddress.hpp:111
socklen_t size() const override
Definition CSocketAddress.hpp:131
Definition CSocketAddress.hpp:91
virtual const sockaddr * getSocketAddress() const =0
virtual sa_family_t getFamily() const
Definition CSocketAddress.hpp:99
virtual ~CSocketAddress()=default
virtual sockaddr * getSocketAddress()=0
virtual socklen_t size() const =0
Definition CSocketAddress.hpp:18
uint16_t getPort() const
Definition CSocketAddress.hpp:68
socklen_t size() const
Definition CSocketAddress.hpp:73
SocketAddress(std::string_view address, uint16_t port)
Definition CSocketAddress.hpp:26
std::unique_ptr< T > m_sockaddr
Definition address.hpp:17
sockaddr * getSocketAddress() const
Definition CSocketAddress.hpp:58
sa_family_t getFamily() const
Definition CSocketAddress.hpp:78
std::string m_address
Definition address.hpp:19
std::string getAdresss() const
Definition CSocketAddress.hpp:63
sa_family_t m_family
Definition address.hpp:18
uint16_t m_port
Definition address.hpp:20
Definition address.hpp:12
SocketAddress< sockaddr_in6 > IPv6Address
Definition address.hpp:84
SocketAddress< sockaddr_in > IPv4Address
Definition address.hpp:83
std::string ipAddress
Definition types.hpp:40