network_udp.c
author tron
Fri, 14 Oct 2005 07:59:16 +0000
changeset 2512 a66b16c61a69
parent 2497 0fe349de34c7
child 2524 4882fdefb2cb
permissions -rw-r--r--
(svn r3038) Reorder the loading of standard graphics files to reflect a bit where in the sprite array the sprites end up and assert, that the indices are equal to the corresponding sprite base enums, to guard against typos.
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2153
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2153
diff changeset
     2
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     3
#include "stdafx.h"
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1186
diff changeset
     4
#include "debug.h"
1317
3c90086ff34f (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents: 1299
diff changeset
     5
#include "string.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     6
#include "network_data.h"
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     7
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     8
#ifdef ENABLE_NETWORK
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     9
850
7a9b9f01d5f0 (svn r1331) Update map size before sending game info
tron
parents: 805
diff changeset
    10
#include "map.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    11
#include "network_gamelist.h"
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    12
#include "network_udp.h"
2153
ecfc674410b4 (svn r2663) Include variables.h only in these files which need it, not globally via openttd.h
tron
parents: 1832
diff changeset
    13
#include "variables.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    14
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    15
extern void UpdateNetworkGameWindow(bool unselect);
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
    16
extern void NetworkPopulateCompanyInfo(void);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    17
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    18
//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    19
// This file handles all the LAN-stuff
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    20
// Stuff like:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    21
//   - UDP search over the network
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    22
//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    23
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    24
typedef enum {
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
    25
	PACKET_UDP_CLIENT_FIND_SERVER,
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    26
	PACKET_UDP_SERVER_RESPONSE,
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
    27
	PACKET_UDP_CLIENT_DETAIL_INFO,
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
    28
	PACKET_UDP_SERVER_DETAIL_INFO, // Is not used in OpenTTD itself, only for external querying
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
    29
	PACKET_UDP_SERVER_REGISTER, // Packet to register itself to the master server
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    30
	PACKET_UDP_MASTER_ACK_REGISTER, // Packet indicating registration has succedeed
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    31
	PACKET_UDP_CLIENT_GET_LIST, // Request for serverlist from master server
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    32
	PACKET_UDP_MASTER_RESPONSE_LIST, // Response from master server with server ip's + port's
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
    33
	PACKET_UDP_SERVER_UNREGISTER, // Request to be removed from the server-list
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    34
	PACKET_UDP_END
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    35
} PacketUDPType;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    36
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    37
enum {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    38
	ADVERTISE_NORMAL_INTERVAL = 450,	// interval between advertising in days
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    39
	ADVERTISE_RETRY_INTERVAL = 5,			// readvertise when no response after this amount of days
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    40
	ADVERTISE_RETRY_TIMES = 3					// give up readvertising after this much failed retries
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    41
};
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    42
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    43
#define DEF_UDP_RECEIVE_COMMAND(type) void NetworkPacketReceive_ ## type ## _command(Packet *p, struct sockaddr_in *client_addr)
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    44
void NetworkSendUDP_Packet(SOCKET udp, Packet *p, struct sockaddr_in *recv);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    45
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
    46
NetworkClientState _udp_cs;
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
    47
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
    48
DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_FIND_SERVER)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    49
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    50
	Packet *packet;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    51
	// Just a fail-safe.. should never happen
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    52
	if (!_network_udp_server)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    53
		return;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    54
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    55
	packet = NetworkSend_Init(PACKET_UDP_SERVER_RESPONSE);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    56
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    57
	// Update some game_info
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    58
	_network_game_info.game_date = _date;
850
7a9b9f01d5f0 (svn r1331) Update map size before sending game info
tron
parents: 805
diff changeset
    59
	_network_game_info.map_width = MapSizeX();
