From d7066c2220297a73133afe36134efc32cf64ef69 Mon Sep 17 00:00:00 2001 From: snider Date: Wed, 15 Oct 2025 22:28:49 +0100 Subject: [PATCH] Add command line options for API server host and port configuration --- src/api/ApiServer.cpp | 24 ++++++++++++++++++++++++ src/api/ApiServer.hpp | 14 ++++++++++---- src/daemon/daemon.cpp | 3 ++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/api/ApiServer.cpp b/src/api/ApiServer.cpp index 8bc8dfa9..a209f731 100644 --- a/src/api/ApiServer.cpp +++ b/src/api/ApiServer.cpp @@ -7,6 +7,30 @@ #include #include "version.h" +#include "common/command_line.h" + +namespace +{ + const command_line::arg_descriptor arg_api_bind_port = {"api-bind-port", "Port for API server to bind to", 36943}; + const command_line::arg_descriptor arg_api_bind_host = {"api-bind-host", "IP/Hostname for API server to bind to", "127.0.0.1"}; +} + +uint16_t ApiServer::m_port = 8000; +std::string ApiServer::m_host = "127.0.0.1"; + +void ApiServer::init_options(boost::program_options::options_description& desc) { + command_line::add_arg(desc, arg_api_bind_port); + command_line::add_arg(desc, arg_api_bind_host); +} + +ApiServer::ApiServer(const boost::program_options::variables_map& vm) : m_vm(vm) { + if (vm.count(arg_api_bind_port.name)) { + m_port = vm[arg_api_bind_port.name].as(); + } + if (vm.count(arg_api_bind_host.name)) { + m_host = vm[arg_api_bind_host.name].as(); + } +} void ApiServer::run() { diff --git a/src/api/ApiServer.hpp b/src/api/ApiServer.hpp index 3adc6513..55ee92f2 100644 --- a/src/api/ApiServer.hpp +++ b/src/api/ApiServer.hpp @@ -2,33 +2,39 @@ #define ApiServer_hpp #include "currency_core/blockchain_storage.h" - #include "currency_core/currency_core.h" #include "oatpp/web/server/HttpConnectionHandler.hpp" #include "oatpp/network/tcp/server/ConnectionProvider.hpp" #include "oatpp/parser/json/mapping/ObjectMapper.hpp" #include "oatpp/core/macro/component.hpp" #include "oatpp-swagger/Resources.hpp" - #include "oatpp/network/Server.hpp" #include +#include + +namespace po = boost::program_options; class ApiServer { private: std::thread m_server_thread; std::shared_ptr m_server; + boost::program_options::variables_map m_vm; void run(); public: + static uint16_t m_port; + static std::string m_host; - ApiServer() = default; + static void init_options(po::options_description& desc); + + ApiServer(const boost::program_options::variables_map& vm); class Components { public: OATPP_CREATE_COMPONENT(std::shared_ptr, serverConnectionProvider)([] { - return oatpp::network::tcp::server::ConnectionProvider::createShared({"0.0.0.0", 8000, oatpp::network::Address::IP_4}); + return oatpp::network::tcp::server::ConnectionProvider::createShared({ApiServer::m_host, ApiServer::m_port, oatpp::network::Address::IP_4}); }()); OATPP_CREATE_COMPONENT(std::shared_ptr, httpRouter)([] { diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp index 4ddab5bf..9640b006 100644 --- a/src/daemon/daemon.cpp +++ b/src/daemon/daemon.cpp @@ -201,6 +201,7 @@ int main(int argc, char* argv[]) bc_services::bc_offers_service::init_options(desc_cmd_sett); currency::stratum_server::init_options(desc_cmd_sett); tools::db::db_backend_selector::init_options(desc_cmd_sett); + ApiServer::init_options(desc_cmd_sett); po::options_description desc_options("Allowed options"); desc_options.add(desc_cmd_only).add(desc_cmd_sett); @@ -469,7 +470,7 @@ int main(int argc, char* argv[]) // Initialize API server oatpp::base::Environment::init(); - ApiServer api_server; + ApiServer api_server(vm); api_server.start(); // Setup signal handler to gracefully stop the main p2p loop