diff --git a/src/daemon-utils/socket-manager.cpp b/src/daemon-utils/socket-manager.cpp index 86b45f4..5a6a068 100644 --- a/src/daemon-utils/socket-manager.cpp +++ b/src/daemon-utils/socket-manager.cpp @@ -50,9 +50,11 @@ void handle_client(int client_socket){ void start_http_server(std::uint16_t port){ spdlog::info("Starting HTTP server on {}", port); httplib::Server server = httplib::Server{}; - server.Get("/test", [](const httplib::Request &, httplib::Response &res) { + server.Get("/test", [](const httplib::Request& req, httplib::Response &res) { res.set_content("Hello World!", "text/plain"); + spdlog::info("/test endpoint hit by: {}", req.remote_addr); }); + server.listen("0.0.0.0", port); } } diff --git a/src/shared-utils/socket-utils.cpp b/src/shared-utils/socket-utils.cpp index eb1e56a..f0e42e1 100644 --- a/src/shared-utils/socket-utils.cpp +++ b/src/shared-utils/socket-utils.cpp @@ -1,12 +1,19 @@ #include #include -#include +#include +#include #include "socket-utils.hpp" namespace socket_utils { - ssize_t write_to_socket(int sock_fd, std::vector& write_buffer) { + +ssize_t write_to_socket(int sock_fd, std::vector& write_buffer) { if (write_buffer.empty()) return 0; - + + // ensure newline termination + if (write_buffer.back() != '\n') { + write_buffer.push_back('\n'); + } + char temp[4096]; size_t to_write = std::min(write_buffer.size(), sizeof(temp)); std::copy(write_buffer.begin(), write_buffer.begin() + to_write, temp); @@ -17,13 +24,34 @@ namespace socket_utils { } return bytes_sent; } + + ssize_t read_from_socket(int sock_fd, std::vector& read_buffer) { - char temp[4096]; // local buffer, destroyed when function exits - ssize_t bytes_read = recv(sock_fd, temp, sizeof(temp), 0); - if (bytes_read > 0) { + char temp[4096]; + ssize_t total_read = 0; + + // Keep reading until newline found + while (true) { + ssize_t bytes_read = recv(sock_fd, temp, sizeof(temp), 0); + if (bytes_read <= 0) { + return (total_read > 0) ? total_read : bytes_read; // error or closed + } + read_buffer.insert(read_buffer.end(), temp, temp + bytes_read); + total_read += bytes_read; + + // check for newline in the newly extended buffer + for (size_t i = (read_buffer.size() > static_cast(bytes_read) + ? read_buffer.size() - bytes_read + : 0); + i < read_buffer.size(); ++i) + { + if (read_buffer[i] == '\n') { + return total_read; // stop when newline is received + } + } } - return bytes_read; -} } +} // namespace socket_utils +