From 3acd286ae02f01bfd9f3baabd40d82ce3b24a748 Mon Sep 17 00:00:00 2001 From: alashkova Date: Tue, 22 Oct 2024 16:40:03 +0300 Subject: [PATCH] =?UTF-8?q?SUPPORT-8592.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20location=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=BC=D0=B5=D1=80=D0=B0=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/service_version.c | 60 +++++++++++++++++++++++++++++++++++ src/modules/service_version.h | 22 +++++++++++++ src/service_manager.c | 13 ++++++++ src/service_manager.h | 2 ++ 4 files changed, 97 insertions(+) create mode 100644 src/modules/service_version.c create mode 100644 src/modules/service_version.h diff --git a/src/modules/service_version.c b/src/modules/service_version.c new file mode 100644 index 0000000..7dca8ab --- /dev/null +++ b/src/modules/service_version.c @@ -0,0 +1,60 @@ +#include "service_version.h" + +#include "version.h" + +#include "fcgisrv/fcgi_utils.h" + +#include "utils/logger.h" + +#include + + +#define VERSION_TEXT \ + "Content-type: text/plain" CRLF CRLF \ + APP_VERSION + +static const str_t VERSION_CONF_DEFAULT_LOCATION = str_t_const("/version"); + + +int +version_conf_load(version_conf_t *conf) +{ + LOG_TRACE("version_conf_load enter"); + + assert(conf != NULL); + + conf->location = &VERSION_CONF_DEFAULT_LOCATION; + + LOG_TRACE("version_conf_load exit"); + return 0; +} + +void +version_conf_clear(version_conf_t *conf) +{ + LOG_TRACE("version_conf_load enter"); + + if (conf != NULL) { + conf->location = NULL; + } + + LOG_TRACE("version_conf_load exit"); +} + +fcgi_handler_status_t +fcgi_version_handler(FCGX_Request* request, void* ctx) +{ + LOG_TRACE("fcgi_version_handler enter"); + + assert(request != NULL); + + if (request == NULL) { + LOG_ERROR("fcgi_version_handler failed: request is NULL"); + return HANDLER_ERROR; + } + + FCGX_FPrintF(request->out, VERSION_TEXT); + + LOG_TRACE("fcgi_version_handler exit"); + return HANDLER_SUCCESS; +} diff --git a/src/modules/service_version.h b/src/modules/service_version.h new file mode 100644 index 0000000..18e59f0 --- /dev/null +++ b/src/modules/service_version.h @@ -0,0 +1,22 @@ +#ifndef SERVICE_VERSION_H_INCLUDED +#define SERVICE_VERSION_H_INCLUDED + + +#include "fcgisrv/fcgi_server.h" + +#include "utils/str_t.h" + + +typedef struct version_conf_s { + const str_t *location; + +} version_conf_t; + + +int version_conf_load(version_conf_t *conf); +void version_conf_clear(version_conf_t *conf); + +fcgi_handler_status_t fcgi_version_handler(FCGX_Request* request, void* ctx); + + +#endif // SERVICE_VERSION_H_INCLUDED diff --git a/src/service_manager.c b/src/service_manager.c index e791ea3..03092e6 100644 --- a/src/service_manager.c +++ b/src/service_manager.c @@ -166,6 +166,11 @@ service_manager_load_conf(const char* config_file_name, service_manager_conf_t* goto error; } + if (version_conf_load(&services_cf->version_cf)) { + LOG_ERROR("Show version service configuraton loading failed"); + goto error; + } + conf_file_close_file(conf_file); LOG_TRACE("service_manager_load_conf exit with success"); @@ -185,6 +190,7 @@ service_manager_clear_conf(service_manager_conf_t* services_cf) { assert(services_cf != NULL); + version_conf_clear(&services_cf->version_cf); sign_conf_clear(&services_cf->sign_cf); verify_conf_clear(&services_cf->verify_cf); fcgi_clear_conf(&services_cf->fcgi_cf); @@ -256,6 +262,13 @@ init_services(service_manager_t* services, const service_manager_conf_t* service goto error; } + /* show version service */ + if (register_service(services, services_cf, fcgi_version_handler, NULL, + services_cf->version_cf.location)) { + LOG_ERROR("Could not register 'show version service'"); + goto error; + } + /* run fastcgi server */ if (fcgi_run_server(services->hfcgi) != 0) { LOG_ERROR("Could not run FastCGI server"); diff --git a/src/service_manager.h b/src/service_manager.h index 683fdb7..7c30f88 100644 --- a/src/service_manager.h +++ b/src/service_manager.h @@ -9,6 +9,7 @@ #include "modules/service_sign.h" #include "modules/service_verify.h" +#include "modules/service_version.h" struct service_s; @@ -48,6 +49,7 @@ typedef struct service_manager_conf_s { main_conf_t main_cf; sign_conf_t sign_cf; verify_conf_t verify_cf; + version_conf_t version_cf; } service_manager_conf_t;