libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
networkaddress.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <variant>
12#include <promeki/core/string.h>
13#include <promeki/core/result.h>
17
18#if defined(PROMEKI_PLATFORM_WINDOWS)
19# include <winsock2.h>
20# include <ws2tcpip.h>
21#elif !defined(PROMEKI_PLATFORM_EMSCRIPTEN)
22# include <sys/socket.h>
23# include <netinet/in.h>
24#endif
25
27
28class TextStream;
29
65 public:
67 enum Type {
68 None = 0,
72 };
73
85
86#if !defined(PROMEKI_PLATFORM_EMSCRIPTEN)
99 static Result<NetworkAddress> fromSockAddr(const struct sockaddr *addr, size_t len);
100#endif
101
103 NetworkAddress() = default;
104
109 NetworkAddress(const Ipv4Address &addr) : _data(addr) { }
110
115 NetworkAddress(const Ipv6Address &addr) : _data(addr) { }
116
121 explicit NetworkAddress(const String &hostname) : _data(hostname) { }
122
124 Type type() const;
125
127 bool isNull() const { return std::holds_alternative<std::monostate>(_data); }
128
130 bool isIPv4() const { return std::holds_alternative<Ipv4Address>(_data); }
131
133 bool isIPv6() const { return std::holds_alternative<Ipv6Address>(_data); }
134
136 bool isHostname() const { return std::holds_alternative<String>(_data); }
137
139 bool isResolved() const { return isIPv4() || isIPv6(); }
140
146
152
158
164 bool isLoopback() const;
165
172 bool isMulticast() const;
173
180 bool isLinkLocal() const;
181
190
191#if !defined(PROMEKI_PLATFORM_EMSCRIPTEN)
204 size_t toSockAddr(struct sockaddr_storage *storage) const;
205#endif
206
208 bool operator==(const NetworkAddress &other) const { return _data == other._data; }
210 bool operator!=(const NetworkAddress &other) const { return _data != other._data; }
211
212 private:
213 std::variant<std::monostate, Ipv4Address, Ipv6Address, String> _data;
214};
215
218
IPv4 network address.
Definition ipv4address.h:51
IPv6 network address.
Definition ipv6address.h:52
Dynamic array container wrapping std::vector.
Definition list.h:40
High-level network address that can represent IPv4, IPv6, or an unresolved hostname.
Definition networkaddress.h:64
bool isLinkLocal() const
Returns true if the address is link-local.
bool isMulticast() const
Returns true if the address is a multicast address.
bool operator==(const NetworkAddress &other) const
Equality comparison.
Definition networkaddress.h:208
String hostname() const
Returns the stored hostname.
bool isNull() const
Returns true if no address is stored.
Definition networkaddress.h:127
Ipv4Address toIpv4() const
Returns the stored IPv4 address.
String toString() const
Returns a string representation.
Type type() const
Returns the type of address stored.
bool isLoopback() const
Returns true if the address is a loopback address.
NetworkAddress(const Ipv4Address &addr)
Constructs from an IPv4 address.
Definition networkaddress.h:109
static Result< NetworkAddress > fromSockAddr(const struct sockaddr *addr, size_t len)
Constructs from a POSIX/Windows sockaddr structure.
NetworkAddress(const Ipv6Address &addr)
Constructs from an IPv6 address.
Definition networkaddress.h:115
bool isResolved() const
Returns true if this holds a resolved IP address (IPv4 or IPv6).
Definition networkaddress.h:139
bool isIPv4() const
Returns true if this holds an IPv4 address.
Definition networkaddress.h:130
NetworkAddress(const String &hostname)
Constructs from a hostname string (unresolved).
Definition networkaddress.h:121
size_t toSockAddr(struct sockaddr_storage *storage) const
Fills a sockaddr_storage with this address.
static Result< NetworkAddress > fromString(const String &str)
Parses a string into a NetworkAddress.
Ipv6Address toIpv6() const
Returns the stored IPv6 address.
bool isHostname() const
Returns true if this holds an unresolved hostname.
Definition networkaddress.h:136
bool isIPv6() const
Returns true if this holds an IPv6 address.
Definition networkaddress.h:133
bool operator!=(const NetworkAddress &other) const
Inequality comparison.
Definition networkaddress.h:210
NetworkAddress()=default
Default constructor. Creates a null address.
Type
The kind of address stored.
Definition networkaddress.h:67
@ Hostname
Unresolved hostname string.
Definition networkaddress.h:71
@ None
No address set.
Definition networkaddress.h:68
@ IPv4
Resolved IPv4 address.
Definition networkaddress.h:69
@ IPv6
Resolved IPv6 address.
Definition networkaddress.h:70
Encoding-aware string class with copy-on-write semantics.
Definition string.h:35
Formatted text I/O with encoding awareness.
Definition textstream.h:54
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19
TextStream & operator<<(TextStream &stream, const NetworkAddress &addr)
Writes the network address to the stream.