From 1fe0452ad62db24f48df9d0b31863c6949c983a8 Mon Sep 17 00:00:00 2001 From: Server Ubunto - HOME Date: Fri, 17 Oct 2025 15:32:35 +0100 Subject: [PATCH] Feature: Better log printind and lots more of parsing --- PlayerTracker | Bin 184448 -> 209328 bytes include/parcer.c | 12 +++ include/parcer.h | 4 + include/server_structs.h | 8 +- source/main.cpp | 182 ++++++++++++++++++++++++++------------- 5 files changed, 144 insertions(+), 62 deletions(-) diff --git a/PlayerTracker b/PlayerTracker index f8449996beb43ff92ffd39c48816476ffca77f5b..ed531ffba9c368a9438be05a7ec3b8c371914f35 100755 GIT binary patch literal 209328 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�cu|EBIfEc*s%pZ+rzE-dvgp>6;( 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 diff --git a/include/parcer.c b/include/parcer.c index 41f3f33..a7abce0 100644 --- a/include/parcer.c +++ b/include/parcer.c @@ -49,6 +49,18 @@ int32_t read_int32(const u_int8_t *buf, size_t recv_len, size_t *offset, int *ok return (int32_t)ntohl(v); } +void read_float(const u_int8_t *buf, size_t recv_len, size_t *offset, float *out, int *ok) { + if (!ensure(recv_len, *offset, sizeof(float))) { + *ok = 0; + return; + } + uint32_t v; + memcpy(&v, buf + *offset, sizeof(v)); + *offset += sizeof(v); + v = ntohl(v); + memcpy(out, &v, sizeof(float)); +} + void read_bytes(const u_int8_t *buf, size_t recv_len, size_t *offset, u_int8_t *out, size_t len, int *ok) { if (!ensure(recv_len, *offset, len)) { *ok = 0; diff --git a/include/parcer.h b/include/parcer.h index c8fa4d2..3b4163f 100644 --- a/include/parcer.h +++ b/include/parcer.h @@ -33,6 +33,10 @@ u_int32_t read_uint32(const u_int8_t *buf, size_t recv_len, size_t *offset, int // Advances the offset by 4 bytes. int32_t read_int32(const u_int8_t *buf, size_t recv_len, size_t *offset, int *ok); +// Reads a 32-bit float from the buffer in network byte order. +// Advances the offset by 4 bytes. +void read_float(const u_int8_t *buf, size_t recv_len, size_t *offset, float *out, int *ok); + // Reads a fixed number of bytes into the output buffer. // The output buffer must be at least 'len' bytes long. void read_bytes(const u_int8_t *buf, size_t recv_len, size_t *offset, u_int8_t *out, size_t len, int *ok); diff --git a/include/server_structs.h b/include/server_structs.h index 8e80b35..628c3cb 100644 --- a/include/server_structs.h +++ b/include/server_structs.h @@ -62,6 +62,8 @@ struct postion { struct carAtributes { // Related to ACSP_CAR_INFO u_char isConnected; // 1 = connected, 0 = disconnected + u_char isLoading; // 1 = loading, 0 = not loading + char *car_model; char *car_skin; char *driver_name; @@ -74,6 +76,10 @@ struct carAtributes { postion velocity; u_int8_t carGear; u_int16_t carRPM; + u_int32_t lap_time; + u_int32_t cuts; + u_int32_t total_cuts; + u_int32_t total_cuts_alltime; float_t normalizedSplinePos; } __attribute__((packed)); @@ -104,7 +110,7 @@ struct trackAtributes { u_int8_t road_temp; char *weather_graphics; - int32_t elapsed_ms; + u_int32_t elapsed_ms; } __attribute__((packed)); enum ACSP_MessageType { diff --git a/source/main.cpp b/source/main.cpp index 18ea833..04de563 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -12,6 +12,8 @@ #include "server_structs.h" #include "socket.h" +#define DEBUG_CAR_INFO 0 + const int SERVER_OUT_PORT = 12000; const int SERVER_IN_PORT = 11000; const char *SERVER_OUT_IP = "127.0.0.1"; @@ -19,17 +21,8 @@ const char *SERVER_OUT_IP = "127.0.0.1"; const int MAX_PLAYERS = 64; void init_carupdate(carAtributes *car) { - car->carID = 0; - car->position.x = 0.0f; - car->position.y = 0.0f; - car->position.z = 0.0f; - car->velocity.x = 0.0f; - car->velocity.y = 0.0f; - car->velocity.z = 0.0f; - car->carGear = 0; - car->carRPM = 0; - car->normalizedSplinePos = 0.0f; car->isConnected = 0; + car->isLoading = 0; car->car_model = (char *)malloc(64); car->driver_GUID = (char *)malloc(64); @@ -42,6 +35,24 @@ void init_carupdate(carAtributes *car) { strcpy(car->car_skin, ""); strcpy(car->driver_name, ""); strcpy(car->driver_team, ""); + + car->carID = 0; + + car->position.x = 0.0f; + car->position.y = 0.0f; + car->position.z = 0.0f; + + car->velocity.x = 0.0f; + car->velocity.y = 0.0f; + car->velocity.z = 0.0f; + + car->carGear = 0; + car->carRPM = 0; + car->lap_time = 0; + car->cuts = 0; + car->total_cuts = 0; + car->total_cuts_alltime = 0; // TODO: SQL querry to get total cuts of all time; + car->normalizedSplinePos = 0.0f; } int main(void) { @@ -81,29 +92,31 @@ int main(void) { char message[124] = {0}; // just a place to put info messages from the server itself + printf("\n"); while (1) { offset = 0; u_int8_t str_len_8 = 0; memset(buffer, 0, sizeof(buffer)); + // FIX: Its not garanted to receive a full packet in one recvfrom call, but the error -1 is not handled by a unsigned size_t size_t recv_bytes = (size_t)recvfrom(recv_sock_fd, buffer, sizeof(buffer), 0, NULL, NULL); - if (recv_bytes < 0) { - perror("[!] recvfrom() failed"); - close(send_sock_fd); - close(recv_sock_fd); - return EXIT_FAILURE; - } // Convert buffer to utf-8 string and print it +#if DEBUG_CAR_INFO printf("[+] Received %zd bytes from client\n", recv_bytes); +#endif // The first byte of the messages is always an ACSP_MessageType switch ((int)buffer[0]) { - // ============================ - // SERVER → CLIENT MESSAGES - // ============================ + // ============================ + // SERVER → CLIENT MESSAGES + // ============================ + case ACSP_SESSION_INFO: + printf("[+] Message Type: ACSP_SESSION_INFO\n"); + goto skip_message; case ACSP_NEW_SESSION: // DONE printf("[+] Message Type: ACSP_NEW_SESSION\n"); + skip_message: offset = 1; // Reset offset to 1 to read after message types trackInfo.protocol_version = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); @@ -135,7 +148,8 @@ int main(void) { str_len_8 = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); read_string((const u_int8_t *)buffer, recv_bytes, &offset, trackInfo.weather_graphics, str_len_8, &ok); - trackInfo.elapsed_ms = read_int32((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + // FIX: elapsed_ms was/is incorrectly read + trackInfo.elapsed_ms = read_uint32((const u_int8_t *)buffer, recv_bytes, &offset, &ok); if (!ok) { fprintf(stderr, "[-] Error parsing NEW_SESSION packet (offset=%zu)\n", offset); @@ -153,11 +167,12 @@ int main(void) { printf("\tType: %d\tTime: %d mins\tLaps: %d\tWait Time: %d secs\n", trackInfo.typ, trackInfo.time, trackInfo.laps, trackInfo.wait_time); printf("\tAmbient Temp: %d C\tRoad Temp: %d C\n", trackInfo.ambient_temp, trackInfo.road_temp); printf("\tWeather Graphics: %s\n", trackInfo.weather_graphics); - printf("\tElapsed Time: %d ms\n", trackInfo.elapsed_ms); + printf("\tElapsed Time: %d ms (%2d:%2d:%2d)\n\n", trackInfo.elapsed_ms, trackInfo.elapsed_ms / 60000, (trackInfo.elapsed_ms % 60000) / 1000, + (trackInfo.elapsed_ms % 60000) % 1000); break; - case ACSP_NEW_CONNECTION: //DONE + case ACSP_NEW_CONNECTION: // DONE: printf("[+] Message Type: ACSP_NEW_CONNECTION\n"); offset = 1; // Reset offset to 1 to read after message types @@ -181,12 +196,13 @@ int main(void) { } update.isConnected = 1; // Mark as connected + update.isLoading = 1; // Mark as loading printf("\tDriver Name: \"%s\"\n", update.driver_name); printf("\tDriver GUID: \"%s\"\n", update.driver_GUID); printf("\tCar ID: %d\n", update.carID); printf("\tCar Model: \"%s\"\n", update.car_model); - printf("\tCar Skin: \"%s\"\n", update.car_skin); + printf("\tCar Skin: \"%s\"\n\n", update.car_skin); // Store player player into the respective Index if (update.carID < MAX_PLAYERS) { @@ -195,7 +211,7 @@ int main(void) { break; - case ACSP_CONNECTION_CLOSED: // DONE + case ACSP_CONNECTION_CLOSED: // DONE: printf("[+] Message Type: ACSP_CONNECTION_CLOSED\n"); offset = 1; // Reset offset to 1 to read after message types @@ -224,7 +240,7 @@ int main(void) { printf("\tDriver GUID: \"%s\"\n", update.driver_GUID); printf("\tCar ID: %d\n", update.carID); printf("\tCar Model: \"%s\"\n", update.car_model); - printf("\tCar Skin: \"%s\"\n", update.car_skin); + printf("\tCar Skin: \"%s\"\n\n", update.car_skin); // Store player player into the respective Index if (update.carID < MAX_PLAYERS) { @@ -233,10 +249,13 @@ int main(void) { break; - case ACSP_CAR_UPDATE: // DONE + case ACSP_CAR_UPDATE: // DONE: +#if DEBUG_CAR_INFO printf("[+] Message Type: ACSP_CAR_UPDATE\n"); +#endif + offset = 1; - memcpy(&update.carID, buffer + 1, sizeof(uint8_t)); + memcpy(&update.carID, buffer, sizeof(uint8_t)); offset = 1 + sizeof(uint8_t); memcpy(&update.position, buffer + offset, sizeof(postion)); offset += sizeof(postion); @@ -249,30 +268,25 @@ int main(void) { memcpy(&update.normalizedSplinePos, buffer + offset, sizeof(float_t)); offset += sizeof(float_t); +#if DEBUG_CAR_INFO printf("\tCar %d Position: X: %.2f Y: %.2f Z: %.2f ", update.carID, update.position.x, update.position.y, update.position.z); printf("Gear: %d RPM: %d\n", update.carGear, update.carRPM); +#endif + + // Store player player into the respective index + if (update.carID < MAX_PLAYERS) { + memcpy(&players[update.carID].position, &update.position, sizeof(postion)); + memcpy(&players[update.carID].velocity, &update.velocity, sizeof(postion)); + players[update.carID].carGear = update.carGear; + players[update.carID].carRPM = update.carRPM; + players[update.carID].normalizedSplinePos = update.normalizedSplinePos; + } - // Store player player into the respective index - if (update.carID < MAX_PLAYERS) { - memcpy(&players[update.carID].position, &update.position, sizeof(postion)); - memcpy(&players[update.carID].velocity, &update.velocity, sizeof(postion)); - players[update.carID].carGear = update.carGear; - players[update.carID].carRPM = update.carRPM; - players[update.carID].normalizedSplinePos = update.normalizedSplinePos; - } - break; - case ACSP_CAR_INFO: // DONE + case ACSP_CAR_INFO: // DONE: printf("[+] Message Type: ACSP_CAR_INFO\n"); offset = 1; // Reset offset to 1 to read after message types; - // - // is_connected = self.br.read_byte() != 0 - // car_model = self.br.read_utf_string() - // car_skin = self.br.read_utf_string() - // driver_name = self.br.read_utf_string() - // driver_team = self.br.read_utf_string() - // driver_guid = self.br.read_utf_string() update.carID = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); update.isConnected = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); @@ -298,7 +312,7 @@ int main(void) { printf("\tCar Skin: \"%s\"\n", update.car_skin); printf("\tDriver Name: \"%s\"\n", update.driver_name); printf("\tDriver Team: \"%s\"\n", update.driver_team); - printf("\tDriver GUID: \"%s\"\n", update.driver_GUID); + printf("\tDriver GUID: \"%s\"\n\n", update.driver_GUID); // Store player player into the respective Index if (update.carID < MAX_PLAYERS) { @@ -307,44 +321,87 @@ int main(void) { break; - case ACSP_END_SESSION: // DONE-ish (only session type cycling) + case ACSP_END_SESSION: // DONE: (only session type cycling) printf("[+] Message Type: ACSP_END_SESSION\n"); - // Advance session_type to the next in the enum; - - trackInfo.session_type = (SessionType)((trackInfo.session_type + 1) % 3); + // Advance session_type to the next in the enum; - printf("\tNext Session Type: %d\n", trackInfo.session_type); + trackInfo.session_type = (SessionType)((trackInfo.session_type + 1) % 3); + + if (trackInfo.session_type == 0) { + memcpy(trackInfo.session_name, "Practice", 9); + } else if (trackInfo.session_type == 1) { + memcpy(trackInfo.session_name, "Race", 5); + } else if (trackInfo.session_type == 2) { + memcpy(trackInfo.session_name, "Qualify", 8); + } + + printf("\tNext Session Name: %s\n", trackInfo.session_name); + printf("\tNext Session Type: %d\n\n", trackInfo.session_type); break; - case ACSP_VERSION: // TODO + case ACSP_VERSION: // DONE: printf("[+] Message Type: ACSP_VERSION\n"); + offset = 1; // Reset offset to 1 to read after message types + trackInfo.protocol_version = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + + printf("\tProtocol Version: %d\n\n", trackInfo.protocol_version); + break; - case ACSP_CHAT: // TODO + case ACSP_CHAT: // DONE: Receive chat messages printf("[+] Message Type: ACSP_CHAT\n"); + offset = 1; // Reset offset to 1 to read after message types + + update.carID = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + + str_len_8 = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + read_utf32le_string((const u_int8_t *)buffer, recv_bytes, &offset, message, str_len_8, &ok); + + printf("\tCar ID: %d (%s)\n", update.carID, players[update.carID].driver_name); + printf("\tMessage: \"%s\"\n\n", message); + break; - case ACSP_CLIENT_LOADED: // TODO + case ACSP_CLIENT_LOADED: // DONE: Check for client loaded status printf("[+] Message Type: ACSP_CLIENT_LOADED\n"); + offset = 1; // Reset offset to 1 to read after message types + + update.carID = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + + players[update.carID].isLoading = 0; + printf("\tCar ID: %d (%s) Finished Loading into the session\n\n", update.carID, players[update.carID].driver_name); + break; - case ACSP_SESSION_INFO: // TODO - printf("[+] Message Type: ACSP_SESSION_INFO\n"); - break; - - case ACSP_ERROR: // DONE + case ACSP_ERROR: // DONE: Simple error message from server printf("[+] Message Type: ACSP_ERROR\n"); offset = 1; // Reset offset to 1 to read after message types str_len_8 = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); read_utf32le_string((const u_int8_t *)buffer, recv_bytes, &offset, message, str_len_8, &ok); - printf("\tServer Message: \"%s\"\n", message); + printf("\tServer Message: \"%s\"\n\n", message); break; - case ACSP_LAP_COMPLETED: // TODO + case ACSP_LAP_COMPLETED: // TODO: Handle lap completed events printf("[+] Message Type: ACSP_LAP_COMPLETED\n"); + offset = 1; // Reset offset to 1 to read after message types + + update.carID = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + + // TEST: Possiblity of lap_time not behing correct + // TODO: Verify with actual server + update.lap_time = read_uint32((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + update.cuts = read_uint32((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + + update.total_cuts = read_uint32((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + + printf("\tCar ID: %d (%s)\n", update.carID, players[update.carID].driver_name); + printf("\tLap Time: %5d ms\n", update.lap_time); + printf("\tCuts this lap: %d\n", update.cuts); + printf("\tTotal Cuts (this session): %d\n\n", update.total_cuts); + break; // ============================ @@ -365,6 +422,9 @@ int main(void) { printf("[+] Event Type: ACSP_CE_COLLISION_WITH_ENV\n"); break; + // TODO: Add for ranking system + // OPTIMIZE: Make sure DB queries are optimized for speed has there can be more that 30 players querying at the same time + // // ============================ // CLIENT → SERVER COMMANDS // ============================ @@ -412,7 +472,7 @@ int main(void) { // DEFAULT HANDLER // ============================ default: - printf("[!] Unknown Message Type: %d\n", buffer[0]); + printf("[!] Unknown Message Type: %d\n\n", buffer[0]); break; }