OpenTTD Source
20241108-master-g80f628063a
|
Wrapper for (un)resolved network addresses; there's no reason to transform a numeric IP to a string and then back again to pass it to functions. More...
#include <address.h>
Public Member Functions | |
NetworkAddress (struct sockaddr_storage &address, int address_length) | |
Create a network address based on a resolved IP and port. More... | |
NetworkAddress (sockaddr *address, int address_length) | |
Create a network address based on a resolved IP and port. More... | |
NetworkAddress (std::string_view hostname="", uint16_t port=0, int family=AF_UNSPEC) | |
Create a network address based on a unresolved host and port. More... | |
const std::string & | GetHostname () |
Get the hostname; in case it wasn't given the IPv4 dotted representation is given. More... | |
std::string | GetAddressAsString (bool with_family=true) |
Get the address as a string, e.g. More... | |
const sockaddr_storage * | GetAddress () |
Get the address in its internal representation. More... | |
int | GetAddressLength () |
Get the (valid) length of the address. More... | |
uint16_t | GetPort () const |
Get the port. More... | |
void | SetPort (uint16_t port) |
Set the port. More... | |
bool | IsResolved () const |
Check whether the IP address has been resolved already. More... | |
bool | IsFamily (int family) |
Checks of this address is of the given family. More... | |
bool | IsInNetmask (const std::string &netmask) |
Checks whether this IP address is contained by the given netmask. More... | |
int | CompareTo (NetworkAddress &address) |
Compare the address of this class with the address of another. More... | |
bool | operator== (NetworkAddress &address) |
Compare the address of this class with the address of another. More... | |
bool | operator== (NetworkAddress &address) const |
Compare the address of this class with the address of another. More... | |
bool | operator!= (NetworkAddress address) const |
Compare the address of this class with the address of another. More... | |
bool | operator< (NetworkAddress &address) |
Compare the address of this class with the address of another. More... | |
void | Listen (int socktype, SocketList *sockets) |
Make the given socket listen. More... | |
Static Public Member Functions | |
static const char * | SocketTypeAsString (int socktype) |
Convert the socket type into a string. More... | |
static const char * | AddressFamilyAsString (int family) |
Convert the address family into a string. More... | |
static NetworkAddress | GetPeerAddress (SOCKET sock) |
Get the peer address of a socket as NetworkAddress. More... | |
static NetworkAddress | GetSockAddress (SOCKET sock) |
Get the local address of a socket as NetworkAddress. More... | |
static const std::string | GetPeerName (SOCKET sock) |
Get the peer name of a socket in string format. More... | |
Private Types | |
typedef SOCKET(* | LoopProc) (addrinfo *runp) |
Helper function to resolve something to a socket. More... | |
Private Member Functions | |
SOCKET | Resolve (int family, int socktype, int flags, SocketList *sockets, LoopProc func) |
Resolve this address into a socket. More... | |
Private Attributes | |
std::string | hostname |
The hostname. | |
int | address_length |
The length of the resolved address. | |
sockaddr_storage | address |
The resolved address. | |
bool | resolved |
Whether the address has been (tried to be) resolved. | |
Wrapper for (un)resolved network addresses; there's no reason to transform a numeric IP to a string and then back again to pass it to functions.
It furthermore allows easier delaying of the hostname lookup.
|
private |
|
inline |
Create a network address based on a resolved IP and port.
address | The IP address with port. |
address_length | The length of the address. |
Definition at line 49 of file address.h.
Referenced by GetPeerAddress(), GetSockAddress(), and IsInNetmask().
|
inline |
Create a network address based on a resolved IP and port.
address | The IP address with port. |
address_length | The length of the address. |
Definition at line 61 of file address.h.
References address, and address_length.
|
inline |
|
static |
Convert the address family into a string.
family | the family to convert |
Definition at line 388 of file address.cpp.
Referenced by TCPConnecter::Connect(), ListenLoopProc(), and Resolve().
|
inline |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 125 of file address.h.
References address, GetAddressLength(), and GetPort().
Referenced by operator!=(), operator<(), and operator==().
const sockaddr_storage * NetworkAddress::GetAddress | ( | ) |
Get the address in its internal representation.
Definition at line 113 of file address.cpp.
References address, IsResolved(), Resolve(), resolved, and ResolveLoopProc().
Referenced by TCPConnecter::Connect(), GetAddressAsString(), GetAddressLength(), IsInNetmask(), and NetworkUDPSocketHandler::SendPacket().
std::string NetworkAddress::GetAddressAsString | ( | bool | with_family = true | ) |
Get the address as a string, e.g.
127.0.0.1:12345.
with_family | whether to add the family (e.g. IPvX). |
Definition at line 94 of file address.cpp.
References GetAddress(), GetAddressFormatString(), GetHostname(), and GetPort().
Referenced by TCPConnecter::Connect(), GetPeerName(), NetworkUDPSocketHandler::HandleUDPPacket(), ListenLoopProc(), ClientNetworkUDPSocketHandler::Receive_SERVER_RESPONSE(), NetworkUDPSocketHandler::ReceiveInvalidPacket(), NetworkUDPSocketHandler::ReceivePackets(), and NetworkUDPSocketHandler::SendPacket().
|
inline |
Get the (valid) length of the address.
Definition at line 98 of file address.h.
References address_length, GetAddress(), and IsResolved().
Referenced by CompareTo(), IsInNetmask(), and NetworkUDPSocketHandler::SendPacket().
const std::string & NetworkAddress::GetHostname | ( | ) |
Get the hostname; in case it wasn't given the IPv4 dotted representation is given.
Definition at line 23 of file address.cpp.
References address, address_length, hostname, and NETWORK_HOSTNAME_LENGTH.
Referenced by TCPListenHandler< Tsocket, Tfull_packet, Tban_packet >::AcceptClient(), ClientNetworkCoordinatorSocketHandler::ConnectSuccess(), GetAddressAsString(), ServerNetworkGameSocketHandler::GetClientIP(), ServerNetworkUDPSocketHandler::Receive_CLIENT_FIND_SERVER(), TCPConnecter::Resolve(), and ServerNetworkAdminSocketHandler::SendClientInfo().
|
static |
Get the peer address of a socket as NetworkAddress.
sock | The socket to get the peer address of. |
Definition at line 403 of file address.cpp.
References Debug, NetworkError::GetLast(), and NetworkAddress().
Referenced by GetPeerName().
|
static |
Get the peer name of a socket in string format.
sock | The socket to get the peer name of. |
Definition at line 435 of file address.cpp.
References GetAddressAsString(), and GetPeerAddress().
uint16_t NetworkAddress::GetPort | ( | ) | const |
Get the port.
Definition at line 38 of file address.cpp.
Referenced by CompareTo(), TCPConnecter::Connect(), GetAddressAsString(), TCPConnecter::Resolve(), and Resolve().
|
static |
Get the local address of a socket as NetworkAddress.
sock | The socket to get the local address of. |
Definition at line 419 of file address.cpp.
References Debug, NetworkError::GetLast(), and NetworkAddress().
bool NetworkAddress::IsFamily | ( | int | family | ) |
Checks of this address is of the given family.
family | the family to check against |
Definition at line 132 of file address.cpp.
References address, IsResolved(), Resolve(), and ResolveLoopProc().
Referenced by NetworkUDPSocketHandler::SendPacket().
bool NetworkAddress::IsInNetmask | ( | const std::string & | netmask | ) |
Checks whether this IP address is contained by the given netmask.
netmask | the netmask in CIDR notation to test against. |
Definition at line 146 of file address.cpp.
References address, GetAddress(), GetAddressLength(), IsResolved(), and NetworkAddress().
|
inline |
Check whether the IP address has been resolved already.
Definition at line 112 of file address.h.
References resolved.
Referenced by GetAddress(), GetAddressLength(), IsFamily(), and IsInNetmask().
void NetworkAddress::Listen | ( | int | socktype, |
SocketList * | sockets | ||
) |
Make the given socket listen.
socktype | the type of socket (TCP, UDP, etc) |
sockets | the list of sockets to add the sockets to |
Definition at line 351 of file address.cpp.
References address, address_length, ListenLoopProc(), and Resolve().
|
inline |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 158 of file address.h.
References address, and CompareTo().
|
inline |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 167 of file address.h.
References CompareTo().
|
inline |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 139 of file address.h.
References CompareTo().
|
inline |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 149 of file address.h.
References address, and CompareTo().
|
private |
Resolve this address into a socket.
family | the type of 'protocol' (IPv4, IPv6) |
socktype | the type of socket (TCP, UDP, etc) |
flags | the flags to send to getaddrinfo |
sockets | the list of sockets to add the sockets to |
func | the inner working while looping over the address info |
Definition at line 207 of file address.cpp.
References address, address_length, AddressFamilyAsString(), Debug, FS2OTTD(), GetPort(), hostname, ResolveLoopProc(), and SocketTypeAsString().
Referenced by GetAddress(), IsFamily(), and Listen().
void NetworkAddress::SetPort | ( | uint16_t | port | ) |
|
static |
Convert the socket type into a string.
socktype | the socket type to convert |
Definition at line 373 of file address.cpp.
Referenced by TCPConnecter::Connect(), ListenLoopProc(), and Resolve().