Mercurial > hg > openttd
changeset 11589:0029be6ea8f5 draft
(svn r15961) -Codechange: prepare the 'client' side for receiving 'session keys' from the masterserver so servers can register with multiple IPs as the same server.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Sun, 05 Apr 2009 19:43:41 +0000 |
parents | adc096103715 |
children | 52ac90225ea6 |
files | src/network/core/udp.cpp src/network/core/udp.h src/network/network_udp.cpp |
diffstat | 3 files changed, 15 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -280,6 +280,7 @@ UDP_COMMAND(PACKET_UDP_SERVER_UNREGISTER); UDP_COMMAND(PACKET_UDP_CLIENT_GET_NEWGRFS); UDP_COMMAND(PACKET_UDP_SERVER_NEWGRFS); + UDP_COMMAND(PACKET_UDP_MASTER_SESSION_KEY); default: if (this->HasClientQuit()) { @@ -315,5 +316,6 @@ DEFINE_UNAVAILABLE_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_UNREGISTER); DEFINE_UNAVAILABLE_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_GET_NEWGRFS); DEFINE_UNAVAILABLE_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_NEWGRFS); +DEFINE_UNAVAILABLE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_SESSION_KEY); #endif /* ENABLE_NETWORK */
--- a/src/network/core/udp.h +++ b/src/network/core/udp.h @@ -86,6 +86,7 @@ PACKET_UDP_SERVER_UNREGISTER, ///< Request to be removed from the server-list PACKET_UDP_CLIENT_GET_NEWGRFS, ///< Requests the name for a list of GRFs (GRF_ID and MD5) PACKET_UDP_SERVER_NEWGRFS, ///< Sends the list of NewGRF's requested. + PACKET_UDP_MASTER_SESSION_KEY, ///< Sends a fresh session key to the client PACKET_UDP_END ///< Must ALWAYS be on the end of this list!! (period) }; @@ -110,6 +111,7 @@ 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);
--- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -28,6 +28,9 @@ ThreadMutex *_network_udp_mutex = ThreadMutex::New(); +/** Session key to register ourselves to the master server */ +static uint64 _session_key = 0; + enum { ADVERTISE_NORMAL_INTERVAL = 30000, // interval between advertising in ticks (15 minutes) ADVERTISE_RETRY_INTERVAL = 300, // readvertise when no response after this many ticks (9 seconds) @@ -43,6 +46,7 @@ class MasterNetworkUDPSocketHandler : public NetworkUDPSocketHandler { protected: DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_ACK_REGISTER); + DECLARE_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_SESSION_KEY); public: virtual ~MasterNetworkUDPSocketHandler() {} }; @@ -56,6 +60,12 @@ if (!_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise(); } +DEF_UDP_RECEIVE_COMMAND(Master, PACKET_UDP_MASTER_SESSION_KEY) +{ + _session_key = p->Recv_uint64(); + DEBUG(net, 2, "[udp] received new session key from master server"); +} + ///*** Communication with clients (we are server) ***/ class ServerNetworkUDPSocketHandler : public NetworkUDPSocketHandler { @@ -503,6 +513,7 @@ p.Send_string(NETWORK_MASTER_SERVER_WELCOME_MESSAGE); p.Send_uint8 (NETWORK_MASTER_SERVER_VERSION); p.Send_uint16(_settings_client.network.server_port); + p.Send_uint64(_session_key); _network_udp_mutex->BeginCritical(); if (_udp_master_socket != NULL) _udp_master_socket->SendPacket(&p, &out_addr);