From 6720d725c29de616119552aa708ea0ffc6066806 Mon Sep 17 00:00:00 2001 From: Mars Ultor Date: Sat, 25 Oct 2025 12:23:53 -0500 Subject: [PATCH] http server functional --- .gitmodules | 3 +++ CMakeLists.txt | 3 +++ example-host-config.toml | 1 + external/cpp-httplib | 1 + src/daemon-utils/socket-manager.cpp | 10 ++++++++++ src/daemon-utils/socket-manager.hpp | 1 + src/main-daemon.cpp | 5 +++++ 7 files changed, 24 insertions(+) create mode 160000 external/cpp-httplib diff --git a/.gitmodules b/.gitmodules index e20d9f2..0ca30b4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "external/BLAKE3"] path = external/BLAKE3 url = https://github.com/BLAKE3-team/BLAKE3 +[submodule "external/cpp-httplib"] + path = external/cpp-httplib + url = https://github.com/yhirose/cpp-httplib diff --git a/CMakeLists.txt b/CMakeLists.txt index f5542fa..eb42ebd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,7 @@ add_subdirectory(external/tomlplusplus) add_subdirectory(external/duckdb) add_subdirectory(external/json) add_subdirectory(external/BLAKE3/c) +add_subdirectory(external/cpp-httplib) # ----------------------------- # Executables @@ -40,6 +41,7 @@ set(COMMON_LIBS duckdb_static nlohmann_json blake3 + # cpp-httplib ) # ----------------------------- @@ -52,6 +54,7 @@ set(EXTERNAL_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/external/duckdb/src/include ${CMAKE_CURRENT_SOURCE_DIR}/external/json/include/nlohmann ${CMAKE_CURRENT_SOURCE_DIR}/external/BLAKE3/c + ${CMAKE_CURRENT_SOURCE_DIR}/external/cpp-httplib ) # ----------------------------- diff --git a/example-host-config.toml b/example-host-config.toml index 067ab66..ba73b28 100644 --- a/example-host-config.toml +++ b/example-host-config.toml @@ -1,3 +1,4 @@ [hostname] base_path="https://tracker.example.com" inter_comm_port=8032 +http_port=9032 diff --git a/external/cpp-httplib b/external/cpp-httplib new file mode 160000 index 0000000..db561f5 --- /dev/null +++ b/external/cpp-httplib @@ -0,0 +1 @@ +Subproject commit db561f5552cff751cf70393b6f236e720b12271b diff --git a/src/daemon-utils/socket-manager.cpp b/src/daemon-utils/socket-manager.cpp index 48f59f1..86b45f4 100644 --- a/src/daemon-utils/socket-manager.cpp +++ b/src/daemon-utils/socket-manager.cpp @@ -11,6 +11,8 @@ #include "../shared-utils/socket-utils.hpp" #include +#include + namespace socket_manager { void start_daemon(std::uint16_t port){ int server_socket = socket(AF_INET, SOCK_STREAM, 0); @@ -45,4 +47,12 @@ void handle_client(int client_socket){ close(client_socket); spdlog::debug("Connection closed gracefully {}", 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) { + res.set_content("Hello World!", "text/plain"); + }); + server.listen("0.0.0.0", port); +} } diff --git a/src/daemon-utils/socket-manager.hpp b/src/daemon-utils/socket-manager.hpp index 1f5f454..fe6c541 100644 --- a/src/daemon-utils/socket-manager.hpp +++ b/src/daemon-utils/socket-manager.hpp @@ -6,5 +6,6 @@ namespace socket_manager { void handle_client(int client_socket); void start_daemon(std::uint16_t port); + void start_http_server(std::uint16_t port); } diff --git a/src/main-daemon.cpp b/src/main-daemon.cpp index 2b2e2f0..90675e3 100644 --- a/src/main-daemon.cpp +++ b/src/main-daemon.cpp @@ -20,12 +20,17 @@ int main() { auto config = toml::parse_file("host-config.toml"); std::string http_server_fqdn = config["hostname"]["base_path"].value_or("http://example.com"); std::uint16_t inter_comm_port = config["hostname"]["inter_comm_port"].value_or(8033); + std::uint16_t http_port = config["hostname"]["http_port"].value_or(9033); spdlog::debug("Path collected: {}", http_server_fqdn); spdlog::debug("Port collected for inter-process communication {}", inter_comm_port); std::thread socket_management_root = std::thread{socket_manager::start_daemon, inter_comm_port}; + socket_management_root.detach(); spdlog::info("socket management thread started and detached"); + std::thread http_server_root = std::thread{socket_manager::start_http_server, http_port}; + http_server_root.detach(); + spdlog::info("http root thread has been started and detached."); while (true) { sleep(100); spdlog::debug("Status of socket management thread: {}", socket_management_root.joinable());