E-MailRelay
|
The GNet::Address class encapsulates a TCP/UDP transport address. More...
#include <gaddress.h>
Classes | |
struct | Domain |
Overload discriminator for Address::supports() More... | |
struct | NotLocal |
Overload discriminator for Address::parse() More... | |
Public Types | |
enum class | Family { ipv4 , ipv6 , local } |
Public Member Functions | |
Address (const Address &) | |
Copy constructor. More... | |
Address (const AddressStorage &) | |
Constructor taking a storage object. More... | |
Address (const sockaddr *addr, socklen_t len) | |
Constructor using a given sockaddr. More... | |
Address (const sockaddr *addr, socklen_t len, bool fixup) | |
An overload that conditionally applies the bsd ipv6 scope-id fixup. More... | |
Address (Family, unsigned int port) | |
Constructor for a wildcard address like INADDR_ANY with the given port number. More... | |
Address (Address &&) noexcept | |
Move constructor. | |
~Address () | |
Destructor. | |
Address & | operator= (const Address &) |
Assignment operator. More... | |
Address & | operator= (Address &&) noexcept |
Move assignment operator. | |
const sockaddr * | address () const |
Returns the sockaddr address. More... | |
sockaddr * | address () |
This is a non-const version of address() for compiling on systems which are not properly const-clean. More... | |
socklen_t | length () const |
Returns the size of the sockaddr address. See address(). More... | |
std::string | displayString (bool with_scope_id=false) const |
Returns a string which represents the transport address. More... | |
std::string | hostPartString (bool raw=false) const |
Returns a string which represents the network address. More... | |
std::string | queryString () const |
Returns a string that can be used as a prefix for rDNS or DNSBL queries. More... | |
unsigned int | port () const |
Returns port part of the address. More... | |
Family | family () const |
Returns the address family enumeration. More... | |
int | af () const |
Returns the address family number such as AF_INET or AFINET6. More... | |
bool | sameHostPart (const Address &other) const |
Returns true if the two addresses have the same host part (ie. More... | |
Address & | setPort (unsigned int port) |
Sets the port number. More... | |
bool | setZone (const std::string &) |
Sets the zone. More... | |
Address & | setScopeId (unsigned long) |
Sets the scope-id. More... | |
unsigned long | scopeId (unsigned long default_=0UL) const |
Returns the scope-id. More... | |
G::StringArray | wildcards () const |
Returns an ordered list of wildcard strings that match this address. More... | |
unsigned int | bits () const |
Returns the number of leading bits set, relevant only to netmask addresses. More... | |
bool | isLoopback () const |
Returns true if this is a loopback address. More... | |
bool | isLinkLocal () const |
Returns true if this is a link-local address. More... | |
bool | isUniqueLocal () const |
Returns true if this is a locally administered address. More... | |
bool | isAny () const |
Returns true if this is the address family's 'any' address. More... | |
bool | isLocal (std::string &reason) const |
Returns true if this seems to be a 'local' address, ie. More... | |
bool | is4 () const |
Returns true if family() is ipv4. More... | |
bool | is6 () const |
Returns true if family() is ipv6. More... | |
bool | same (const Address &, bool ipv6_compare_with_scope) const |
Comparison function. More... | |
bool | operator== (const Address &) const |
Comparison operator. More... | |
bool | operator!= (const Address &) const |
Comparison operator. More... | |
void | swap (Address &other) noexcept |
Swaps this with other. More... | |
Static Public Member Functions | |
static bool | supports (Family) |
Returns true if the implementation supports the given address family. More... | |
static bool | supports (int af, int dummy) |
Returns true if the implementation supports the given address family given as AF_INET etc. More... | |
static bool | supports (const Domain &, int domain) |
Returns true if the implementation supports the given address domain given as PF_INET etc. More... | |
static Address | parse (const std::string &display_string) |
Factory function for any address family. More... | |
static Address | parse (const std::string &display_string, NotLocal) |
Factory function for Family::ipv4 or Family::ipv6. More... | |
static Address | parse (const std::string &host_part_string, unsigned int port) |
Factory function for Family::ipv4 or Family::ipv6. More... | |
static Address | parse (const std::string &host_part_string, const std::string &port) |
Factory function for Family::ipv4 or Family::ipv6. More... | |
static bool | isFamilyLocal (const std::string &display_string) |
Returns true if the given address display string looks will parse to Family::local and Family::local is supported. More... | |
static Address | defaultAddress () |
Returns a default address, being the IPv4 wildcard address with a zero port number. More... | |
static Address | loopback (Family, unsigned int port=0U) |
Returns a loopback address. More... | |
static int | domain (Family) |
Returns the address 'domain' for the given family, eg. More... | |
static bool | validPort (unsigned int n) |
Returns true if the port number is within the valid range. More... | |
static bool | validString (const std::string &display_string, std::string *reason=nullptr) |
Returns true if the transport-address display string is valid. More... | |
static bool | validString (const std::string &display_string, NotLocal, std::string *reason=nullptr) |
Returns true if the transport-address display string is valid. More... | |
static bool | validStrings (const std::string &ip, const std::string &port_string, std::string *reason=nullptr) |
Returns true if the combined network-address string and port string is valid. More... | |
static bool | validData (const sockaddr *, socklen_t len) |
Returns true if the sockaddr data is valid. More... | |
The GNet::Address class encapsulates a TCP/UDP transport address.
The address is exposed as a 'sockaddr' structure for low-level socket operations.
A multi-pimple pattern is used for the implementation, with implementation classes including GNet::Address4 and GNet::Address6. In an IPv4-only build the GNet::Address6 can be forward-declared but not defined, with all methods forwarded to the GNet::Address4 sub-object.
Definition at line 52 of file gaddress.h.
|
strong |
Definition at line 55 of file gaddress.h.
GNet::Address::Address | ( | const Address & | other | ) |
Copy constructor.
Definition at line 183 of file gaddress.cpp.
|
explicit |
Constructor taking a storage object.
Definition at line 63 of file gaddress.cpp.
GNet::Address::Address | ( | const sockaddr * | addr, |
socklen_t | len | ||
) |
Constructor using a given sockaddr.
Throws an exception if an invalid structure. See also: validData()
Definition at line 77 of file gaddress.cpp.
GNet::Address::Address | ( | const sockaddr * | addr, |
socklen_t | len, | ||
bool | fixup | ||
) |
An overload that conditionally applies the bsd ipv6 scope-id fixup.
Definition at line 93 of file gaddress.cpp.
GNet::Address::Address | ( | Family | f, |
unsigned int | port | ||
) |
Constructor for a wildcard address like INADDR_ANY with the given port number.
Throws an exception if an invalid port number. Postcondition: isAny()
Definition at line 51 of file gaddress.cpp.
sockaddr * GNet::Address::address | ( | ) |
This is a non-const version of address() for compiling on systems which are not properly const-clean.
Definition at line 425 of file gaddress.cpp.
const sockaddr * GNet::Address::address | ( | ) | const |
Returns the sockaddr address.
Typically used when making socket system calls. Never returns nullptr.
Definition at line 434 of file gaddress.cpp.
int GNet::Address::af | ( | ) | const |
Returns the address family number such as AF_INET or AFINET6.
Definition at line 500 of file gaddress.cpp.
unsigned int GNet::Address::bits | ( | ) | const |
Returns the number of leading bits set, relevant only to netmask addresses.
Definition at line 279 of file gaddress.cpp.
|
static |
Returns a default address, being the IPv4 wildcard address with a zero port number.
Definition at line 242 of file gaddress.cpp.
std::string GNet::Address::displayString | ( | bool | with_scope_id = false | ) | const |
Returns a string which represents the transport address.
Definition at line 375 of file gaddress.cpp.
|
static |
Returns the address 'domain' for the given family, eg.
PF_INET for Family::ipv4.
Definition at line 483 of file gaddress.cpp.
GNet::Address::Family GNet::Address::family | ( | ) | const |
Returns the address family enumeration.
Definition at line 491 of file gaddress.cpp.
std::string GNet::Address::hostPartString | ( | bool | raw = false | ) | const |
Returns a string which represents the network address.
For unix-domain sockets this returns the address path and if the 'raw' parameter is set then any non-printing characters are not escaped.
Definition at line 384 of file gaddress.cpp.
bool GNet::Address::is4 | ( | ) | const |
Returns true if family() is ipv4.
Definition at line 333 of file gaddress.cpp.
bool GNet::Address::is6 | ( | ) | const |
Returns true if family() is ipv6.
Definition at line 338 of file gaddress.cpp.
bool GNet::Address::isAny | ( | ) | const |
Returns true if this is the address family's 'any' address.
Definition at line 324 of file gaddress.cpp.
|
static |
Returns true if the given address display string looks will parse to Family::local and Family::local is supported.
The address may still fail to parse if it is invalid.
Definition at line 237 of file gaddress.cpp.
bool GNet::Address::isLinkLocal | ( | ) | const |
Returns true if this is a link-local address.
Definition at line 306 of file gaddress.cpp.
bool GNet::Address::isLocal | ( | std::string & | reason | ) | const |
Returns true if this seems to be a 'local' address, ie.
an address that is likely to be more trusted. Returns an explanation by reference otherwise.
Definition at line 297 of file gaddress.cpp.
bool GNet::Address::isLoopback | ( | ) | const |
Returns true if this is a loopback address.
Definition at line 288 of file gaddress.cpp.
bool GNet::Address::isUniqueLocal | ( | ) | const |
Returns true if this is a locally administered address.
Definition at line 315 of file gaddress.cpp.
socklen_t GNet::Address::length | ( | ) | const |
Returns the size of the sockaddr address. See address().
Definition at line 443 of file gaddress.cpp.
|
static |
Returns a loopback address.
Definition at line 247 of file gaddress.cpp.
bool GNet::Address::operator!= | ( | const Address & | other | ) | const |
Comparison operator.
Definition at line 361 of file gaddress.cpp.
GNet::Address & GNet::Address::operator= | ( | const Address & | other | ) |
Assignment operator.
Definition at line 208 of file gaddress.cpp.
bool GNet::Address::operator== | ( | const Address & | other | ) | const |
Comparison operator.
Definition at line 352 of file gaddress.cpp.
|
static |
Factory function for any address family.
Throws if an invalid string. See also validString().
Definition at line 217 of file gaddress.cpp.
|
static |
Factory function for Family::ipv4 or Family::ipv6.
Throws if an invalid string. See also validString().
Definition at line 222 of file gaddress.cpp.
|
static |
Factory function for Family::ipv4 or Family::ipv6.
Throws if an invalid string. See also validStrings().
Definition at line 232 of file gaddress.cpp.
|
static |
Factory function for Family::ipv4 or Family::ipv6.
Throws if an invalid string. See also validStrings().
Definition at line 227 of file gaddress.cpp.
unsigned int GNet::Address::port | ( | ) | const |
Returns port part of the address.
Definition at line 452 of file gaddress.cpp.
std::string GNet::Address::queryString | ( | ) | const |
Returns a string that can be used as a prefix for rDNS or DNSBL queries.
Definition at line 393 of file gaddress.cpp.
bool GNet::Address::same | ( | const Address & | other, |
bool | ipv6_compare_with_scope | ||
) | const |
Comparison function.
Definition at line 343 of file gaddress.cpp.
bool GNet::Address::sameHostPart | ( | const Address & | other | ) | const |
Returns true if the two addresses have the same host part (ie.
the network address, ignoring the port number).
Definition at line 366 of file gaddress.cpp.
unsigned long GNet::Address::scopeId | ( | unsigned long | default_ = 0UL | ) | const |
Returns the scope-id.
Returns the default if scope-ids are not supported by the underlying address type.
Definition at line 461 of file gaddress.cpp.
GNet::Address & GNet::Address::setPort | ( | unsigned int | port | ) |
Sets the port number.
Throws an exception if an invalid port number (ie. too big).
Definition at line 252 of file gaddress.cpp.
GNet::Address & GNet::Address::setScopeId | ( | unsigned long | ipv6_scope_id | ) |
Sets the scope-id.
Definition at line 270 of file gaddress.cpp.
bool GNet::Address::setZone | ( | const std::string & | ipv6_zone | ) |
Sets the zone.
The parameter is normally a decimal string representation of the zone-id, aka scope-id (eg. "1"), but if not numeric then it is treated as an interface name which is mapped to a zone-id by if_nametoindex(3). Returns false on error. Returns true if zones are not used by the address family.
Definition at line 261 of file gaddress.cpp.
|
static |
Returns true if the implementation supports the given address domain given as PF_INET etc.
Definition at line 46 of file gaddress.cpp.
|
static |
Returns true if the implementation supports the given address family.
Definition at line 33 of file gaddress.cpp.
|
static |
Returns true if the implementation supports the given address family given as AF_INET etc.
Definition at line 41 of file gaddress.cpp.
|
noexcept |
Swaps this with other.
Definition at line 200 of file gaddress.cpp.
|
static |
Returns true if the sockaddr data is valid.
This can be used to avoid exceptions from the relevant constructor.
Definition at line 475 of file gaddress.cpp.
|
static |
Returns true if the port number is within the valid range.
This can be used to avoid exceptions from the relevant constructors.
Definition at line 470 of file gaddress.cpp.
|
static |
Returns true if the transport-address display string is valid.
This can be used to avoid exceptions from the relevant constructor.
Definition at line 410 of file gaddress.cpp.
|
static |
Returns true if the transport-address display string is valid.
This can be used to avoid exceptions from the relevant constructor.
Definition at line 402 of file gaddress.cpp.
|
static |
Returns true if the combined network-address string and port string is valid.
This can be used to avoid exceptions from the relevant constructor.
Definition at line 417 of file gaddress.cpp.
G::StringArray GNet::Address::wildcards | ( | ) | const |
Returns an ordered list of wildcard strings that match this address.
The fully-address-specific string (eg. "192.168.0.1") comes first, and the most general match-all wildcard like "*.*.*.*" or "128.0.0.0/1" comes last.
Definition at line 509 of file gaddress.cpp.