7a9b9f01d5f0 (svn r1331) Update map size before sending game info
tron
parents: 805
diff changeset
    60
	_network_game_info.map_height = MapSizeY();
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    61
	_network_game_info.map_set = _opt.landscape;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    62
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    63
	NetworkSend_uint8 (packet, NETWORK_GAME_INFO_VERSION);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    64
	NetworkSend_string(packet, _network_game_info.server_name);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    65
	NetworkSend_string(packet, _network_game_info.server_revision);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    66
	NetworkSend_uint8 (packet, _network_game_info.server_lang);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    67
	NetworkSend_uint8 (packet, _network_game_info.use_password);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    68
	NetworkSend_uint8 (packet, _network_game_info.clients_max);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    69
	NetworkSend_uint8 (packet, _network_game_info.clients_on);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    70
	NetworkSend_uint8 (packet, _network_game_info.spectators_on);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    71
	NetworkSend_uint16(packet, _network_game_info.game_date);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    72
	NetworkSend_uint16(packet, _network_game_info.start_date);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    73
	NetworkSend_string(packet, _network_game_info.map_name);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    74
	NetworkSend_uint16(packet, _network_game_info.map_width);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    75
	NetworkSend_uint16(packet, _network_game_info.map_height);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    76
	NetworkSend_uint8 (packet, _network_game_info.map_set);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    77
	NetworkSend_uint8 (packet, _network_game_info.dedicated);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    78
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    79
	// Let the client know that we are here
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    80
	NetworkSendUDP_Packet(_udp_server_socket, packet, client_addr);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    81
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    82
	free(packet);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    83
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    84
	DEBUG(net, 2)("[NET][UDP] Queried from %s", inet_ntoa(client_addr->sin_addr));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    85
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    86
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    87
DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_RESPONSE)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    88
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    89
	NetworkGameList *item;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    90
	byte game_info_version;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    91
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    92
	// Just a fail-safe.. should never happen
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    93
	if (_network_udp_server)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    94
		return;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    95
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
    96
	game_info_version = NetworkRecv_uint8(&_udp_cs, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    97
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
    98
	if (_udp_cs.quited)
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
    99
		return;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   100
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   101
	DEBUG(net, 6)("[NET][UDP] Server response from %s:%d", inet_ntoa(client_addr->sin_addr),ntohs(client_addr->sin_port));
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   102
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   103
	// Find next item
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   104
	item = NetworkGameListAddItem(inet_addr(inet_ntoa(client_addr->sin_addr)), ntohs(client_addr->sin_port));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   105
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   106
	if (game_info_version == 1) {
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   107
		NetworkRecv_string(&_udp_cs, p, item->info.server_name, sizeof(item->info.server_name));
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   108
		NetworkRecv_string(&_udp_cs, p, item->info.server_revision, sizeof(item->info.server_revision));
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   109
		item->info.server_lang   = NetworkRecv_uint8(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   110
		item->info.use_password  = NetworkRecv_uint8(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   111
		item->info.clients_max   = NetworkRecv_uint8(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   112
		item->info.clients_on    = NetworkRecv_uint8(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   113
		item->info.spectators_on = NetworkRecv_uint8(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   114
		item->info.game_date     = NetworkRecv_uint16(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   115
		item->info.start_date    = NetworkRecv_uint16(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   116
		NetworkRecv_string(&_udp_cs, p, item->info.map_name, sizeof(item->info.map_name));
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   117
		item->info.map_width     = NetworkRecv_uint16(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   118
		item->info.map_height    = NetworkRecv_uint16(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   119
		item->info.map_set       = NetworkRecv_uint8(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   120
		item->info.dedicated     = NetworkRecv_uint8(&_udp_cs, p);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   121
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   122
		if (item->info.hostname[0] == '\0')
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   123
			snprintf(item->info.hostname, sizeof(item->info.hostname), "%s", inet_ntoa(client_addr->sin_addr));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   124
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   125
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   126
	item->online = true;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   127
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   128
	UpdateNetworkGameWindow(false);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   129
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   130
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   131
DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_DETAIL_INFO)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   132
{
716
8af847728d5b (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   133
	NetworkClientState *cs;
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   134
	NetworkClientInfo *ci;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   135
	Packet *packet;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   136
	Player *player;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   137
	byte active = 0;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   138
	byte current = 0;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   139
	int i;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   140
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   141
	// Just a fail-safe.. should never happen
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   142
	if (!_network_udp_server)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   143
		return;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   144
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   145
	packet = NetworkSend_Init(PACKET_UDP_SERVER_DETAIL_INFO);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   146
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   147
	FOR_ALL_PLAYERS(player) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   148
		if (player->is_active)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   149
			active++;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   150
	}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   151
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   152
	/* Send the amount of active companies */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   153
	NetworkSend_uint8 (packet, NETWORK_COMPANY_INFO_VERSION);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   154
	NetworkSend_uint8 (packet, active);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   155
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   156
	/* Fetch the latest version of everything */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   157
	NetworkPopulateCompanyInfo();
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   158
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   159
	/* Go through all the players */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   160
	FOR_ALL_PLAYERS(player) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   161
		/* Skip non-active players */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   162
		if (!player->is_active)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   163
			continue;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   164
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   165
		current++;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   166
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   167
		/* Send the information */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   168
		NetworkSend_uint8 (packet, current);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   169
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   170
		NetworkSend_string(packet, _network_player_info[player->index].company_name);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   171
		NetworkSend_uint8 (packet, _network_player_info[player->index].inaugurated_year);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   172
		NetworkSend_uint64(packet, _network_player_info[player->index].company_value);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   173
		NetworkSend_uint64(packet, _network_player_info[player->index].money);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   174
		NetworkSend_uint64(packet, _network_player_info[player->index].income);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   175
		NetworkSend_uint16(packet, _network_player_info[player->index].performance);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   176
1011
933efc472c62 (svn r1510) -Add: Improved Network Lobby GUI: (bociusz)
truelight
parents: 985
diff changeset
   177
                /* Send 1 if there is a passord for the company else send 0 */
933efc472c62 (svn r1510) -Add: Improved Network Lobby GUI: (bociusz)
truelight
parents: 985
diff changeset
   178
		if (_network_player_info[player->index].password[0] != '\0') {
1186
2c6e9ee834a3 (svn r1689) -Fix: big typo in network_udp.c, the company-password flag didn't work
truelight
parents: 1019
diff changeset
   179
			NetworkSend_uint8 (packet, 1);
1011
933efc472c62 (svn r1510) -Add: Improved Network Lobby GUI: (bociusz)
truelight
parents: 985
diff changeset
   180
		} else {
1186
2c6e9ee834a3 (svn r1689) -Fix: big typo in network_udp.c, the company-password flag didn't work
truelight
parents: 1019
diff changeset
   181
			NetworkSend_uint8 (packet, 0);
1019
6bae6c11e865 (svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents: 1011
diff changeset
   182
		}
6bae6c11e865 (svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents: 1011
diff changeset
   183
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   184
		for (i = 0; i < NETWORK_VEHICLE_TYPES; i++)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   185
			NetworkSend_uint16(packet, _network_player_info[player->index].num_vehicle[i]);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   186
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   187
		for (i = 0; i < NETWORK_STATION_TYPES; i++)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   188
			NetworkSend_uint16(packet, _network_player_info[player->index].num_station[i]);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   189
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   190
		/* Find the clients that are connected to this player */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   191
		FOR_ALL_CLIENTS(cs) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   192
			ci = DEREF_CLIENT_INFO(cs);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   193
			if ((ci->client_playas - 1) == player->index) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   194
				/* The uint8 == 1 indicates that a client is following */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   195
				NetworkSend_uint8(packet, 1);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   196
				NetworkSend_string(packet, ci->client_name);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   197
				NetworkSend_string(packet, ci->unique_id);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   198
				NetworkSend_uint16(packet, ci->join_date);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   199
			}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   200
		}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   201
		/* Also check for the server itself */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   202
		ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   203
		if ((ci->client_playas - 1) == player->index) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   204
			/* The uint8 == 1 indicates that a client is following */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   205
			NetworkSend_uint8(packet, 1);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   206
			NetworkSend_string(packet, ci->client_name);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   207
			NetworkSend_string(packet, ci->unique_id);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   208
			NetworkSend_uint16(packet, ci->join_date);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   209
		}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   210
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   211
		/* Indicates end of client list */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   212
		NetworkSend_uint8(packet, 0);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   213
	}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   214
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   215
	/* And check if we have any spectators */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   216
	FOR_ALL_CLIENTS(cs) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   217
		ci = DEREF_CLIENT_INFO(cs);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   218
		if ((ci->client_playas - 1) > MAX_PLAYERS) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   219
			/* The uint8 == 1 indicates that a client is following */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   220
			NetworkSend_uint8(packet, 1);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   221
			NetworkSend_string(packet, ci->client_name);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   222
			NetworkSend_string(packet, ci->unique_id);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   223
			NetworkSend_uint16(packet, ci->join_date);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   224
		}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   225
	}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   226
	/* Also check for the server itself */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   227
	ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   228
	if ((ci->client_playas - 1) > MAX_PLAYERS) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   229
		/* The uint8 == 1 indicates that a client is following */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   230
		NetworkSend_uint8(packet, 1);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   231
		NetworkSend_string(packet, ci->client_name);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   232
		NetworkSend_string(packet, ci->unique_id);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   233
		NetworkSend_uint16(packet, ci->join_date);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   234
	}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   235
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   236
	/* Indicates end of client list */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   237
	NetworkSend_uint8(packet, 0);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   238
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   239
	NetworkSendUDP_Packet(_udp_server_socket, packet, client_addr);
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   240
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   241
	free(packet);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   242
}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   243
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   244
DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_RESPONSE_LIST) {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   245
	int i;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   246
	struct in_addr ip;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   247
	uint16 port;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   248
	uint8 ver;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   249
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   250
	/* packet begins with the protocol version (uint8)
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   251
	 * then an uint16 which indicates how many
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   252
	 * ip:port pairs are in this packet, after that
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   253
	 * an uint32 (ip) and an uint16 (port) for each pair
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   254
	 */
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   255
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   256
	ver = NetworkRecv_uint8(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   257
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   258
	if (_udp_cs.quited)
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   259
		return;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   260
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   261
	if (ver == 1) {
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   262
		for (i = NetworkRecv_uint16(&_udp_cs, p); i != 0 ; i--) {
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   263
			ip.s_addr = TO_LE32(NetworkRecv_uint32(&_udp_cs, p));
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   264
			port = NetworkRecv_uint16(&_udp_cs, p);
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   265
			NetworkUDPQueryServer(inet_ntoa(ip), port);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   266
		}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   267
	}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   268
}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   269
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   270
DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_MASTER_ACK_REGISTER) {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   271
	_network_advertise_retries = 0;
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   272
	DEBUG(net, 2)("[NET][UDP] We are advertised on the master-server!");
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   273
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   274
	if (!_network_advertise)
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   275
		/* We are advertised, but we don't want to! */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   276
		NetworkUDPRemoveAdvertise();
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   277
}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   278
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   279
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   280
// The layout for the receive-functions by UDP
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   281
typedef void NetworkUDPPacket(Packet *p, struct sockaddr_in *client_addr);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   282
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   283
static NetworkUDPPacket* const _network_udp_packet[] = {
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   284
	RECEIVE_COMMAND(PACKET_UDP_CLIENT_FIND_SERVER),
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   285
	RECEIVE_COMMAND(PACKET_UDP_SERVER_RESPONSE),
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   286
	RECEIVE_COMMAND(PACKET_UDP_CLIENT_DETAIL_INFO),
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   287
	NULL,
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   288
	NULL,
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   289
	RECEIVE_COMMAND(PACKET_UDP_MASTER_ACK_REGISTER),
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   290
	NULL,
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   291
	RECEIVE_COMMAND(PACKET_UDP_MASTER_RESPONSE_LIST),
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   292
	NULL
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   293
};
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   294
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   295
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   296
// If this fails, check the array above with network_data.h
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   297
assert_compile(lengthof(_network_udp_packet) == PACKET_UDP_END);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   298
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   299
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   300
void NetworkHandleUDPPacket(Packet *p, struct sockaddr_in *client_addr)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   301
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   302
	byte type;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   303
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   304
	/* Fake a client, so we can see when there is an illegal packet */
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   305
	_udp_cs.socket = INVALID_SOCKET;
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   306
	_udp_cs.quited = false;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   307
903
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   308
	type = NetworkRecv_uint8(&_udp_cs, p);
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   309
a301a264e0fc (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 850
diff changeset
   310
	if (type < PACKET_UDP_END && _network_udp_packet[type] != NULL && !_udp_cs.quited) {
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   311
		_network_udp_packet[type](p, client_addr);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   312
	}	else {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   313
		DEBUG(net, 0)("[NET][UDP] Received invalid packet type %d", type);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   314
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   315
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   316
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   317
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   318
// Send a packet over UDP
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   319
void NetworkSendUDP_Packet(SOCKET udp, Packet *p, struct sockaddr_in *recv)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   320
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   321
	int res;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   322
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   323
	// Put the length in the buffer
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   324
	p->buffer[0] = p->size & 0xFF;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   325
	p->buffer[1] = p->size >> 8;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   326
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   327
	// Send the buffer
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   328
	res = sendto(udp, p->buffer, p->size, 0, (struct sockaddr *)recv, sizeof(*recv));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   329
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   330
	// Check for any errors, but ignore it for the rest
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   331
	if (res == -1) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   332
		DEBUG(net, 1)("[NET][UDP] Send error: %i", GET_LAST_ERROR());
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   333
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   334
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   335
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   336
// Start UDP listener
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   337
bool NetworkUDPListen(SOCKET *udp, uint32 host, uint16 port, bool broadcast)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   338
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   339
	struct sockaddr_in sin;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   340
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   341
	// Make sure socket is closed
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   342
	closesocket(*udp);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   343
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   344
	*udp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   345
	if (*udp == INVALID_SOCKET) {
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   346
		DEBUG(net, 1)("[NET][UDP] Failed to start UDP support");
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   347
		return false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   348
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   349
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   350
	// set nonblocking mode for socket
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   351
	{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   352
		unsigned long blocking = 1;
2497
0fe349de34c7 (svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents: 2186
diff changeset
   353
#ifndef BEOS_NET_SERVER
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   354
		ioctlsocket(*udp, FIONBIO, &blocking);
2497
0fe349de34c7 (svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents: 2186
diff changeset
   355
#else
0fe349de34c7 (svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents: 2186
diff changeset
   356
		setsockopt(*upd, SOL_SOCKET, SO_NONBLOCK, &blocking);
0fe349de34c7 (svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents: 2186
diff changeset
   357
#endif
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   358
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   359
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   360
	sin.sin_family = AF_INET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   361
	// Listen on all IPs
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   362
	sin.sin_addr.s_addr = host;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   363
	sin.sin_port = htons(port);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   364
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   365
	if (bind(*udp, (struct sockaddr*)&sin, sizeof(sin)) != 0) {
629
4bb1f0fb0109 (svn r1059) -Fix: [Console] Renamed 'set port' to 'set server_port'
truelight
parents: 543
diff changeset
   366
		DEBUG(net, 1) ("[NET][UDP] error: bind failed on %s:%i", inet_ntoa(*(struct in_addr *)&host), port);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   367
		return false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   368
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   369
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   370
	if (broadcast) {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   371
		/* Enable broadcast */
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   372
		unsigned long val = 1;
2497
0fe349de34c7 (svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents: 2186
diff changeset
   373
#ifndef BEOS_NET_SERVER // will work around this, some day; maybe.
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   374
		setsockopt(*udp, SOL_SOCKET, SO_BROADCAST, (char *) &val , sizeof(val));
2497
0fe349de34c7 (svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents: 2186
diff changeset
   375
#endif
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   376
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   377
629
4bb1f0fb0109 (svn r1059) -Fix: [Console] Renamed 'set port' to 'set server_port'
truelight
parents: 543
diff changeset
   378
	DEBUG(net, 1)("[NET][UDP] Listening on port %s:%d", inet_ntoa(*(struct in_addr *)&host), port);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   379
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   380
	return true;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   381
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   382
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   383
// Close UDP connection
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   384
void NetworkUDPClose(void)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   385
{
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   386
	DEBUG(net, 1) ("[NET][UDP] Closed listeners");
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   387
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   388
	if (_network_udp_server) {
985
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   389
		if (_udp_server_socket != INVALID_SOCKET) {
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   390
			closesocket(_udp_server_socket);
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   391
			_udp_server_socket = INVALID_SOCKET;
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   392
		}
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   393
985
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   394
		if (_udp_master_socket != INVALID_SOCKET) {
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   395
			closesocket(_udp_master_socket);
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   396
			_udp_master_socket = INVALID_SOCKET;
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   397
		}
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   398
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   399
		_network_udp_server = false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   400
		_network_udp_broadcast = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   401
	} else {
985
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   402
		if (_udp_client_socket != INVALID_SOCKET) {
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   403
			closesocket(_udp_client_socket);
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   404
			_udp_client_socket = INVALID_SOCKET;
6d7df77b672d (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
truelight
parents: 903
diff changeset
   405
		}
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   406
		_network_udp_broadcast = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   407
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   408
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   409
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   410
// Receive something on UDP level
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   411
void NetworkUDPReceive(SOCKET udp)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   412
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   413
	struct sockaddr_in client_addr;
1343
19445bf5b17e (svn r1847) Adjustment for MorphOS to unbreak the build there and removal of some now obsolete preprocessor magic
tron
parents: 1329
diff changeset
   414
	socklen_t client_len;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   415
	int nbytes;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   416
	static Packet *p = NULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   417
	int packet_len;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   418
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   419
	// If p is NULL, malloc him.. this prevents unneeded mallocs
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   420
	if (p == NULL)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   421
		p = malloc(sizeof(Packet));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   422
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   423
	packet_len = sizeof(p->buffer);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   424
	client_len = sizeof(client_addr);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   425
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   426
	// Try to receive anything
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   427
	nbytes = recvfrom(udp, p->buffer, packet_len, 0, (struct sockaddr *)&client_addr, &client_len);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   428
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   429
	// We got some bytes.. just asume we receive the whole packet
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   430
	if (nbytes > 0) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   431
		// Get the size of the buffer
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   432
		p->size = (uint16)p->buffer[0];
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   433
		p->size += (uint16)p->buffer[1] << 8;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   434
		// Put the position on the right place
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   435
		p->pos = 2;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   436
		p->next = NULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   437
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   438
		// Handle the packet
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   439
		NetworkHandleUDPPacket(p, &client_addr);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   440
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   441
		// Free the packet
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   442
		free(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   443
		p = NULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   444
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   445
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   446
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   447
// Broadcast to all ips
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   448
void NetworkUDPBroadCast(SOCKET udp)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   449
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   450
	int i;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   451
	struct sockaddr_in out_addr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   452
	byte *bcptr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   453
	uint32 bcaddr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   454
	Packet *p;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   455
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   456
	// Init the packet
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   457
	p = NetworkSend_Init(PACKET_UDP_CLIENT_FIND_SERVER);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   458
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   459
	// Go through all the ips on this pc
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   460
	i = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   461
	while (_network_ip_list[i] != 0) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   462
		bcaddr = _network_ip_list[i];
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   463
		bcptr = (byte *)&bcaddr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   464
		// Make the address a broadcast address
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   465
		bcptr[3] = 255;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   466
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   467
		DEBUG(net, 6)("[NET][UDP] Broadcasting to %s", inet_ntoa(*(struct in_addr *)&bcaddr));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   468
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   469
		out_addr.sin_family = AF_INET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   470
		out_addr.sin_port = htons(_network_server_port);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   471
		out_addr.sin_addr.s_addr = bcaddr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   472
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   473
		NetworkSendUDP_Packet(udp, p, &out_addr);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   474
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   475
		i++;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   476
	}
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   477
}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   478
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   479
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   480
// Request the the server-list from the master server
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   481
void NetworkUDPQueryMasterServer(void)
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   482
{
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   483
	struct sockaddr_in out_addr;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   484
	Packet *p;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   485
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   486
	if (_udp_client_socket == INVALID_SOCKET)
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   487
		if (!NetworkUDPListen(&_udp_client_socket, 0, 0, true))
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   488
			return;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   489
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   490
	p = NetworkSend_Init(PACKET_UDP_CLIENT_GET_LIST);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   491
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   492
	out_addr.sin_family = AF_INET;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   493
	out_addr.sin_port = htons(NETWORK_MASTER_SERVER_PORT);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   494
	out_addr.sin_addr.s_addr = NetworkResolveHost(NETWORK_MASTER_SERVER_HOST);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   495
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   496
	// packet only contains protocol version
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   497
	NetworkSend_uint8(p, NETWORK_MASTER_SERVER_VERSION);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   498
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   499
	NetworkSendUDP_Packet(_udp_client_socket, p, &out_addr);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   500
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   501
	DEBUG(net, 2)("[NET][UDP] Queried Master Server at %s:%d", inet_ntoa(out_addr.sin_addr),ntohs(out_addr.sin_port));
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   502
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   503
	free(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   504
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   505
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   506
// Find all servers
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   507
void NetworkUDPSearchGame(void)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   508
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   509
	// We are still searching..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   510
	if (_network_udp_broadcast > 0)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   511
		return;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   512
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   513
	// No UDP-socket yet..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   514
	if (_udp_client_socket == INVALID_SOCKET)
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   515
		if (!NetworkUDPListen(&_udp_client_socket, 0, 0, true))
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   516
			return;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   517
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   518
	DEBUG(net, 0)("[NET][UDP] Searching server");
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   519
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   520
	NetworkUDPBroadCast(_udp_client_socket);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   521
	_network_udp_broadcast = 300; // Stay searching for 300 ticks
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   522
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   523
1329
6988419aa6f0 (svn r1833) byte -> char transition: the rest
tron
parents: 1317
diff changeset
   524
NetworkGameList *NetworkUDPQueryServer(const char* host, unsigned short port)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   525
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   526
	struct sockaddr_in out_addr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   527
	Packet *p;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   528
	NetworkGameList *item;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   529
	char hostname[NETWORK_HOSTNAME_LENGTH];
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   530
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   531
	// No UDP-socket yet..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   532
	if (_udp_client_socket == INVALID_SOCKET)
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   533
		if (!NetworkUDPListen(&_udp_client_socket, 0, 0, true))
738
b96ab9e63d22 (svn r1194) Feature: You can now add and remove servers from the server list. Those will be remembered until you delete them by pressing the Delete key.
dominik
parents: 716
diff changeset
   534
			return NULL;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   535
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   536
	ttd_strlcpy(hostname, host, sizeof(hostname));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   537
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   538
	out_addr.sin_family = AF_INET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   539
	out_addr.sin_port = htons(port);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   540
	out_addr.sin_addr.s_addr = NetworkResolveHost(host);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   541
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   542
	// Clear item in gamelist
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   543
	item = NetworkGameListAddItem(inet_addr(inet_ntoa(out_addr.sin_addr)), ntohs(out_addr.sin_port));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   544
	memset(&item->info, 0, sizeof(item->info));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   545
	snprintf(item->info.server_name, sizeof(item->info.server_name), "%s", hostname);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   546
	snprintf(item->info.hostname, sizeof(item->info.hostname), "%s", hostname);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   547
	item->online = false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   548
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   549
	// Init the packet
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   550
	p = NetworkSend_Init(PACKET_UDP_CLIENT_FIND_SERVER);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   551
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   552
	NetworkSendUDP_Packet(_udp_client_socket, p, &out_addr);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   553
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   554
	free(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   555
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   556
	UpdateNetworkGameWindow(false);
738
b96ab9e63d22 (svn r1194) Feature: You can now add and remove servers from the server list. Those will be remembered until you delete them by pressing the Delete key.
dominik
parents: 716
diff changeset
   557
	return item;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   558
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   559
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   560
/* Remove our advertise from the master-server */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   561
void NetworkUDPRemoveAdvertise(void)
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   562
{
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   563
	struct sockaddr_in out_addr;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   564
	Packet *p;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   565
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   566
	/* Check if we are advertising */
1832
553803be0b29 (svn r2337) -Fix: NetworkUDPRemoveAdvertise wasn't fully correct (which made Darkvater go crazy ;))
truelight
parents: 1343
diff changeset
   567
	if (!_networking || !_network_server || !_network_udp_server)
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   568
		return;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   569
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   570
	/* check for socket */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   571
	if (_udp_master_socket == INVALID_SOCKET)
805
175b92d3c196 (svn r1276) -Fix: [Network] Bug in bind system. Advertising failed on systems with
truelight
parents: 765
diff changeset
   572
		if (!NetworkUDPListen(&_udp_master_socket, _network_server_bind_ip, 0, false))
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   573
			return;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   574
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   575
	DEBUG(net, 2)("[NET][UDP] Removing advertise..");
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   576
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   577
	/* Find somewhere to send */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   578
	out_addr.sin_family = AF_INET;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   579
	out_addr.sin_port = htons(NETWORK_MASTER_SERVER_PORT);
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   580
	out_addr.sin_addr.s_addr = NetworkResolveHost(NETWORK_MASTER_SERVER_HOST);
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   581
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   582
	/* Send the packet */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   583
	p = NetworkSend_Init(PACKET_UDP_SERVER_UNREGISTER);
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   584
	/* Packet is: Version, server_port */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   585
	NetworkSend_uint8(p, NETWORK_MASTER_SERVER_VERSION);
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   586
	NetworkSend_uint16(p, _network_server_port);
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   587
	NetworkSendUDP_Packet(_udp_master_socket, p, &out_addr);
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   588
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   589
	free(p);
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   590
}
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   591
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   592
/* Register us to the master server
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   593
     This function checks if it needs to send an advertise */
716
8af847728d5b (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   594
void NetworkUDPAdvertise(void)
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   595
{
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   596
	struct sockaddr_in out_addr;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   597
	Packet *p;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   598
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   599
	/* Check if we should send an advertise */
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   600
	if (!_networking || !_network_server || !_network_udp_server || !_network_advertise)
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   601
		return;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   602
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   603
	/* check for socket */
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   604
	if (_udp_master_socket == INVALID_SOCKET)
805
175b92d3c196 (svn r1276) -Fix: [Network] Bug in bind system. Advertising failed on systems with
truelight
parents: 765
diff changeset
   605
		if (!NetworkUDPListen(&_udp_master_socket, _network_server_bind_ip, 0, false))
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   606
			return;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   607
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   608
	/* Only send once in the 450 game-days (about 15 minutes) */
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   609
	if (_network_advertise_retries == 0) {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   610
		if ( (_network_last_advertise_date + ADVERTISE_NORMAL_INTERVAL) > _date)
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   611
			return;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   612
		_network_advertise_retries = ADVERTISE_RETRY_TIMES;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   613
	}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   614
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   615
	if ( (_network_last_advertise_date + ADVERTISE_RETRY_INTERVAL) > _date)
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   616
		return;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   617
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   618
	_network_advertise_retries--;
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   619
	_network_last_advertise_date = _date;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   620
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   621
	/* Find somewhere to send */
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   622
	out_addr.sin_family = AF_INET;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   623
	out_addr.sin_port = htons(NETWORK_MASTER_SERVER_PORT);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   624
	out_addr.sin_addr.s_addr = NetworkResolveHost(NETWORK_MASTER_SERVER_HOST);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   625
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   626
	DEBUG(net, 1)("[NET][UDP] Advertising to master server");
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   627
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   628
	/* Send the packet */
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   629
	p = NetworkSend_Init(PACKET_UDP_SERVER_REGISTER);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   630
	/* Packet is: WELCOME_MESSAGE, Version, server_port */
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   631
	NetworkSend_string(p, NETWORK_MASTER_SERVER_WELCOME_MESSAGE);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   632
	NetworkSend_uint8(p, NETWORK_MASTER_SERVER_VERSION);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   633
	NetworkSend_uint16(p, _network_server_port);
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   634
	NetworkSendUDP_Packet(_udp_master_socket, p, &out_addr);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   635
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   636
	free(p);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   637
}
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   638
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   639
void NetworkUDPInitialize(void)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   640
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   641
	_udp_client_socket = INVALID_SOCKET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   642
	_udp_server_socket = INVALID_SOCKET;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   643
	_udp_master_socket = INVALID_SOCKET;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   644
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   645
	_network_udp_server = false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   646
	_network_udp_broadcast = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   647
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   648
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   649
#endif /* ENABLE_NETWORK */