diff options
author | rubidium <rubidium@openttd.org> | 2008-07-17 11:47:57 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-07-17 11:47:57 +0000 |
commit | 348600eca9cfed3894798c40cdf6a3e54870c852 (patch) | |
tree | 6e8acb232fa0954b26e45427f5fe235e47f3e471 /src/network | |
parent | 03afcec36f58dc368b7b9d877a257872857d31e9 (diff) | |
download | openttd-348600eca9cfed3894798c40cdf6a3e54870c852.tar.xz |
(svn r13713) -Fix: possible crash on creating a network packet.
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/core/config.h | 2 | ||||
-rw-r--r-- | src/network/network_udp.cpp | 57 |
2 files changed, 6 insertions, 53 deletions
diff --git a/src/network/core/config.h b/src/network/core/config.h index 0a950d1f1..6b4b471bf 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -20,7 +20,7 @@ enum { SEND_MTU = 1460, ///< Number of bytes we can pack in a single packet NETWORK_GAME_INFO_VERSION = 4, ///< What version of game-info do we use? - NETWORK_COMPANY_INFO_VERSION = 4, ///< What version of company info is this? + NETWORK_COMPANY_INFO_VERSION = 5, ///< What version of company info is this? NETWORK_MASTER_SERVER_VERSION = 1, ///< What version of master-server-protocol do we use? NETWORK_NAME_LENGTH = 80, ///< The maximum length of the server name and map name, in bytes including '\0' diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index c0ee3bbd5..1a85d3d98 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -108,12 +108,6 @@ DEF_UDP_RECEIVE_COMMAND(Server, PACKET_UDP_CLIENT_FIND_SERVER) DEF_UDP_RECEIVE_COMMAND(Server, PACKET_UDP_CLIENT_DETAIL_INFO) { - NetworkTCPSocketHandler *cs; - NetworkClientInfo *ci; - Player *player; - byte current = 0; - int i; - // Just a fail-safe.. should never happen if (!_network_udp_server) return; @@ -126,6 +120,8 @@ DEF_UDP_RECEIVE_COMMAND(Server, PACKET_UDP_CLIENT_DETAIL_INFO) /* Fetch the latest version of everything */ NetworkPopulateCompanyInfo(); + Player *player; + byte current = 0; /* Go through all the players */ FOR_ALL_PLAYERS(player) { /* Skip non-active players */ @@ -146,58 +142,15 @@ DEF_UDP_RECEIVE_COMMAND(Server, PACKET_UDP_CLIENT_DETAIL_INFO) /* Send 1 if there is a passord for the company else send 0 */ packet.Send_bool (!StrEmpty(_network_player_info[player->index].password)); - for (i = 0; i < NETWORK_VEHICLE_TYPES; i++) + for (int i = 0; i < NETWORK_VEHICLE_TYPES; i++) { packet.Send_uint16(_network_player_info[player->index].num_vehicle[i]); - - for (i = 0; i < NETWORK_STATION_TYPES; i++) - packet.Send_uint16(_network_player_info[player->index].num_station[i]); - - /* Find the clients that are connected to this player */ - FOR_ALL_CLIENTS(cs) { - ci = DEREF_CLIENT_INFO(cs); - if (ci->client_playas == player->index) { - packet.Send_bool (true); - packet.Send_string(ci->client_name); - packet.Send_string(ci->unique_id); - packet.Send_uint32(ci->join_date); - } - } - /* Also check for the server itself */ - ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX); - if (ci->client_playas == player->index) { - packet.Send_bool (true); - packet.Send_string(ci->client_name); - packet.Send_string(ci->unique_id); - packet.Send_uint32(ci->join_date); } - /* Indicates end of client list */ - packet.Send_bool(false); - } - - /* And check if we have any spectators */ - FOR_ALL_CLIENTS(cs) { - ci = DEREF_CLIENT_INFO(cs); - if (!IsValidPlayer(ci->client_playas)) { - packet.Send_bool (true); - packet.Send_string(ci->client_name); - packet.Send_string(ci->unique_id); - packet.Send_uint32(ci->join_date); + for (int i = 0; i < NETWORK_STATION_TYPES; i++) { + packet.Send_uint16(_network_player_info[player->index].num_station[i]); } } - /* Also check for the server itself */ - ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX); - if (!IsValidPlayer(ci->client_playas)) { - packet.Send_bool (true); - packet.Send_string(ci->client_name); - packet.Send_string(ci->unique_id); - packet.Send_uint32(ci->join_date); - } - - /* Indicates end of client list */ - packet.Send_bool(false); - this->SendPacket(&packet, client_addr); } |