network_udp.c
author darkvater
Tue, 04 Jan 2005 00:07:58 +0000
changeset 880 f3d9b97fff06
parent 850 7a9b9f01d5f0
child 903 a301a264e0fc
permissions -rw-r--r--
(svn r1365) -Fix: very, very nasty buffer overflow bug introduced with replace vehicles. You CANNOT access the i[255] of an array that only has 255 elements! I will kick the next person that does that so hard...goddammit (I only noticed it because it screwed up my console in the debug build and took me at least an hour to fix)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     1
#include "stdafx.h"
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     2
#include "network_data.h"
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     3
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     4
#ifdef ENABLE_NETWORK
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     5
850
7a9b9f01d5f0 (svn r1331) Update map size before sending game info
tron
parents: 805
diff changeset
     6
#include "map.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     7
#include "network_gamelist.h"
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
     8
#include "network_udp.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     9
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    10
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
    11
extern void NetworkPopulateCompanyInfo(void);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    12
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    13
//
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    14
// This file handles all the LAN-stuff
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    15
// Stuff like:
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    16
//   - UDP search over the network
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
typedef enum {
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
    20
	PACKET_UDP_CLIENT_FIND_SERVER,
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    21
	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
    22
	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
    23
	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
    24
	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
    25
	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
    26
	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
    27
	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
    28
	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
    29
	PACKET_UDP_END
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    30
} PacketUDPType;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    31
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    32
enum {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    33
	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
    34
	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
    35
	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
    36
};
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    37
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    38
#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
    39
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
    40
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
    41
DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_CLIENT_FIND_SERVER)
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
	Packet *packet;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    44
	// Just a fail-safe.. should never happen
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    45
	if (!_network_udp_server)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    46
		return;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    47
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    48
	packet = NetworkSend_Init(PACKET_UDP_SERVER_RESPONSE);
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
	// Update some game_info
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    51
	_network_game_info.game_date = _date;
850
7a9b9f01d5f0 (svn r1331) Update map size before sending game info
tron
parents: 805
diff changeset
    52
	_network_game_info.map_width = MapSizeX();
