OpenTTD: src/network/network_udp.cpp File Reference

OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Data Structures | Functions | Variables
network_udp.cpp File Reference

This file handles the UDP related communication. More...

`#include "../stdafx.h"`
`#include "../date_func.h"`
`#include "../map_func.h"`
`#include "../debug.h"`
`#include "network_gamelist.h"`
`#include "network_internal.h"`
`#include "network_udp.h"`
`#include "network.h"`
`#include "../core/endian_func.hpp"`
`#include "../company_base.h"`
`#include "../thread/thread.h"`
`#include "../rev.h"`
`#include "../newgrf_text.h"`
`#include "../strings_func.h"`
`#include "table/strings.h"`
`#include "core/udp.h"`
`#include "../safeguards.h"`

Go to the source code of this file.

## Data Structures
struct | NetworkUDPQueryServerInfo
| Simpler wrapper struct for NetworkUDPQueryServerThread. More...
class | MasterNetworkUDPSocketHandler
| *** Communication with the masterserver ***/ More...
class | ServerNetworkUDPSocketHandler
| *** Communication with clients (we are server) ***/ More...
class | ClientNetworkUDPSocketHandler
| *** Communication with servers (we are client) ***/ More...

## Functions
static void | NetworkUDPQueryServer (NetworkAddress *address, bool needs_mutex, bool manually)
| Helper function doing the actual work for querying the server.
static void | NetworkUDPQueryServerThread (void *pntr)
| Threaded part for resolving the IP of a server and querying it.
void | NetworkUDPQueryServer (NetworkAddress address, bool manually)
| Query a specific server.
static void | NetworkUDPBroadCast (NetworkUDPSocketHandler *socket)
| Broadcast to all ips.
void | NetworkUDPQueryMasterServer ()
| Request the the server-list from the master server.
void | NetworkUDPSearchGame ()
| Find all servers.
static void | NetworkUDPRemoveAdvertiseThread (void *pntr)
| Thread entry point for de-advertising.
void | NetworkUDPRemoveAdvertise (bool blocking)
| Remove our advertise from the master-server.
static void | NetworkUDPAdvertiseThread (void *pntr)
| Thread entry point for advertising.
void | NetworkUDPAdvertise ()
| Register us to the master server This function checks if it needs to send an advertise.
void | NetworkUDPInitialize ()
| Initialize the whole UDP bit.
void | NetworkUDPClose ()
| Close all UDP related stuff.
void | NetworkBackgroundUDPLoop ()
| Receive the UDP packets.

## Variables
static ThreadMutex * | _network_udp_mutex = ThreadMutex::New()
| Mutex for all out threaded udp resolution and such.
static uint64 | _session_key = 0
| Session key to register ourselves to the master server.
static const uint32 | ADVERTISE_NORMAL_INTERVAL = 15 * 60 * 1000
| interval between advertising in ms (15 minutes)
static const uint32 | ADVERTISE_RETRY_INTERVAL = 10 * 1000
| re-advertise when no response after this many ms (10 seconds)
static const uint32 | ADVERTISE_RETRY_TIMES = 3
| give up re-advertising after this much failed retries
NetworkUDPSocketHandler * | _udp_client_socket = NULL
| udp client socket
NetworkUDPSocketHandler * | _udp_server_socket = NULL
| udp server socket
NetworkUDPSocketHandler * | _udp_master_socket = NULL
| udp master socket

## Detailed Description

This file handles the UDP related communication.

This is the GameServer <-> MasterServer and GameServer <-> GameClient communication before the game is being joined.

Definition in file network_udp.cpp.

## Function Documentation

void NetworkBackgroundUDPLoop | ( |  | ) |

Receive the UDP packets.

Definition at line 703 of file network_udp.cpp.

References _network_udp_broadcast, _network_udp_server, ThreadMutex::BeginCritical(), ThreadMutex::EndCritical(), and NetworkUDPSocketHandler::ReceivePackets().

Referenced by NetworkBackgroundLoop().

void NetworkUDPAdvertise | ( |  | ) |

Register us to the master server This function checks if it needs to send an advertise.

< The time of the last advertisement (used to check for wrapping of time)

< The next time we should perform a normal advertisement.

< The next time we should perform a retry of an advertisement.

Definition at line 617 of file network_udp.cpp.

References _network_advertise_retries, _network_need_advertise, _network_server, _network_udp_server, _networking, _realtime_tick, _settings_client, ADVERTISE_NORMAL_INTERVAL, ADVERTISE_RETRY_INTERVAL, ADVERTISE_RETRY_TIMES, ClientSettings::network, NetworkUDPAdvertiseThread(), ThreadObject::New(), and NetworkSettings::server_advertise.

Referenced by NetworkServer_Tick().

static void NetworkUDPAdvertiseThread | ( | void * | pntr | ) |
| static

Thread entry point for advertising.

Parameters

  pntr | unused.

Definition at line 577 of file network_udp.cpp.

