summaryrefslogtreecommitdiff
path: root/network_client.c
diff options
context:
space:
mode:
authortron <tron@openttd.org>2005-05-15 18:50:55 +0000
committertron <tron@openttd.org>2005-05-15 18:50:55 +0000
commitfea596567944fba8d9d4ead62d948db14690fdf1 (patch)
treead6dc27f46725e511e93e061f51683311027ec65 /network_client.c
parent6cd410afbb3cedff9f6d86fc30dbd4e67817ebc9 (diff)
downloadopenttd-fea596567944fba8d9d4ead62d948db14690fdf1.tar.xz
(svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
Diffstat (limited to 'network_client.c')
-rw-r--r--network_client.c25
1 files changed, 3 insertions, 22 deletions
diff --git a/network_client.c b/network_client.c
index 6f4cebe01..b4d2583c7 100644
--- a/network_client.c
+++ b/network_client.c
@@ -143,13 +143,10 @@ DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_COMMAND)(CommandPacket *cp)
// uint32: P1 (free variables used in DoCommand)
// uint32: P2
// uint32: Tile
- // uint32: decode_params
- // 10 times the last one (lengthof(cp->dp))
+ // string: text
// uint8: CallBackID (see callback_table.c)
//
- uint i;
- char *dparam_char;
Packet *p = NetworkSend_Init(PACKET_CLIENT_COMMAND);
NetworkSend_uint8(p, cp->player);
@@ -157,14 +154,7 @@ DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_COMMAND)(CommandPacket *cp)
NetworkSend_uint32(p, cp->p1);
NetworkSend_uint32(p, cp->p2);
NetworkSend_uint32(p, (uint32)cp->tile);
- /* We are going to send them byte by byte, because dparam is misused
- for chars (if it is used), and else we have a BigEndian / LittleEndian
- problem.. we should fix the misuse of dparam... -- TrueLight */
- dparam_char = (char *)&cp->dp[0];
- for (i = 0; i < lengthof(cp->dp) * 4; i++) {
- NetworkSend_uint8(p, *dparam_char);
- dparam_char++;
- }
+ NetworkSend_string(p, cp->text);
NetworkSend_uint8(p, cp->callback);
NetworkSend_Packet(p, MY_CLIENT);
@@ -587,22 +577,13 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_SYNC)
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_COMMAND)
{
- uint i;
- char *dparam_char;
CommandPacket *cp = malloc(sizeof(CommandPacket));
cp->player = NetworkRecv_uint8(MY_CLIENT, p);
cp->cmd = NetworkRecv_uint32(MY_CLIENT, p);
cp->p1 = NetworkRecv_uint32(MY_CLIENT, p);
cp->p2 = NetworkRecv_uint32(MY_CLIENT, p);
cp->tile = NetworkRecv_uint32(MY_CLIENT, p);
- /* We are going to send them byte by byte, because dparam is misused
- for chars (if it is used), and else we have a BigEndian / LittleEndian
- problem.. we should fix the misuse of dparam... -- TrueLight */
- dparam_char = (char *)&cp->dp[0];
- for (i = 0; i < lengthof(cp->dp) * 4; i++) {
- *dparam_char = NetworkRecv_uint8(MY_CLIENT, p);
- dparam_char++;
- }
+ NetworkRecv_string(MY_CLIENT, p, cp->text, sizeof(cp->text));
cp->callback = NetworkRecv_uint8(MY_CLIENT, p);
cp->frame = NetworkRecv_uint32(MY_CLIENT, p);
cp->next = NULL;