From 18f923c6aee86cbcb599b571f6d4c8af7749f5b6 Mon Sep 17 00:00:00 2001 From: Max <51083570+DRdrProfessor@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:33:44 +0100 Subject: [PATCH] Reworked initial packed server side. --- src/include/sockets.h | 5 ---- src/sockets/CMakeLists.txt | 1 + src/sockets/communication.h | 20 ++++++++++++++++ src/sockets/server.c | 48 +++++++++++++++++++++++++++++++++++-- 4 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 src/sockets/communication.h diff --git a/src/include/sockets.h b/src/include/sockets.h index 1cf74cb..d0090b3 100644 --- a/src/include/sockets.h +++ b/src/include/sockets.h @@ -7,11 +7,6 @@ #define PORT_NUM 42069 -struct net_data -{ - char sName[100]; -}; - int clientstart(); int start_server(); diff --git a/src/sockets/CMakeLists.txt b/src/sockets/CMakeLists.txt index a98b542..84ca8e7 100644 --- a/src/sockets/CMakeLists.txt +++ b/src/sockets/CMakeLists.txt @@ -1,6 +1,7 @@ target_sources(cexp PRIVATE "client.c" + "communication.h" "sock_helper.c" "server.c" "thread_manager.c" diff --git a/src/sockets/communication.h b/src/sockets/communication.h new file mode 100644 index 0000000..9d543b6 --- /dev/null +++ b/src/sockets/communication.h @@ -0,0 +1,20 @@ +#ifndef COMMUNICATION_H +#define COMMUNICATION_H +#include + + +typedef enum msg_type +{ + serverInfo, + message +} EMessageType; + +typedef struct com_data +{ + size_t size; + EMessageType type; + char data; +} CommData; + + +#endif //COMMUNICATION_H \ No newline at end of file diff --git a/src/sockets/server.c b/src/sockets/server.c index 23b0352..37938bf 100644 --- a/src/sockets/server.c +++ b/src/sockets/server.c @@ -6,21 +6,24 @@ #include "cexp.h" #include "sockets.h" #include "thread_manager.h" +#include "communication.h" int server_sockfd; struct sockaddr_in server_sockaddr; bool b_listen = true; char sName[64] = "Test server Linux\0"; -struct net_data server_data; +CommData* srvInitData = NULL; +void* srvInitBuffer = NULL; +uint32_t totalBufferSize; int setup_server(); void* thread_listen_network(); void* thread_client_handler(void* arg); +void send_initial_pack(int client); int start_server() { PRINT_LINE("Starting server..."); - int server_result = setup_server(); if (server_result != 0) return server_result; @@ -38,6 +41,7 @@ int start_server() continue; } TRACE_WARN("Not a valid option given!"); + //TODO: Implement! } return 0; @@ -126,3 +130,43 @@ void* thread_client_handler(void* arg) return NULL; } +void send_initial_pack(int client) +{ + char* srvName = "Linux test server"; + if (srvInitBuffer == NULL) + { + uint32_t srtLen = strlen(srvName) + 1; + totalBufferSize = sizeof(uint32_t) + sizeof(EMessageType) + srtLen; + srvInitBuffer = malloc(totalBufferSize); + if (srvInitBuffer == NULL) + { + TRACE_ERROR("Could not allocate memory!"); + return; + } + *(char*)srvInitBuffer = htonl(srtLen); + *((uint32_t*)srvInitBuffer + 1) = htonl(serverInfo); + void* dataBuffer = ((char*)srvInitBuffer + sizeof(uint32_t) + sizeof(EMessageType)); + if (strcpy(dataBuffer, srvName) != dataBuffer) + { + TRACE_ERROR("Could not copy data to buffer!"); + free(srvInitBuffer); + srvInitBuffer = NULL; + return; + } + } + + if (totalBufferSize <= 0) + return; + + size_t totalDataSend = 0; + while (totalDataSend < totalBufferSize) + { + size_t sended = send(client, srvInitBuffer, totalBufferSize - totalDataSend, 0); + if (sended == -1) + { + TRACE_ERROR("Could not send data."); + break; + } + totalDataSend += sended; + } +} \ No newline at end of file