Base socket handler for all UDP sockets. More...
#include <udp.h>
Public Member Functions | |
NetworkUDPSocketHandler (NetworkAddressList *bind=NULL) | |
Create an UDP socket but don't listen yet. | |
virtual | ~NetworkUDPSocketHandler () |
On destructing of this class, the socket needs to be closed. | |
bool | Listen () |
Start listening on the given host and port. | |
void | Close () |
Close the given UDP socket. | |
void | SendPacket (Packet *p, NetworkAddress *recv, bool all=false, bool broadcast=false) |
Send a packet over UDP. | |
void | ReceivePackets () |
Receive a packet at UDP level. | |
void | SendNetworkGameInfo (Packet *p, const NetworkGameInfo *info) |
Serializes the NetworkGameInfo struct to the packet. | |
void | ReceiveNetworkGameInfo (Packet *p, NetworkGameInfo *info) |
Deserializes the NetworkGameInfo struct from the packet. | |
Protected Member Functions | |
NetworkRecvStatus | CloseConnection (bool error=true) |
Close the current connection; for TCP this will be mostly equivalent to Close(), but for UDP it just means the packet has to be dropped. | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_CLIENT_FIND_SERVER) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_SERVER_RESPONSE) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_CLIENT_DETAIL_INFO) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_SERVER_DETAIL_INFO) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_SERVER_REGISTER) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_MASTER_ACK_REGISTER) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_CLIENT_GET_LIST) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_MASTER_RESPONSE_LIST) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_SERVER_UNREGISTER) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_CLIENT_GET_NEWGRFS) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_SERVER_NEWGRFS) | |
DECLARE_UDP_RECEIVE_COMMAND (PACKET_UDP_MASTER_SESSION_KEY) | |
void | HandleUDPPacket (Packet *p, NetworkAddress *client_addr) |
Handle an incoming packets by sending it to the correct function. | |
virtual void | HandleIncomingNetworkGameInfoGRFConfig (GRFConfig *config) |
Function that is called for every GRFConfig that is read when receiving a NetworkGameInfo. | |
Protected Attributes | |
NetworkAddressList | bind |
The address to bind to. | |
SocketList | sockets |
The opened sockets. |
Base socket handler for all UDP sockets.
Definition at line 110 of file udp.h.
NetworkUDPSocketHandler::NetworkUDPSocketHandler | ( | NetworkAddressList * | bind = NULL |
) |
Create an UDP socket but don't listen yet.
bind | the addresses to bind to. |
Definition at line 25 of file udp.cpp.
References SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), and SmallVector< T, S >::End().
NetworkRecvStatus NetworkUDPSocketHandler::CloseConnection | ( | bool | error = true |
) | [protected, virtual] |
Close the current connection; for TCP this will be mostly equivalent to Close(), but for UDP it just means the packet has to be dropped.
error | Whether we quit under an error condition or not. |
Reimplemented from NetworkSocketHandler.
Definition at line 68 of file udp.cpp.
References NETWORK_RECV_STATUS_OKAY.
virtual void NetworkUDPSocketHandler::HandleIncomingNetworkGameInfoGRFConfig | ( | GRFConfig * | config | ) | [inline, protected, virtual] |
Function that is called for every GRFConfig that is read when receiving a NetworkGameInfo.
Only grfid and md5sum are set, the rest is zero. This function must set all appropriate fields. This GRF is later appended to the grfconfig list of the NetworkGameInfo.
config | the GRF to handle |
Reimplemented in ClientNetworkUDPSocketHandler.
Definition at line 143 of file udp.h.
Referenced by ReceiveNetworkGameInfo().
void NetworkUDPSocketHandler::HandleUDPPacket | ( | Packet * | p, | |
NetworkAddress * | client_addr | |||
) | [protected] |
Handle an incoming packets by sending it to the correct function.
p | the received packet | |
client_addr | the sender of the packet |
Definition at line 293 of file udp.cpp.
References DEBUG, NetworkAddress::GetAddressAsString(), NetworkSocketHandler::HasClientQuit(), PACKET_UDP_CLIENT_DETAIL_INFO, PACKET_UDP_CLIENT_FIND_SERVER, PACKET_UDP_CLIENT_GET_LIST, PACKET_UDP_CLIENT_GET_NEWGRFS, PACKET_UDP_END, PACKET_UDP_MASTER_ACK_REGISTER, PACKET_UDP_MASTER_RESPONSE_LIST, PACKET_UDP_MASTER_SESSION_KEY, PACKET_UDP_SERVER_DETAIL_INFO, PACKET_UDP_SERVER_NEWGRFS, PACKET_UDP_SERVER_REGISTER, PACKET_UDP_SERVER_RESPONSE, PACKET_UDP_SERVER_UNREGISTER, NetworkSocketHandler::Reopen(), and UDP_COMMAND.
Referenced by ReceivePackets().
bool NetworkUDPSocketHandler::Listen | ( | ) |
Start listening on the given host and port.
Definition at line 45 of file udp.cpp.
References SmallVector< T, S >::Begin(), bind, Close(), SmallVector< T, S >::End(), SmallVector< T, S >::Length(), and sockets.
Referenced by SendPacket().
void NetworkUDPSocketHandler::ReceiveNetworkGameInfo | ( | Packet * | p, | |
NetworkGameInfo * | info | |||
) |
Deserializes the NetworkGameInfo struct from the packet.
p | the packet to read the data from | |
info | the NetworkGameInfo to deserialize into |
Definition at line 216 of file udp.cpp.
References Clamp(), NetworkGameInfo::clients_max, NetworkServerGameInfo::clients_on, NetworkGameInfo::companies_max, NetworkGameInfo::companies_on, ConvertYMDToDate(), DAYS_TILL_ORIGINAL_BASE_YEAR, NetworkGameInfo::dedicated, NetworkGameInfo::game_date, NetworkGameInfo::game_info_version, NetworkGameInfo::grfconfig, HandleIncomingNetworkGameInfoGRFConfig(), GRFConfig::ident, NetworkGameInfo::map_height, NetworkServerGameInfo::map_name, NetworkGameInfo::map_set, NetworkGameInfo::map_width, MAX_YEAR, NETWORK_MAX_GRF_COUNT, NETWORK_NUM_LANDSCAPES, NETWORK_NUM_LANGUAGES, GRFConfig::next, NetworkSocketHandler::ReceiveGRFIdentifier(), Packet::Recv_string(), NetworkGameInfo::server_lang, NetworkGameInfo::server_name, NetworkGameInfo::server_revision, NetworkGameInfo::spectators_max, NetworkGameInfo::spectators_on, NetworkGameInfo::start_date, and NetworkGameInfo::use_password.
void NetworkUDPSocketHandler::SendNetworkGameInfo | ( | Packet * | p, | |
const NetworkGameInfo * | info | |||
) |
Serializes the NetworkGameInfo struct to the packet.
p | the packet to write the data to | |
info | the NetworkGameInfo struct to serialize |
Definition at line 154 of file udp.cpp.
References NetworkGameInfo::clients_max, NetworkServerGameInfo::clients_on, NetworkGameInfo::companies_max, NetworkGameInfo::companies_on, NetworkGameInfo::dedicated, GRFConfig::flags, NetworkGameInfo::game_date, GCF_STATIC, NetworkGameInfo::grfconfig, HasBit(), GRFConfig::ident, NetworkGameInfo::map_height, NetworkServerGameInfo::map_name, NetworkGameInfo::map_set, NetworkGameInfo::map_width, NETWORK_GAME_INFO_VERSION, GRFConfig::next, Packet::Send_bool(), Packet::Send_string(), NetworkSocketHandler::SendGRFIdentifier(), NetworkGameInfo::server_lang, NetworkGameInfo::server_name, NetworkGameInfo::server_revision, NetworkGameInfo::spectators_max, NetworkGameInfo::spectators_on, NetworkGameInfo::start_date, and NetworkGameInfo::use_password.
void NetworkUDPSocketHandler::SendPacket | ( | Packet * | p, | |
NetworkAddress * | recv, | |||
bool | all = false , |
|||
bool | broadcast = false | |||
) |
Send a packet over UDP.
p | the packet to send | |
recv | the receiver (target) of the packet | |
all | send the packet using all sockets that can send it | |
broadcast | whether to send a broadcast message |
Definition at line 81 of file udp.cpp.
References SmallVector< T, S >::Begin(), Packet::buffer, DEBUG, SmallVector< T, S >::End(), NetworkAddress::GetAddress(), NetworkAddress::GetAddressAsString(), NetworkAddress::GetAddressLength(), NetworkAddress::IsFamily(), SmallVector< T, S >::Length(), Listen(), Packet::PrepareToSend(), Packet::size, and sockets.
Referenced by NetworkUDPQueryServerThread().
NetworkAddressList NetworkUDPSocketHandler::bind [protected] |
SocketList NetworkUDPSocketHandler::sockets [protected] |
The opened sockets.
Definition at line 115 of file udp.h.
Referenced by Close(), Listen(), ReceivePackets(), and SendPacket().