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);