OpenTTD
|
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 (const char *hostname="", uint16 port=0, int family=AF_UNSPEC) | |
Create a network address based on a unresolved host and port. More... | |
NetworkAddress (const NetworkAddress &address) | |
Make a clone of another address. More... | |
const char * | GetHostname () |
Get the hostname; in case it wasn't given the IPv4 dotted representation is given. More... | |
void | GetAddressAsString (char *buffer, const char *last, bool with_family=true) |
Get the address as a string, e.g. More... | |
const char * | 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 | GetPort () const |
Get the port. More... | |
void | SetPort (uint16 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 (char *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... | |
SOCKET | Connect () |
Connect to the given address. 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... | |
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 | |
char | hostname [NETWORK_HOSTNAME_LENGTH] |
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 52 of file address.h.
Referenced by ConnectLoopProc(), IsInNetmask(), and ListenLoopProc().
|
inline |
|
inline |
|
inline |
Make a clone of another address.
address | the address to clone |
Definition at line 100 of file address.h.
References GetAddress(), GetAddressAsString(), and GetHostname().
|
static |
Convert the address family into a string.
family | the family to convert |
Definition at line 427 of file address.cpp.
Referenced by ConnectLoopProc(), ListenLoopProc(), operator<(), MasterNetworkUDPSocketHandler::Receive_MASTER_ACK_REGISTER(), MasterNetworkUDPSocketHandler::Receive_MASTER_SESSION_KEY(), and Resolve().
|
inline |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 141 of file address.h.
References address, GetAddressLength(), and GetPort().
Referenced by operator!=(), operator<(), and operator==().
SOCKET NetworkAddress::Connect | ( | ) |
Connect to the given address.
Definition at line 325 of file address.cpp.
References ConnectLoopProc(), DEBUG, GetAddressAsString(), and Resolve().
Referenced by TCPConnecter::Connect(), and operator<().
const sockaddr_storage * NetworkAddress::GetAddress | ( | ) |
Get the address in its internal representation.
Definition at line 128 of file address.cpp.
References address, IsResolved(), Resolve(), resolved, and ResolveLoopProc().
Referenced by GetAddressAsString(), GetAddressLength(), IsInNetmask(), NetworkAddress(), MasterNetworkUDPSocketHandler::Receive_MASTER_ACK_REGISTER(), MasterNetworkUDPSocketHandler::Receive_MASTER_SESSION_KEY(), ClientNetworkUDPSocketHandler::Receive_SERVER_RESPONSE(), and NetworkUDPSocketHandler::SendPacket().
void NetworkAddress::GetAddressAsString | ( | char * | buffer, |
const char * | last, | ||
bool | with_family = true |
||
) |
Get the address as a string, e.g.
127.0.0.1:12345.
buffer | the buffer to write to |
last | the last element in the buffer |
with_family | whether to add the family (e.g. IPvX). |
Definition at line 81 of file address.cpp.
References address, GetAddress(), GetHostname(), GetPort(), seprintf(), and strecpy().
Referenced by Connect(), GetAddressAsString(), NetworkUDPSocketHandler::HandleUDPPacket(), NetworkAddress(), NetworkUDPAdvertiseThread(), NetworkUDPQueryMasterServer(), NetworkUDPQueryServer(), ServerNetworkUDPSocketHandler::Receive_CLIENT_GET_NEWGRFS(), ClientNetworkUDPSocketHandler::Receive_SERVER_NEWGRFS(), ClientNetworkUDPSocketHandler::Receive_SERVER_RESPONSE(), NetworkUDPSocketHandler::ReceiveInvalidPacket(), NetworkUDPSocketHandler::ReceivePackets(), and NetworkUDPSocketHandler::SendPacket().
const char * 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 105 of file address.cpp.
References GetAddressAsString(), lastof, and NETWORK_HOSTNAME_LENGTH.
|
inline |
Get the (valid) length of the address.
Definition at line 114 of file address.h.
References address_length, GetAddress(), GetPort(), IsResolved(), and SetPort().
Referenced by CompareTo(), IsInNetmask(), and NetworkUDPSocketHandler::SendPacket().
const char * NetworkAddress::GetHostname | ( | ) |
Get the hostname; in case it wasn't given the IPv4 dotted representation is given.
Definition at line 26 of file address.cpp.
References address, hostname, and StrEmpty().
Referenced by TCPListenHandler< ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED >::AcceptClient(), GetAddressAsString(), ServerNetworkGameSocketHandler::GetClientIP(), NetworkAddress(), NetworkGameListAddItem(), NetworkUDPQueryServer(), and ClientNetworkUDPSocketHandler::Receive_SERVER_RESPONSE().
uint16 NetworkAddress::GetPort | ( | ) | const |
Get the port.
Definition at line 39 of file address.cpp.
References address.
Referenced by CompareTo(), GetAddressAsString(), GetAddressLength(), and Resolve().
bool NetworkAddress::IsFamily | ( | int | family | ) |
Checks of this address is of the given family.
family | the family to check against |
Definition at line 147 of file address.cpp.
References address, IsResolved(), Resolve(), and ResolveLoopProc().
Referenced by IsResolved(), and NetworkUDPSocketHandler::SendPacket().
bool NetworkAddress::IsInNetmask | ( | char * | netmask | ) |
Checks whether this IP address is contained by the given netmask.
netmask | the netmask in CIDR notation to test against. |
Definition at line 161 of file address.cpp.
References address, GetAddress(), GetAddressLength(), IsResolved(), and NetworkAddress().
Referenced by TCPListenHandler< ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED >::AcceptClient(), and IsResolved().
|
inline |
Check whether the IP address has been resolved already.
Definition at line 128 of file address.h.
References IsFamily(), IsInNetmask(), and resolved.
Referenced by GetAddress(), GetAddressLength(), IsFamily(), IsInNetmask(), and NetworkUDPQueryServer().
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 390 of file address.cpp.
Referenced by operator<().
|
inline |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 174 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 183 of file address.h.
References AddressFamilyAsString(), CompareTo(), Connect(), Listen(), and SocketTypeAsString().
|
inline |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 155 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 165 of file address.h.
References 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 224 of file address.cpp.
References address, address_length, AddressFamilyAsString(), SmallMap< T, U, S >::Contains(), DEBUG, FS2OTTD(), GetPort(), hostname, lastof, ResolveLoopProc(), seprintf(), SocketTypeAsString(), strecpy(), and StrEmpty().
Referenced by Connect(), GetAddress(), and IsFamily().
void NetworkAddress::SetPort | ( | uint16 | port | ) |
Set the port.
port | set the port number. |
Definition at line 58 of file address.cpp.
References address.
Referenced by GetAddressLength(), and NetworkAddress().
|
static |
Convert the socket type into a string.
socktype | the socket type to convert |
Definition at line 412 of file address.cpp.
Referenced by ConnectLoopProc(), ListenLoopProc(), operator<(), and Resolve().