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