From 19e030ee435799613a657d56e19ac1f7d0d23910 Mon Sep 17 00:00:00 2001 From: Taylor Richards Date: Tue, 15 Sep 2015 03:16:04 -0400 Subject: [PATCH] make gtrack compatible with FS1 --- include/gtrack.h | 9 +++++++++ src/network/gtrack.cpp | 20 +++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/include/gtrack.h b/include/gtrack.h index f16fb2b..f00c7fb 100644 --- a/include/gtrack.h +++ b/include/gtrack.h @@ -22,7 +22,11 @@ #define NET_ACK_TIMEOUT 2500 #define NET_GAME_TIMEOUT 300 //time in seconds +#ifndef MAKE_FS1 #define MAX_GAME_DATA_SIZE 500 +#else +#define MAX_GAME_DATA_SIZE 700 +#endif #define MAX_GENERIC_GAME_NAME_LEN 32 @@ -51,7 +55,12 @@ #define GT_FREESPACE2 4 #define GT_UNUSED 0 +#ifndef MAKE_FS1 #define GAME_HEADER_ONLY_SIZE (sizeof(game_packet_header)-MAX_GAME_DATA_SIZE) +#else +// header struct not packed in FS1, add 3 bytes padding +#define GAME_HEADER_ONLY_SIZE (sizeof(game_packet_header)-MAX_GAME_DATA_SIZE+3) +#endif #pragma pack(push, 1) typedef struct { diff --git a/src/network/gtrack.cpp b/src/network/gtrack.cpp index 5d0dc99..59df65c 100644 --- a/src/network/gtrack.cpp +++ b/src/network/gtrack.cpp @@ -47,10 +47,11 @@ // check structs for size compatibility -SDL_COMPILE_TIME_ASSERT(game_packet_header, sizeof(game_packet_header) == 529); #ifndef MAKE_FS1 +SDL_COMPILE_TIME_ASSERT(game_packet_header, sizeof(game_packet_header) == 529); SDL_COMPILE_TIME_ASSERT(freespace2_net_game_data, sizeof(freespace2_net_game_data) == 120); #else +SDL_COMPILE_TIME_ASSERT(game_packet_header, sizeof(game_packet_header) == 729); SDL_COMPILE_TIME_ASSERT(freespace_net_game_data, sizeof(freespace_net_game_data) == 696); #endif SDL_COMPILE_TIME_ASSERT(game_list, sizeof(game_list) == 384); @@ -100,6 +101,15 @@ static int SerializeGamePacket(const game_packet_header *gph, ubyte *data) PXO_ADD_UINT(gph->len); PXO_ADD_DATA(gph->game_type); + +#ifdef MAKE_FS1 + // FS1 needs an extra 3 bytes padding + char h_pad[3]; + SDL_zero(h_pad); + + PXO_ADD_DATA(h_pad); +#endif + PXO_ADD_DATA(gph->junk); // not used, basically just padding for compatibility PXO_ADD_INT(gph->type); PXO_ADD_UINT(gph->sig); @@ -201,6 +211,14 @@ static void DeserializeGamePacket(const ubyte *data, const int data_size, game_p PXO_GET_UINT(gph->len); PXO_GET_DATA(gph->game_type); + +#ifdef MAKE_FS1 + // FS1 has 3 bytes of padding here + char h_pad[3]; + + PXO_GET_DATA(h_pad); +#endif + PXO_GET_DATA(gph->junk); // not used, basically just padding for compatibility PXO_GET_INT(gph->type); PXO_GET_UINT(gph->sig); -- 2.39.2