OpenTTD Source: NetworkAddress Class Reference

OpenTTD Source 1.11.0-RC1

Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
NetworkAddress Class Reference

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...
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...
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 | 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 (const 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.

## Detailed Description

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 29 of file address.h.

## Member Typedef Documentation

## ◆ LoopProc

typedef SOCKET(* NetworkAddress::LoopProc) (addrinfo *runp)
| private

Helper function to resolve something to a socket.

Parameters

  runp | information about the socket to try not

Returns
  the opened socket or INVALID_SOCKET

Definition at line 41 of file address.h.

## Constructor & Destructor Documentation

## ◆ NetworkAddress() [1/3]

NetworkAddress::NetworkAddress | ( | struct sockaddr_storage & | address,
|  | int | address_length
| ) |  |
| inline

Create a network address based on a resolved IP and port.

Parameters

  address | The IP address with port.
  address_length | The length of the address.

Definition at line 50 of file address.h.

Referenced by IsInNetmask().

## ◆ NetworkAddress() [2/3]

NetworkAddress::NetworkAddress | ( | sockaddr * | address,
|  | int | address_length
| ) |  |
| inline

Create a network address based on a resolved IP and port.

Parameters

  address | The IP address with port.
  address_length | The length of the address.

Definition at line 63 of file address.h.

References address, and address_length.

## ◆ NetworkAddress() [3/3]

NetworkAddress::NetworkAddress | ( | const char * | hostname = `""`,
|  | uint16 | port = `0`,
|  | int | family = `AF_UNSPEC`
| ) |  |
| inline

Create a network address based on a unresolved host and port.

Parameters

  hostname | the unresolved hostname
  port | the port
  family | the address family

Definition at line 78 of file address.h.

References hostname, lastof, SetPort(), strecpy(), and StrEmpty().

## Member Function Documentation

## ◆ AddressFamilyAsString()

const char * NetworkAddress::AddressFamilyAsString | ( | int | family | ) |
| static

Convert the address family into a string.

Parameters

  family | the family to convert

Returns
  the string representation

Note
  only works for AF_INET, AF_INET6 and AF_UNSPEC

Definition at line 443 of file address.cpp.

Referenced by ConnectLoopProc(), ListenLoopProc(), MasterNetworkUDPSocketHandler::Receive_MASTER_ACK_REGISTER(), MasterNetworkUDPSocketHandler::Receive_MASTER_SESSION_KEY(), and Resolve().

## ◆ CompareTo()

int NetworkAddress::CompareTo | ( | NetworkAddress & | address | ) |
| inline

Compare the address of this class with the address of another.

Parameters

  address | the other address.

Returns
  < 0 if address is less, 0 if equal and > 0 if address is more

Definition at line 130 of file address.h.

References address, GetAddressLength(), and GetPort().

Referenced by NetworkGameWindow::NGameNameSorter(), operator!=(), operator<(), and operator==().

## ◆ Connect()

SOCKET NetworkAddress::Connect | ( |  | ) |

Connect to the given address.

Returns
  the connected socket or INVALID_SOCKET.

Definition at line 340 of file address.cpp.

References ConnectLoopProc(), DEBUG, GetAddressAsString(), and Resolve().

Referenced by TCPConnecter::Connect().

## ◆ GetAddress()

const sockaddr_storage * NetworkAddress::GetAddress | ( |  | ) |

Get the address in its internal representation.

Returns
  the address

Definition at line 123 of file address.cpp.

References address, IsResolved(), Resolve(), resolved, and ResolveLoopProc().

Referenced by GetAddressAsString(), GetAddressLength(), IsInNetmask(), MasterNetworkUDPSocketHandler::Receive_MASTER_ACK_REGISTER(), MasterNetworkUDPSocketHandler::Receive_MASTER_SESSION_KEY(), ClientNetworkUDPSocketHandler::Receive_SERVER_RESPONSE(), and NetworkUDPSocketHandler::SendPacket().

## ◆ GetAddressAsString() [1/2]

std::string NetworkAddress::GetAddressAsString | ( | bool | with_family = `true` | ) |

Get the address as a string, e.g.

127.0.0.1:12345.

Parameters

  with_family | whether to add the family (e.g. IPvX).

Returns
  the address

Definition at line 100 of file address.cpp.

References GetAddressAsString(), lastof, and NETWORK_HOSTNAME_LENGTH.

## ◆ GetAddressAsString() [2/2]

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.

Parameters

  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 77 of file address.cpp.

References address, GetAddress(), GetHostname(), GetPort(), seprintf(), and strecpy().

Referenced by Connect(), ConnectLoopProc(), DoNetworkUDPQueryServer(), GetAddressAsString(), NetworkContentSocketHandler::HandlePacket(), NetworkUDPSocketHandler::HandleUDPPacket(), ListenLoopProc(), NetworkUDPAdvertiseThread(), NetworkUDPQueryMasterServer(), ServerNetworkUDPSocketHandler::Receive_CLIENT_GET_NEWGRFS(), ClientNetworkUDPSocketHandler::Receive_SERVER_NEWGRFS(), ClientNetworkUDPSocketHandler::Receive_SERVER_RESPONSE(), NetworkUDPSocketHandler::ReceiveInvalidPacket(), NetworkContentSocketHandler::ReceiveInvalidPacket(), NetworkUDPSocketHandler::ReceivePackets(), and NetworkUDPSocketHandler::SendPacket().

## ◆ GetAddressLength()

int NetworkAddress::GetAddressLength | ( |  | ) |
| inline

Get the (valid) length of the address.

Returns
  the length

Definition at line 103 of file address.h.

References address_length, GetAddress(), and IsResolved().

Referenced by CompareTo(), IsInNetmask(), and NetworkUDPSocketHandler::SendPacket().

## ◆ GetHostname()

const char * NetworkAddress::GetHostname | ( |  | ) |

Get the hostname; in case it wasn't given the IPv4 dotted representation is given.

Returns
  the hostname

Definition at line 22 of file address.cpp.

References address, address_length, hostname, and StrEmpty().

Referenced by TCPListenHandler< ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED >::AcceptClient(), DoNetworkUDPQueryServer(), GetAddressAsString(), ServerNetworkGameSocketHandler::GetClientIP(), NetworkGameListAddItem(), NetworkHTTPContentConnecter::OnConnect(), ClientNetworkUDPSocketHandler::Receive_SERVER_RESPONSE(), and ServerNetworkAdminSocketHandler::SendClientInfo().

## ◆ GetPort()

uint16 NetworkAddress::GetPort | ( |  | ) | const

Get the port.

Returns
  the port.

Definition at line 35 of file address.cpp.

References address.

Referenced by CompareTo(), GetAddressAsString(), Listen(), and Resolve().

## ◆ IsFamily()

bool NetworkAddress::IsFamily | ( | int | family | ) |

Checks of this address is of the given family.

Parameters

  family | the family to check against

Returns
  true if it is of the given family

Definition at line 142 of file address.cpp.

References address, IsResolved(), Resolve(), and ResolveLoopProc().

Referenced by NetworkUDPSocketHandler::SendPacket().

## ◆ IsInNetmask()

bool NetworkAddress::IsInNetmask | ( | const char * | netmask | ) |

Checks whether this IP address is contained by the given netmask.

Parameters

  netmask | the netmask in CIDR notation to test against.

Note
  netmask without /n assumes all bits need to match.

Returns
  true if this IP is within the netmask.

Definition at line 156 of file address.cpp.

References address, GetAddress(), GetAddressLength(), IsResolved(), and NetworkAddress().

Referenced by TCPListenHandler< ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED >::AcceptClient().

## ◆ IsResolved()

bool NetworkAddress::IsResolved | ( |  | ) | const
| inline

Check whether the IP address has been resolved already.

Returns
  true iff the port has been resolved

Definition at line 117 of file address.h.

References resolved.

Referenced by GetAddress(), GetAddressLength(), IsFamily(), IsInNetmask(), and NetworkUDPQueryServer().

## ◆ Listen()

void NetworkAddress::Listen | ( | int | socktype,
|  | SocketList * | sockets
| ) |  |

Make the given socket listen.

Parameters

  socktype | the type of socket (TCP, UDP, etc)
  sockets | the list of sockets to add the sockets to

Definition at line 406 of file address.cpp.

References address, address_length, GetPort(), hostname, ListenLoopProc(), Resolve(), and StrEmpty().

## ◆ operator!=()

bool NetworkAddress::operator!= | ( | NetworkAddress | address | ) | const
| inline

Compare the address of this class with the address of another.

Parameters

  address | the other address.

Returns
  true if both do not match.

Definition at line 163 of file address.h.

References address, and CompareTo().

## ◆ operator<()

bool NetworkAddress::operator< | ( | NetworkAddress & | address | ) |
| inline

Compare the address of this class with the address of another.

Parameters

  address | the other address.

Definition at line 172 of file address.h.

References CompareTo().

## ◆ operator==() [1/2]

bool NetworkAddress::operator== | ( | NetworkAddress & | address | ) |
| inline

Compare the address of this class with the address of another.

Parameters

  address | the other address.

Returns
  true if both match.

Definition at line 144 of file address.h.

References CompareTo().

## ◆ operator==() [2/2]

bool NetworkAddress::operator== | ( | NetworkAddress & | address | ) | const
| inline

Compare the address of this class with the address of another.

Parameters

  address | the other address.

Returns
  true if both match.

Definition at line 154 of file address.h.

References address, and CompareTo().

## ◆ Resolve()

SOCKET NetworkAddress::Resolve | ( | int | family,
|  | int | socktype,
|  | int | flags,
|  | SocketList * | sockets,
|  | LoopProc | func
| ) |  |
| private

Resolve this address into a socket.

Parameters

  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

Returns
  the resolved socket or INVALID_SOCKET.

Definition at line 218 of file address.cpp.

References address, address_length, AddressFamilyAsString(), SmallMap< T, U >::Contains(), DEBUG, FS2OTTD(), GetPort(), hostname, lastof, ResolveLoopProc(), seprintf(), SocketTypeAsString(), strecpy(), and StrEmpty().

Referenced by Connect(), GetAddress(), IsFamily(), and Listen().

## ◆ SetPort()

void NetworkAddress::SetPort | ( | uint16 | port | ) |

Set the port.

Parameters

  port | set the port number.

Definition at line 54 of file address.cpp.

References address.

Referenced by NetworkAddress().

## ◆ SocketTypeAsString()

const char * NetworkAddress::SocketTypeAsString | ( | int | socktype | ) |
| static

Convert the socket type into a string.

Parameters

  socktype | the socket type to convert

Returns
  the string representation

Note
  only works for SOCK_STREAM and SOCK_DGRAM

Definition at line 428 of file address.cpp.

Referenced by ConnectLoopProc(), ListenLoopProc(), and Resolve().

The documentation for this class was generated from the following files:

- src/network/core/address.h
- src/network/core/address.cpp