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. | |
NetworkAddress (sockaddr *address, int address_length) | |
Create a network address based on a resolved IP and port. | |
NetworkAddress (const char *hostname="", uint16 port=0, int family=AF_UNSPEC) | |
Create a network address based on a unresolved host and port. | |
NetworkAddress (const NetworkAddress &address) | |
Make a clone of another address. | |
const char * | GetHostname () |
Get the hostname; in case it wasn't given the IPv4 dotted representation is given. | |
void | GetAddressAsString (char *buffer, const char *last, bool with_family=true) |
Get the address as a string, e.g. | |
const char * | GetAddressAsString (bool with_family=true) |
Get the address as a string, e.g. | |
const sockaddr_storage * | GetAddress () |
Get the address in its internal representation. | |
int | GetAddressLength () |
Get the (valid) length of the address. | |
uint16 | GetPort () const |
Get the port. | |
void | SetPort (uint16 port) |
Set the port. | |
bool | IsResolved () const |
Check whether the IP address has been resolved already. | |
bool | IsFamily (int family) |
Checks of this address is of the given family. | |
bool | IsInNetmask (char *netmask) |
Checks whether this IP address is contained by the given netmask. | |
int | CompareTo (NetworkAddress &address) |
Compare the address of this class with the address of another. | |
bool | operator== (NetworkAddress &address) |
Compare the address of this class with the address of another. | |
bool | operator== (NetworkAddress &address) const |
Compare the address of this class with the address of another. | |
bool | operator!= (NetworkAddress address) const |
Compare the address of this class with the address of another. | |
bool | operator< (NetworkAddress &address) |
Compare the address of this class with the address of another. | |
SOCKET | Connect () |
Connect to the given address. | |
void | Listen (int socktype, SocketList *sockets) |
Make the given socket listen. | |
Static Public Member Functions | |
static const char * | SocketTypeAsString (int socktype) |
Convert the socket type into a string. | |
static const char * | AddressFamilyAsString (int family) |
Convert the address family into a string. | |
Private Types | |
typedef SOCKET(* | LoopProc )(addrinfo *runp) |
Helper function to resolve something to a socket. | |
Private Member Functions | |
SOCKET | Resolve (int family, int socktype, int flags, SocketList *sockets, LoopProc func) |
Resolve this address into a socket. | |
Private Attributes | |
char | hostname [NETWORK_HOSTNAME_LENGTH] |
The hostname. | |
int | address_length |
The length of the resolved address. | |
sockaddr_storage | address |
The resolved address. |
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.
Definition at line 31 of file address.h.
typedef SOCKET(* NetworkAddress::LoopProc)(addrinfo *runp) [private] |
NetworkAddress::NetworkAddress | ( | struct sockaddr_storage & | address, | |
int | address_length | |||
) | [inline] |
Create a network address based on a resolved IP and port.
address | the IP address with port |
Definition at line 50 of file address.h.
References hostname.
Referenced by IsInNetmask().
NetworkAddress::NetworkAddress | ( | sockaddr * | address, | |
int | address_length | |||
) | [inline] |
NetworkAddress::NetworkAddress | ( | const char * | hostname = "" , |
|
uint16 | port = 0 , |
|||
int | family = AF_UNSPEC | |||
) | [inline] |
NetworkAddress::NetworkAddress | ( | const NetworkAddress & | address | ) | [inline] |
const char * NetworkAddress::AddressFamilyAsString | ( | int | family | ) | [static] |
Convert the address family into a string.
family | the family to convert |
Definition at line 422 of file address.cpp.
Referenced by ConnectLoopProc(), ListenLoopProc(), and Resolve().
int NetworkAddress::CompareTo | ( | NetworkAddress & | address | ) | [inline] |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 135 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 322 of file address.cpp.
References ConnectLoopProc(), DEBUG, GetAddressAsString(), and Resolve().
Referenced by TCPConnecter::Connect().
const sockaddr_storage * NetworkAddress::GetAddress | ( | ) |
Get the address in its internal representation.
Definition at line 126 of file address.cpp.
References address, IsResolved(), Resolve(), and ResolveLoopProc().
Referenced by GetAddressAsString(), GetAddressLength(), IsInNetmask(), 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 79 of file address.cpp.
References address, GetAddress(), GetHostname(), GetPort(), seprintf(), and strecpy().
Referenced by Connect(), GetAddressAsString(), NetworkContentSocketHandler::HandlePacket(), NetworkUDPSocketHandler::HandleUDPPacket(), NetworkUDPQueryServerThread(), 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 103 of file address.cpp.
References GetAddressAsString(), lastof, and NETWORK_HOSTNAME_LENGTH.
int NetworkAddress::GetAddressLength | ( | ) | [inline] |
Get the (valid) length of the address.
Definition at line 108 of file address.h.
References address_length, GetAddress(), and IsResolved().
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 24 of file address.cpp.
References address, address_length, hostname, and StrEmpty().
Referenced by TCPListenHandler< ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED >::AcceptClient(), GetAddressAsString(), ServerNetworkGameSocketHandler::GetClientIP(), NetworkGameListAddItem(), NetworkUDPQueryServerThread(), and NetworkHTTPContentConnecter::OnConnect().
uint16 NetworkAddress::GetPort | ( | ) | const |
Get the port.
Definition at line 37 of file address.cpp.
References address.
Referenced by CompareTo(), GetAddressAsString(), Listen(), 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 144 of file address.cpp.
References address, IsResolved(), Resolve(), and ResolveLoopProc().
Referenced by 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 158 of file address.cpp.
References address, GetAddress(), GetAddressLength(), IsResolved(), and NetworkAddress().
Referenced by TCPListenHandler< ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED >::AcceptClient().
bool NetworkAddress::IsResolved | ( | ) | const [inline] |
Check whether the IP address has been resolved already.
Definition at line 122 of file address.h.
References address_length.
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 385 of file address.cpp.
References address, address_length, GetPort(), hostname, ListenLoopProc(), Resolve(), and StrEmpty().
bool NetworkAddress::operator!= | ( | NetworkAddress | address | ) | const [inline] |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 168 of file address.h.
References CompareTo().
bool NetworkAddress::operator< | ( | NetworkAddress & | address | ) | [inline] |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 177 of file address.h.
References CompareTo().
bool NetworkAddress::operator== | ( | NetworkAddress & | address | ) | const [inline] |
Compare the address of this class with the address of another.
address | the other address. |
Definition at line 159 of file address.h.
References CompareTo().
bool NetworkAddress::operator== | ( | NetworkAddress & | address | ) | [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 CompareTo().
SOCKET NetworkAddress::Resolve | ( | int | family, | |
int | socktype, | |||
int | flags, | |||
SocketList * | sockets, | |||
LoopProc | func | |||
) | [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 221 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(), IsFamily(), and Listen().
void NetworkAddress::SetPort | ( | uint16 | port | ) |
Set the port.
port | set the port number. |
Definition at line 56 of file address.cpp.
References address.
Referenced by NetworkAddress().
const char * NetworkAddress::SocketTypeAsString | ( | int | socktype | ) | [static] |
Convert the socket type into a string.
socktype | the socket type to convert |
Definition at line 407 of file address.cpp.
Referenced by ConnectLoopProc(), ListenLoopProc(), and Resolve().