mirror of
https://github.com/kakwa/uts-server
synced 2025-01-10 05:34:29 +01:00
implement configuration parsing + fix
* fix debugging logs to stdout * add parsing of the different type of parameters * configure the http server part
This commit is contained in:
parent
1ac821e3ce
commit
9667d6682c
@ -3,11 +3,48 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stddef.h> /* for offsetof() macro */
|
#include <stddef.h> /* for offsetof() macro */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <civetweb.h>
|
||||||
#include <openssl/ts.h>
|
#include <openssl/ts.h>
|
||||||
|
|
||||||
|
#define HTTP_OPTIONS 1
|
||||||
|
#define LOGLEVEL_OPTIONS 2
|
||||||
|
#define TSA_OPTIONS 3
|
||||||
|
#define MAIN_CONF_SECTION "main"
|
||||||
|
|
||||||
|
#define RFC3161_OPTIONS_LEN \
|
||||||
|
sizeof(rfc3161_options) / sizeof(struct rfc3161_option)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint64_t query_counter;
|
uint64_t query_counter;
|
||||||
bool stdout_dbg;
|
bool stdout_dbg;
|
||||||
TS_RESP_CTX *resp_ctx;
|
TS_RESP_CTX *resp_ctx;
|
||||||
int loglevel;
|
int loglevel;
|
||||||
|
const char *http_options[40];
|
||||||
} rfc3161_context;
|
} rfc3161_context;
|
||||||
|
|
||||||
|
struct rfc3161_option {
|
||||||
|
const char *name;
|
||||||
|
int type;
|
||||||
|
const char *default_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rfc3161_option rfc3161_options[] = {
|
||||||
|
{"num_threads", HTTP_OPTIONS, "50"},
|
||||||
|
{"run_as_user", HTTP_OPTIONS, NULL},
|
||||||
|
{"throttle", HTTP_OPTIONS, NULL},
|
||||||
|
{"enable_keep_alive", HTTP_OPTIONS, "no"},
|
||||||
|
{"listening_ports", HTTP_OPTIONS, "8080"},
|
||||||
|
{"request_timeout_ms", HTTP_OPTIONS, "30000"},
|
||||||
|
{"ssl_certificate", HTTP_OPTIONS, NULL},
|
||||||
|
{"ssl_verify_peer", HTTP_OPTIONS, "yes"},
|
||||||
|
{"ssl_ca_path", HTTP_OPTIONS, NULL},
|
||||||
|
{"ssl_ca_file", HTTP_OPTIONS, NULL},
|
||||||
|
{"ssl_verify_depth", HTTP_OPTIONS, "9"},
|
||||||
|
{"ssl_default_verify_paths", HTTP_OPTIONS, "yes"},
|
||||||
|
{"ssl_cipher_list", HTTP_OPTIONS, NULL},
|
||||||
|
{"ssl_protocol_version", HTTP_OPTIONS, "0"},
|
||||||
|
{"ssl_short_trust", HTTP_OPTIONS, "no"},
|
||||||
|
{"access_control_allow_origin", HTTP_OPTIONS, "*"},
|
||||||
|
{"tcp_nodelay", HTTP_OPTIONS, "0"},
|
||||||
|
{"log_level", LOGLEVEL_OPTIONS, "info"},
|
||||||
|
};
|
||||||
|
@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
void skeleton_daemon();
|
void skeleton_daemon();
|
||||||
void logger(rfc3161_context *ct, int priority, char *fmt, ...);
|
void logger(rfc3161_context *ct, int priority, char *fmt, ...);
|
||||||
|
int set_params(rfc3161_context *ct, char *conf_file);
|
||||||
|
@ -104,19 +104,17 @@ int http_server_start(char *conffile, bool stdout_dbg) {
|
|||||||
struct mg_context *ctx;
|
struct mg_context *ctx;
|
||||||
struct mg_callbacks callbacks;
|
struct mg_callbacks callbacks;
|
||||||
|
|
||||||
// List of options. Last element must be NULL.
|
rfc3161_context *ct = (rfc3161_context *)calloc(1, sizeof(rfc3161_context));
|
||||||
const char *options[] = {"listening_ports", "8080", NULL};
|
ct->stdout_dbg = stdout_dbg;
|
||||||
|
ct->loglevel = 8;
|
||||||
|
set_params(ct, conffile);
|
||||||
|
|
||||||
// Prepare callbacks structure. We have only one callback, the rest are
|
// Prepare callbacks structure. We have only one callback, the rest are
|
||||||
// NULL.
|
// NULL.
|
||||||
memset(&callbacks, 0, sizeof(callbacks));
|
memset(&callbacks, 0, sizeof(callbacks));
|
||||||
// callbacks.begin_request = begin_request_handler;
|
|
||||||
|
|
||||||
// Start the web server.
|
// Start the web server.
|
||||||
ctx = mg_start(&callbacks, NULL, options);
|
ctx = mg_start(&callbacks, NULL, ct->http_options);
|
||||||
rfc3161_context *ct = (rfc3161_context *)calloc(1, sizeof(rfc3161_context));
|
|
||||||
ct->stdout_dbg = stdout_dbg;
|
|
||||||
ct->loglevel = 8;
|
|
||||||
mg_set_request_handler(ctx, "/", rfc3161_handler, (void *)ct);
|
mg_set_request_handler(ctx, "/", rfc3161_handler, (void *)ct);
|
||||||
|
|
||||||
// Wait until user hits "enter". Server is running in separate thread.
|
// Wait until user hits "enter". Server is running in separate thread.
|
||||||
|
@ -82,28 +82,35 @@ void logger(rfc3161_context *ct, int priority, char *fmt, ...) {
|
|||||||
if (ct->stdout_dbg) {
|
if (ct->stdout_dbg) {
|
||||||
switch (priority) {
|
switch (priority) {
|
||||||
case LOG_EMERG:
|
case LOG_EMERG:
|
||||||
printf("LOG_EMER : %s", out);
|
printf("LOG_EMER : %s\n", out);
|
||||||
;
|
break;
|
||||||
case LOG_ALERT:
|
case LOG_ALERT:
|
||||||
printf("LOG_ALERT : %s", out);
|
printf("LOG_ALERT : %s\n", out);
|
||||||
|
break;
|
||||||
;
|
;
|
||||||
case LOG_CRIT:
|
case LOG_CRIT:
|
||||||
printf("LOG_CRIT : %s", out);
|
printf("LOG_CRIT : %s\n", out);
|
||||||
|
break;
|
||||||
;
|
;
|
||||||
case LOG_ERR:
|
case LOG_ERR:
|
||||||
printf("LOG_ERR : %s", out);
|
printf("LOG_ERR : %s\n", out);
|
||||||
|
break;
|
||||||
;
|
;
|
||||||
case LOG_WARNING:
|
case LOG_WARNING:
|
||||||
printf("LOG_WARNING: %s", out);
|
printf("LOG_WARNING: %s\n", out);
|
||||||
|
break;
|
||||||
;
|
;
|
||||||
case LOG_NOTICE:
|
case LOG_NOTICE:
|
||||||
printf("LOG_NOTICE : %s", out);
|
printf("LOG_NOTICE : %s\n", out);
|
||||||
|
break;
|
||||||
;
|
;
|
||||||
case LOG_INFO:
|
case LOG_INFO:
|
||||||
printf("LOG_INFO : %s", out);
|
printf("LOG_INFO : %s\n", out);
|
||||||
|
break;
|
||||||
;
|
;
|
||||||
case LOG_DEBUG:
|
case LOG_DEBUG:
|
||||||
printf("LOG_DEBUG : %s", out);
|
printf("LOG_DEBUG : %s\n", out);
|
||||||
|
break;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -136,6 +143,10 @@ static CONF *load_config_file(rfc3161_context *ct, const char *filename) {
|
|||||||
CONF *conf;
|
CONF *conf;
|
||||||
int i;
|
int i;
|
||||||
ct->loglevel = LOG_INFO;
|
ct->loglevel = LOG_INFO;
|
||||||
|
if (filename == NULL) {
|
||||||
|
logger(ct, LOG_WARNING, "no configuration file passed");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
in = bio_open_default(ct, filename, 'r');
|
in = bio_open_default(ct, filename, 'r');
|
||||||
if (in == NULL) {
|
if (in == NULL) {
|
||||||
logger(ct, LOG_CRIT, "Can't load config file \"%s\"", filename);
|
logger(ct, LOG_CRIT, "Can't load config file \"%s\"", filename);
|
||||||
@ -161,6 +172,38 @@ int set_params(rfc3161_context *ct, char *conf_file) {
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
CONF *conf = load_config_file(ct, conf_file);
|
CONF *conf = load_config_file(ct, conf_file);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
int http_counter = 0;
|
||||||
|
for (int i = 0; i < RFC3161_OPTIONS_LEN; i++) {
|
||||||
|
int type = rfc3161_options[i].type;
|
||||||
|
const char *name = rfc3161_options[i].name;
|
||||||
|
const char *default_value = rfc3161_options[i].default_value;
|
||||||
|
const char *value = NCONF_get_string(conf, MAIN_CONF_SECTION, name);
|
||||||
|
if (value == NULL) {
|
||||||
|
logger(ct, LOG_NOTICE,
|
||||||
|
"configuration param['%s'] not set, using default: '%s'",
|
||||||
|
name, default_value);
|
||||||
|
value = default_value;
|
||||||
|
}
|
||||||
|
logger(ct, LOG_DEBUG, "configuration param['%s'] = '%s'", name, value);
|
||||||
|
switch (type) {
|
||||||
|
case HTTP_OPTIONS:
|
||||||
|
if (value != NULL) {
|
||||||
|
ct->http_options[http_counter] = name;
|
||||||
|
http_counter++;
|
||||||
|
ct->http_options[http_counter] = value;
|
||||||
|
http_counter++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
;
|
||||||
|
case LOGLEVEL_OPTIONS:
|
||||||
|
break;
|
||||||
|
;
|
||||||
|
case TSA_OPTIONS:
|
||||||
|
break;
|
||||||
|
;
|
||||||
|
}
|
||||||
|
ct->http_options[http_counter] = NULL;
|
||||||
|
}
|
||||||
// device = NCONF_get_string(conf, section, ENV_CRYPTO_DEVICE);
|
// device = NCONF_get_string(conf, section, ENV_CRYPTO_DEVICE);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user