7a9b9f01d5f0 (svn r1331) Update map size before sending game info
tron
parents: 805
diff changeset
    53
	_network_game_info.map_height = MapSizeY();
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    54
	_network_game_info.map_set = _opt.landscape;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    55
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    56
	NetworkSend_uint8 (packet, NETWORK_GAME_INFO_VERSION);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    57
	NetworkSend_string(packet, _network_game_info.server_name);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    58
	NetworkSend_string(packet, _network_game_info.server_revision);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    59
	NetworkSend_uint8 (packet, _network_game_info.server_lang);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    60
	NetworkSend_uint8 (packet, _network_game_info.use_password);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    61
	NetworkSend_uint8 (packet, _network_game_info.clients_max);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    62
	NetworkSend_uint8 (packet, _network_game_info.clients_on);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    63
	NetworkSend_uint8 (packet, _network_game_info.spectators_on);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    64
	NetworkSend_uint16(packet, _network_game_info.game_date);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    65
	NetworkSend_uint16(packet, _network_game_info.start_date);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    66
	NetworkSend_string(packet, _network_game_info.map_name);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    67
	NetworkSend_uint16(packet, _network_game_info.map_width);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    68
	NetworkSend_uint16(packet, _network_game_info.map_height);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    69
	NetworkSend_uint8 (packet, _network_game_info.map_set);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    70
	NetworkSend_uint8 (packet, _network_game_info.dedicated);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    71
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    72
	// 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
    73
	NetworkSendUDP_Packet(_udp_server_socket, packet, client_addr);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    74
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    75
	free(packet);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    76
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    77
	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
    78
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    79
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    80
DEF_UDP_RECEIVE_COMMAND(PACKET_UDP_SERVER_RESPONSE)
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
	NetworkGameList *item;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    83
	byte game_info_version;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    84
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    85
	// Just a fail-safe.. should never happen
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    86
	if (_network_udp_server)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    87
		return;
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
	game_info_version = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    90
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    91
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
    92
	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
    93
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    94
	// Find next item
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    95
	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
    96
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    97
	if (game_info_version == 1) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    98
		NetworkRecv_string(p, item->info.server_name, sizeof(item->info.server_name));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    99
		NetworkRecv_string(p, item->info.server_revision, sizeof(item->info.server_revision));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   100
		item->info.server_lang = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   101
		item->info.use_password = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   102
		item->info.clients_max = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   103
		item->info.clients_on = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   104
		item->info.spectators_on = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   105
		item->info.game_date = NetworkRecv_uint16(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   106
		item->info.start_date = NetworkRecv_uint16(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   107
		NetworkRecv_string(p, item->info.map_name, sizeof(item->info.map_name));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   108
		item->info.map_width = NetworkRecv_uint16(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   109
		item->info.map_height = NetworkRecv_uint16(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   110
		item->info.map_set = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   111
		item->info.dedicated = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   112
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   113
		if (item->info.hostname[0] == '\0')
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   114
			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
   115
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   116
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   117
	item->online = true;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   118
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   119
	UpdateNetworkGameWindow(false);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   120
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   121
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   122
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
   123
{
716
8af847728d5b (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 668
diff changeset
   124
	NetworkClientState *cs;
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   125
	NetworkClientInfo *ci;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   126
	Packet *packet;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   127
	Player *player;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   128
	byte active = 0;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   129
	byte current = 0;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   130
	int i;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   131
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   132
	// 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
   133
	if (!_network_udp_server)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   134
		return;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   135
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   136
	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
   137
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   138
	FOR_ALL_PLAYERS(player) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   139
		if (player->is_active)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   140
			active++;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   141
	}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   142
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   143
	/* 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
   144
	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
   145
	NetworkSend_uint8 (packet, active);
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
	/* 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
   148
	NetworkPopulateCompanyInfo();
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   149
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   150
	/* 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
   151
	FOR_ALL_PLAYERS(player) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   152
		/* Skip non-active players */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   153
		if (!player->is_active)
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   154
			continue;
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
		current++;
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   157
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   158
		/* Send the information */
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   159
		NetworkSend_uint8 (packet, current);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   160
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   161
		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
   162
		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
   163
		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
   164
		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
   165
		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
   166
		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
   167
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   168
		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
   169
			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
   170
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   171
		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
   172
			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
   173
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   174
		/* 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
   175
		FOR_ALL_CLIENTS(cs) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   176
			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
   177
			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
   178
				/* 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
   179
				NetworkSend_uint8(packet, 1);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   180
				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
   181
				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
   182
				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
   183
			}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   184
		}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   185
		/* 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
   186
		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
   187
		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
   188
			/* 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
   189
			NetworkSend_uint8(packet, 1);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   190
			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
   191
			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
   192
			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
   193
		}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   194
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   195
		/* 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
   196
		NetworkSend_uint8(packet, 0);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   197
	}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   198
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   199
	/* 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
   200
	FOR_ALL_CLIENTS(cs) {
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   201
		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
   202
		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
   203
			/* 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
   204
			NetworkSend_uint8(packet, 1);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   205
			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
   206
			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
   207
			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
   208
		}
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
	/* 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
   211
	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
   212
	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
   213
		/* 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
   214
		NetworkSend_uint8(packet, 1);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   215
		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
   216
		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
   217
		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
   218
	}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   219
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   220
	/* 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
   221
	NetworkSend_uint8(packet, 0);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   222
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   223
	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
   224
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   225
	free(packet);
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   226
}
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   227
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   228
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
   229
	int i;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   230
	struct in_addr ip;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   231
	uint16 port;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   232
	uint8 ver;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   233
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   234
	/* packet begins with the protocol version (uint8)
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   235
	 * then an uint16 which indicates how many
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   236
	 * 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
   237
	 * 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
   238
	 */
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   239
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   240
	ver = NetworkRecv_uint8(p);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   241
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   242
	if (ver == 1) {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   243
		for (i = NetworkRecv_uint16(p); i != 0 ; i--) {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   244
			ip.s_addr = TO_LE32(NetworkRecv_uint32(p));
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   245
			port = NetworkRecv_uint16(p);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   246
			NetworkUDPQueryServer(inet_ntoa(ip), port);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   247
		}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   248
	}
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
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   251
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
   252
	_network_advertise_retries = 0;
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   253
	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
   254
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   255
	if (!_network_advertise)
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   256
		/* 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
   257
		NetworkUDPRemoveAdvertise();
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   258
}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   259
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   260
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   261
// The layout for the receive-functions by UDP
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   262
typedef void NetworkUDPPacket(Packet *p, struct sockaddr_in *client_addr);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   263
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   264
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
   265
	RECEIVE_COMMAND(PACKET_UDP_CLIENT_FIND_SERVER),
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   266
	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
   267
	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
   268
	NULL,
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   269
	NULL,
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   270
	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
	NULL,
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   272
	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
   273
	NULL
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   274
};
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   275
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   276
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   277
// 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
   278
assert_compile(lengthof(_network_udp_packet) == PACKET_UDP_END);
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
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   281
void NetworkHandleUDPPacket(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
	byte type;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   284
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   285
	type = NetworkRecv_uint8(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   286
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   287
	if (type < PACKET_UDP_END && _network_udp_packet[type] != NULL) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   288
		_network_udp_packet[type](p, client_addr);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   289
	}	else {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   290
		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
   291
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   292
}
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
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   295
// Send a packet over UDP
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   296
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
   297
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   298
	int res;
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
	// Put the length in the buffer
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   301
	p->buffer[0] = p->size & 0xFF;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   302
	p->buffer[1] = p->size >> 8;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   303
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   304
	// Send the buffer
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   305
	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
   306
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   307
	// Check for any errors, but ignore it for the rest
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   308
	if (res == -1) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   309
		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
   310
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   311
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   312
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   313
// Start UDP listener
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   314
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
   315
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   316
	struct sockaddr_in sin;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   317
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   318
	// Make sure socket is closed
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   319
	closesocket(*udp);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   320
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   321
	*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
   322
	if (*udp == INVALID_SOCKET) {
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   323
		DEBUG(net, 1)("[NET][UDP] Failed to start UDP support");
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   324
		return false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   325
	}
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
	// set nonblocking mode for socket
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   328
	{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   329
		unsigned long blocking = 1;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   330
		ioctlsocket(*udp, FIONBIO, &blocking);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   331
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   332
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   333
	sin.sin_family = AF_INET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   334
	// Listen on all IPs
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   335
	sin.sin_addr.s_addr = host;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   336
	sin.sin_port = htons(port);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   337
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   338
	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
   339
		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
   340
		return false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   341
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   342
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   343
	if (broadcast) {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   344
		/* Enable broadcast */
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   345
		unsigned long val = 1;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   346
		setsockopt(*udp, SOL_SOCKET, SO_BROADCAST, (char *) &val , sizeof(val));
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   347
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   348
629
4bb1f0fb0109 (svn r1059) -Fix: [Console] Renamed 'set port' to 'set server_port'
truelight
parents: 543
diff changeset
   349
	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
   350
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   351
	return true;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   352
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   353
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   354
// Close UDP connection
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   355
void NetworkUDPClose(void)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   356
{
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   357
	DEBUG(net, 1) ("[NET][UDP] Closed listeners");
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
	if (_network_udp_server) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   360
		closesocket(_udp_server_socket);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   361
		_udp_server_socket = INVALID_SOCKET;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   362
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   363
		closesocket(_udp_master_socket);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   364
		_udp_master_socket = INVALID_SOCKET;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   365
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   366
		_network_udp_server = false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   367
		_network_udp_broadcast = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   368
	} else {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   369
		closesocket(_udp_client_socket);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   370
		_udp_client_socket = INVALID_SOCKET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   371
		_network_udp_broadcast = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   372
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   373
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   374
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   375
// Receive something on UDP level
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   376
void NetworkUDPReceive(SOCKET udp)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   377
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   378
	struct sockaddr_in client_addr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   379
#ifndef __MORPHOS__
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   380
	int client_len;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   381
#else
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   382
	LONG client_len; // for some reason we need a 'LONG' under MorphOS
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   383
#endif
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   384
	int nbytes;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   385
	static Packet *p = NULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   386
	int packet_len;
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 p is NULL, malloc him.. this prevents unneeded mallocs
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   389
	if (p == NULL)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   390
		p = malloc(sizeof(Packet));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   391
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   392
	packet_len = sizeof(p->buffer);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   393
	client_len = sizeof(client_addr);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   394
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   395
	// Try to receive anything
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   396
	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
   397
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   398
	// 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
   399
	if (nbytes > 0) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   400
		// Get the size of the buffer
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   401
		p->size = (uint16)p->buffer[0];
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   402
		p->size += (uint16)p->buffer[1] << 8;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   403
		// Put the position on the right place
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   404
		p->pos = 2;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   405
		p->next = NULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   406
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   407
		// Handle the packet
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   408
		NetworkHandleUDPPacket(p, &client_addr);
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
		// Free the packet
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   411
		free(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   412
		p = NULL;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   413
	}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   414
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   415
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   416
// Broadcast to all ips
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   417
void NetworkUDPBroadCast(SOCKET udp)
543
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
	int i;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   420
	struct sockaddr_in out_addr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   421
	byte *bcptr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   422
	uint32 bcaddr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   423
	Packet *p;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   424
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   425
	// Init the packet
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   426
	p = NetworkSend_Init(PACKET_UDP_CLIENT_FIND_SERVER);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   427
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   428
	// Go through all the ips on this pc
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   429
	i = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   430
	while (_network_ip_list[i] != 0) {
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   431
		bcaddr = _network_ip_list[i];
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   432
		bcptr = (byte *)&bcaddr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   433
		// Make the address a broadcast address
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   434
		bcptr[3] = 255;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   435
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   436
		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
   437
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   438
		out_addr.sin_family = AF_INET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   439
		out_addr.sin_port = htons(_network_server_port);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   440
		out_addr.sin_addr.s_addr = bcaddr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   441
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   442
		NetworkSendUDP_Packet(udp, p, &out_addr);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   443
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   444
		i++;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   445
	}
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   446
}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   447
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   448
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   449
// 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
   450
void NetworkUDPQueryMasterServer(void)
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   451
{
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   452
	struct sockaddr_in out_addr;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   453
	Packet *p;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   454
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   455
	if (_udp_client_socket == INVALID_SOCKET)
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   456
		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
   457
			return;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   458
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   459
	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
   460
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   461
	out_addr.sin_family = AF_INET;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   462
	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
   463
	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
   464
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   465
	// packet only contains protocol version
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   466
	NetworkSend_uint8(p, NETWORK_MASTER_SERVER_VERSION);
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   467
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   468
	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
   469
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   470
	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
   471
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   472
	free(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   473
}
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
// Find all servers
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   476
void NetworkUDPSearchGame(void)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   477
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   478
	// We are still searching..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   479
	if (_network_udp_broadcast > 0)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   480
		return;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   481
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   482
	// No UDP-socket yet..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   483
	if (_udp_client_socket == INVALID_SOCKET)
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   484
		if (!NetworkUDPListen(&_udp_client_socket, 0, 0, true))
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   485
			return;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   486
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   487
	DEBUG(net, 0)("[NET][UDP] Searching server");
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   488
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   489
	NetworkUDPBroadCast(_udp_client_socket);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   490
	_network_udp_broadcast = 300; // Stay searching for 300 ticks
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   491
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   492
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
   493
NetworkGameList *NetworkUDPQueryServer(const byte* host, unsigned short port)
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   494
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   495
	struct sockaddr_in out_addr;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   496
	Packet *p;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   497
	NetworkGameList *item;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   498
	char hostname[NETWORK_HOSTNAME_LENGTH];
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   499
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   500
	// No UDP-socket yet..
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   501
	if (_udp_client_socket == INVALID_SOCKET)
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   502
		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
   503
			return NULL;
543
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
	ttd_strlcpy(hostname, host, sizeof(hostname));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   506
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   507
	out_addr.sin_family = AF_INET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   508
	out_addr.sin_port = htons(port);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   509
	out_addr.sin_addr.s_addr = NetworkResolveHost(host);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   510
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   511
	// Clear item in gamelist
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   512
	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
   513
	memset(&item->info, 0, sizeof(item->info));
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   514
	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
   515
	snprintf(item->info.hostname, sizeof(item->info.hostname), "%s", hostname);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   516
	item->online = false;
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
	// Init the packet
638
cb9f5f50d3c7 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
truelight
parents: 629
diff changeset
   519
	p = NetworkSend_Init(PACKET_UDP_CLIENT_FIND_SERVER);
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   520
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   521
	NetworkSendUDP_Packet(_udp_client_socket, p, &out_addr);
543
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
	free(p);
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   524
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   525
	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
   526
	return item;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   527
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   528
765
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   529
/* 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
   530
void NetworkUDPRemoveAdvertise(void)
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   531
{
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   532
	struct sockaddr_in out_addr;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   533
	Packet *p;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   534
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   535
	/* Check if we are advertising */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   536
	if (!_networking || !_network_server || !_network_udp_server || !_network_advertise)
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   537
		return;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   538
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   539
	/* check for socket */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   540
	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
   541
		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
   542
			return;
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   543
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   544
	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
   545
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   546
	/* Find somewhere to send */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   547
	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
   548
	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
   549
	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
   550
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   551
	/* Send the packet */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   552
	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
   553
	/* Packet is: Version, server_port */
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   554
	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
   555
	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
   556
	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
   557
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   558
	free(p);
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   559
}
18104986675d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
truelight
parents: 764
diff changeset
   560
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   561
/* Register us to the master server
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   562
     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
   563
void NetworkUDPAdvertise(void)
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   564
{
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   565
	struct sockaddr_in out_addr;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   566
	Packet *p;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   567
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   568
	/* Check if we should send an advertise */
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   569
	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
   570
		return;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   571
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   572
	/* check for socket */
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   573
	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
   574
		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
   575
			return;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   576
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   577
	/* 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
   578
	if (_network_advertise_retries == 0) {
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   579
		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
   580
			return;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   581
		_network_advertise_retries = ADVERTISE_RETRY_TIMES;
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   582
	}
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   583
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   584
	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
   585
		return;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   586
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   587
	_network_advertise_retries--;
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   588
	_network_last_advertise_date = _date;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   589
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   590
	/* Find somewhere to send */
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   591
	out_addr.sin_family = AF_INET;
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   592
	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
   593
	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
   594
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   595
	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
   596
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   597
	/* Send the packet */
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   598
	p = NetworkSend_Init(PACKET_UDP_SERVER_REGISTER);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   599
	/* Packet is: WELCOME_MESSAGE, Version, server_port */
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   600
	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
   601
	NetworkSend_uint8(p, NETWORK_MASTER_SERVER_VERSION);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   602
	NetworkSend_uint16(p, _network_server_port);
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   603
	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
   604
668
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   605
	free(p);
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   606
}
1fe298df8526 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
truelight
parents: 638
diff changeset
   607
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   608
void NetworkUDPInitialize(void)
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   609
{
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   610
	_udp_client_socket = INVALID_SOCKET;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   611
	_udp_server_socket = INVALID_SOCKET;
764
7e1e17b7c7d4 (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
truelight
parents: 738
diff changeset
   612
	_udp_master_socket = INVALID_SOCKET;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   613
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   614
	_network_udp_server = false;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   615
	_network_udp_broadcast = 0;
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   616
}
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   617
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   618
#endif /* ENABLE_NETWORK */