References _network_advertise_retries, _session_key, _settings_client, ThreadMutex::BeginCritical(), DEBUG, ThreadMutex::EndCritical(), NetworkAddress::GetAddressAsString(), ClientSettings::network, NETWORK_MASTER_SERVER_HOST, NETWORK_MASTER_SERVER_PORT, NETWORK_MASTER_SERVER_VERSION, NETWORK_MASTER_SERVER_WELCOME_MESSAGE, PACKET_UDP_SERVER_REGISTER, Packet::Send_string(), Packet::Send_uint16(), Packet::Send_uint64(), Packet::Send_uint8(), NetworkUDPSocketHandler::SendPacket(), and NetworkSettings::server_port.

Referenced by NetworkUDPAdvertise().

void NetworkUDPClose | ( |  | ) |

Close all UDP related stuff.

Definition at line 683 of file network_udp.cpp.

References _network_udp_broadcast, _network_udp_server, _udp_client_socket, _udp_master_socket, _udp_server_socket, ThreadMutex::BeginCritical(), NetworkUDPSocketHandler::Close(), DEBUG, and ThreadMutex::EndCritical().

Referenced by NetworkShutDown(), and NetworkUDPInitialize().

void NetworkUDPInitialize | ( |  | ) |

Initialize the whole UDP bit.

Definition at line 657 of file network_udp.cpp.

References _network_udp_broadcast, _network_udp_server, _settings_client, ThreadMutex::BeginCritical(), SmallVector< T, S >::Clear(), DEBUG, ThreadMutex::EndCritical(), GetBindAddresses(), ClientSettings::network, NetworkUDPClose(), and NetworkSettings::server_port.

Referenced by NetworkDisconnect().

static void NetworkUDPQueryServer | ( | NetworkAddress * | address,
|  | bool | needs_mutex,
|  | bool | manually
| ) |  |
| static

Helper function doing the actual work for querying the server.

Parameters

  address | The address of the server.
  needs_mutex | Whether we need to acquire locks when sending the packet or not.
  manually | Whether the address was entered manually.

Definition at line 75 of file network_udp.cpp.

References NetworkGameList::address, ThreadMutex::BeginCritical(), ThreadMutex::EndCritical(), NetworkAddress::GetAddressAsString(), NetworkAddress::GetHostname(), NetworkGameInfo::hostname, NetworkGameList::info, lastof, NetworkGameList::manually, NetworkGameListAddItemDelayed(), PACKET_UDP_CLIENT_FIND_SERVER, NetworkUDPSocketHandler::SendPacket(), NetworkGameInfo::server_name, and strecpy().

Referenced by NetworkGameListRequery(), NetworkUDPQueryServerThread(), NetworkGameWindow::OnClick(), NetworkLobbyWindow::OnClick(), ClientNetworkUDPSocketHandler::Receive_MASTER_RESPONSE_LIST(), and ShowNetworkLobbyWindow().

void NetworkUDPQueryServer | ( | NetworkAddress | address,
|  | bool | manually
| ) |  |

Query a specific server.

Parameters

  address | The address of the server.
  manually | Whether the address was entered manually.

Definition at line 109 of file network_udp.cpp.

References NetworkAddress::IsResolved(), NetworkUDPQueryServerThread(), and ThreadObject::New().

static void NetworkUDPQueryServerThread | ( | void * | pntr | ) |
| static

Threaded part for resolving the IP of a server and querying it.

Parameters

  pntr | the NetworkUDPQueryServerInfo.

Definition at line 96 of file network_udp.cpp.

References NetworkUDPQueryServerInfo::manually, and NetworkUDPQueryServer().

Referenced by NetworkUDPQueryServer().

void NetworkUDPRemoveAdvertise | ( | bool | blocking | ) |

Remove our advertise from the master-server.

Parameters

  blocking | whether to wait until the removal has finished.

Definition at line 563 of file network_udp.cpp.

References _network_server, _network_udp_server, _networking, NetworkUDPRemoveAdvertiseThread(), and ThreadObject::New().

Referenced by NetworkDisconnect(), and MasterNetworkUDPSocketHandler::Receive_MASTER_ACK_REGISTER().

static void NetworkUDPRemoveAdvertiseThread | ( | void * | pntr | ) |
| static

Thread entry point for de-advertising.

Parameters

  pntr | unused.

Definition at line 541 of file network_udp.cpp.

References _settings_client, ThreadMutex::BeginCritical(), DEBUG, ThreadMutex::EndCritical(), ClientSettings::network, NETWORK_MASTER_SERVER_HOST, NETWORK_MASTER_SERVER_PORT, NETWORK_MASTER_SERVER_VERSION, PACKET_UDP_SERVER_UNREGISTER, Packet::Send_uint16(), Packet::Send_uint8(), NetworkUDPSocketHandler::SendPacket(), and NetworkSettings::server_port.

Referenced by NetworkUDPRemoveAdvertise().

## Variable Documentation

ThreadMutex* _network_udp_mutex = ThreadMutex::New()
| static

Mutex for all out threaded udp resolution and such.

Definition at line 40 of file network_udp.cpp.