From 6485986a5c0e92d0c58f738081ee1732af260988 Mon Sep 17 00:00:00 2001 From: Server Ubunto - HOME Date: Wed, 15 Oct 2025 12:58:26 +0100 Subject: [PATCH] New: Base Project. --- CMakeLists.txt | 63 +++++++++++++++++++-------------------- PlayerTracker | Bin 0 -> 46656 bytes compile_commands.json | 1 + include/server_structs.h | 32 ++++++++++++++++++++ include/socket.c | 58 +++++++++++++++++++++++++++++++++++ include/socket.h | 23 ++++++++++++++ source/main.cpp | 37 ++++++++++++++++++++--- 7 files changed, 178 insertions(+), 36 deletions(-) create mode 100755 PlayerTracker create mode 120000 compile_commands.json create mode 100644 include/server_structs.h create mode 100644 include/socket.c create mode 100644 include/socket.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b40ae0..e50de42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,36 +15,35 @@ include_directories(${CMAKE_SOURCE_DIR}/libraries) # Gather all source files (.cpp, .c) file(GLOB_RECURSE PROJECT_SOURCES - ${CMAKE_SOURCE_DIR}/include/*.cpp - ${CMAKE_SOURCE_DIR}/include/*.c - ${CMAKE_SOURCE_DIR}/libraries/*.cpp - ${CMAKE_SOURCE_DIR}/libraries/*.c - ${CMAKE_SOURCE_DIR}/source/*.cpp - ${CMAKE_SOURCE_DIR}/source/*.c +${CMAKE_SOURCE_DIR}/include/*.cpp +${CMAKE_SOURCE_DIR}/include/*.c +${CMAKE_SOURCE_DIR}/libraries/*.cpp +${CMAKE_SOURCE_DIR}/libraries/*.c +${CMAKE_SOURCE_DIR}/source/*.cpp +${CMAKE_SOURCE_DIR}/source/*.c ) # Gather all header files (.hpp, .h) file(GLOB_RECURSE PROJECT_HEADERS - ${CMAKE_SOURCE_DIR}/include/*.hpp - ${CMAKE_SOURCE_DIR}/include/*.h - ${CMAKE_SOURCE_DIR}/libraries/*.hpp - ${CMAKE_SOURCE_DIR}/libraries/*.h - ${CMAKE_SOURCE_DIR}/source/*.hpp - ${CMAKE_SOURCE_DIR}/source/*.h +${CMAKE_SOURCE_DIR}/include/*.hpp +${CMAKE_SOURCE_DIR}/include/*.h +${CMAKE_SOURCE_DIR}/libraries/*.hpp +${CMAKE_SOURCE_DIR}/libraries/*.h +${CMAKE_SOURCE_DIR}/source/*.hpp +${CMAKE_SOURCE_DIR}/source/*.h ) # Allow user to set output program name option(OUTPUT_NAME "Name of the output executable" "") if(OUTPUT_NAME STREQUAL "") - set(EXECUTABLE_NAME ${PROJECT_NAME}) +set(EXECUTABLE_NAME ${PROJECT_NAME}) else() - set(EXECUTABLE_NAME ${OUTPUT_NAME}) +set(EXECUTABLE_NAME ${OUTPUT_NAME}) endif() # Add executable with all sources add_executable(${EXECUTABLE_NAME} - ${PROJECT_SOURCES} - ${PROJECT_HEADERS} +${PROJECT_SOURCES} ) # Set output name property (for consistency) @@ -52,24 +51,24 @@ set_target_properties(${EXECUTABLE_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_NAM # Enable warnings and extra diagnostics if (MSVC) - target_compile_options(${EXECUTABLE_NAME} PRIVATE /W4 /permissive- /analyze) +target_compile_options(${EXECUTABLE_NAME} PRIVATE /W4 /permissive- /analyze) else() - target_compile_options(${EXECUTABLE_NAME} PRIVATE - -Wall - -Wextra - -Wpedantic - -Wshadow - -Wconversion - -Wsign-conversion - -Wuninitialized - -Wunused - -Werror=return-type - -fsanitize=address,undefined - -g - ) - target_link_options(${EXECUTABLE_NAME} PRIVATE -fsanitize=address,undefined) +target_compile_options(${EXECUTABLE_NAME} PRIVATE + -Wall + -Wextra + -Wpedantic + -Wshadow + -Wconversion + -Wsign-conversion + -Wuninitialized + -Wunused + -Werror=return-type + -fsanitize=address,undefined + -g +) +target_link_options(${EXECUTABLE_NAME} PRIVATE -fsanitize=address,undefined) endif() # Optionally, enable testing # enable_testing() -# add_subdirectory(tests) \ No newline at end of file +# add_subdirectory(tests) diff --git a/PlayerTracker b/PlayerTracker new file mode 100755 index 0000000000000000000000000000000000000000..558aff294ccf254a7a01611a990048bcf258f70c GIT binary patch literal 46656 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 qo literal 0 HcmV?d00001 diff --git a/compile_commands.json b/compile_commands.json new file mode 120000 index 0000000..25eb4b2 --- /dev/null +++ b/compile_commands.json @@ -0,0 +1 @@ +build/compile_commands.json \ No newline at end of file diff --git a/include/server_structs.h b/include/server_structs.h new file mode 100644 index 0000000..d3b5178 --- /dev/null +++ b/include/server_structs.h @@ -0,0 +1,32 @@ +#ifndef SERVER_STRUCTS_H +#define SERVER_STRUCTS_H + +struct handshake { + // [not used in the current Remote Telemtry version by AC] + // In future versions it will identify the platform type of the client. + // This will be used to adjust a specific behaviour for each platform. (eIPadDevice for now (1)) + int identifier; + + // [not used in the current Remote Telemtry version by AC] + // In future version this field will identify the AC Remote Telemetry version that the device expects to speak with. + int version; + + // This is the type of operation required by the client. + // The following operations are now available: + // ---------------------------------------------------------------- + // HANDSHAKE = 0 : + // This operation identifier must be set when the client wants to start the comunication. + // + // SUBSCRIBE_UPDATE = 1 : + // This operation identifier must be set when the client wants to be updated from the specific ACServer. + // + // SUBSCRIBE_SPOT = 2 : + // This operation identifier must be set when the client wants to be updated from the specific ACServer just for SPOT Events (e.g.: the end of a lap). + // + // DISMISS = 3 : + // This operation identifier must be set when the client wants to leave the comunication with ACServer. + int operationId; +} __attribute__((packed)); + + +#endif // SERVER_STRUCTS_H diff --git a/include/socket.c b/include/socket.c new file mode 100644 index 0000000..25ba240 --- /dev/null +++ b/include/socket.c @@ -0,0 +1,58 @@ +#include "socket.h" + +int connect_udp_socket(const char* ip, int port) { + int sockfd = socket(AF_INET, SOCK_DGRAM, 0); + if (sockfd < 0) { + perror("socket creation failed"); + return -1; + } + + struct sockaddr_in servaddr; + memset(&servaddr, 0, sizeof(servaddr)); + + servaddr.sin_family = AF_INET; + servaddr.sin_port = htons(port); + servaddr.sin_addr.s_addr = inet_addr(ip); + + if (connect(sockfd, (const struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) { + perror("connection to the server failed"); + close(sockfd); + return -1; + } + + return sockfd; +} + +int bind_udp_socket(int sockfd, const char* ip, int port) { + struct sockaddr_in servaddr; + memset(&servaddr, 0, sizeof(servaddr)); + + servaddr.sin_family = AF_INET; + servaddr.sin_addr.s_addr = inet_addr(ip); + servaddr.sin_port = htons(port); + + if (bind(sockfd, (const struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) { + perror("bind failed"); + close(sockfd); + return -1; + } + + return 0; +} + +int send_udp_message(int sockfd, const char *message, const char *dest_ip, int dest_port) { + struct sockaddr_in destaddr; + memset(&destaddr, 0, sizeof(destaddr)); + + destaddr.sin_family = AF_INET; + destaddr.sin_port = htons(dest_port); + destaddr.sin_addr.s_addr = inet_addr(dest_ip); + + int n = sendto(sockfd, message, strlen(message), 0, (const struct sockaddr*)&destaddr, sizeof(destaddr)); + if (n < 0) { + perror("sendto failed"); + return -1; + } + + return n; +} diff --git a/include/socket.h b/include/socket.h new file mode 100644 index 0000000..0d169ff --- /dev/null +++ b/include/socket.h @@ -0,0 +1,23 @@ +#ifndef SOCKET_H +#define SOCKET_H + +#include +#include +#include +#include +#include + +// ========================= +// UDP SOCKET FUCNTIONS +// ========================= +// Server hosts a UDP socket at 127.0.0.1:12000 +// Client sends a message to the server at 11000 + +int connect_udp_socket(const char* ip, int port); + +int bind_udp_socket(int sockfd, const char* ip, int port); + +int send_udp_message(int sockfd, const char* message, const char* dest_ip, int dest_port); + +#endif // SOCKET_H + diff --git a/source/main.cpp b/source/main.cpp index df28b27..62aecc7 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,7 +1,36 @@ +#include #include +#include +#include +#include +#include + +#include "server_structs.h" +#include "socket.h" + +const int SERVER_OUT_PORT = 12000; +const int SERVER_IN_PORT = 11000; +const char *SERVER_IP = "127.0.0.1"; + +int main(void) { + + printf("[+] Starting server...\n"); + int n = connect_udp_socket(SERVER_IP, SERVER_OUT_PORT); + if (n < 0) { + fprintf(stderr, "[-] Failed to connect to UDP socket at %s:%d\n", SERVER_IP, SERVER_OUT_PORT); + return -1; + } + + // TEST to see what server is sending: + char buffer[1024]; + n = recvfrom(0, buffer, sizeof(buffer)-1, 0, NULL, NULL); + if (n < 0) { + perror("recvfrom failed"); + return -1; + } + + buffer[n] = '\0'; // Null-terminate the received message + printf("Received message: %s\n", buffer); -int main() -{ - std::cout << "Hello, World!" << std::endl; return 0; -} \ No newline at end of file +}