1
0
mirror of https://github.com/kakwa/uts-server synced 2024-06-03 01:28:08 +02:00
uts-server/src/cmd/uts-server.c

90 lines
2.3 KiB
C
Raw Normal View History

2015-12-17 15:49:58 +01:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <getopt.h>
#include <argp.h>
#include <sys/syslog.h>
#include "http.h"
2015-12-17 15:49:58 +01:00
const char *argp_program_version = UTS_VERSION;
2016-08-23 19:38:07 +02:00
const char *argp_program_bug_address =
"Pierre-Francois Carpentier <carpentier.pf@gmail.com>";
2015-12-17 15:49:58 +01:00
static char doc[] = "\nUTS micro timestamp server (RFC 3161)";
static struct argp_option options[] = {
2016-08-23 19:38:07 +02:00
{"conffile", 'c', "CONFFILE", 0, "Path to configuration file"},
{"daemonize", 'd', 0, 0, "Launch as a daemon"},
{"debug", 'D', 0, 0, "STDOUT debugging"},
2016-08-23 19:38:07 +02:00
{0}};
2015-12-17 15:49:58 +01:00
/* A description of the arguments we accept. */
static char args_doc[] = "-c CONFFILE [-d] [-D]";
2015-12-17 15:49:58 +01:00
2016-08-23 19:38:07 +02:00
struct arguments {
char *args[2]; /* arg1 & arg2 */
int daemonize;
bool stdout_dbg;
2015-12-17 15:49:58 +01:00
char *conffile;
};
2016-08-23 19:38:07 +02:00
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
2015-12-17 15:49:58 +01:00
/* Get the input argument from argp_parse, which we
know is a pointer to our arguments structure. */
struct arguments *arguments = (struct arguments *)state->input;
2016-08-23 19:38:07 +02:00
switch (key) {
case 'd':
arguments->daemonize = 1;
break;
case 'D':
arguments->stdout_dbg = 1;
break;
2016-08-23 19:38:07 +02:00
case 'c':
arguments->conffile = arg;
break;
default:
return ARGP_ERR_UNKNOWN;
2015-12-17 15:49:58 +01:00
}
return 0;
}
/* Our argp parser. */
2016-08-23 19:38:07 +02:00
static struct argp argp = {options, parse_opt, args_doc, doc};
2015-12-17 15:49:58 +01:00
2016-08-23 19:38:07 +02:00
int main(int argc, char **argv) {
2015-12-17 15:49:58 +01:00
struct arguments args;
2016-08-23 19:38:07 +02:00
args.conffile = NULL;
2015-12-17 15:49:58 +01:00
args.daemonize = 0;
2016-08-24 23:41:55 +02:00
args.stdout_dbg = 0;
2016-08-23 19:38:07 +02:00
argp_parse(&argp, argc, argv, 0, 0, &args);
int ret = EXIT_SUCCESS;
2015-12-17 15:49:58 +01:00
// get the current path, the configuration can be relative to this path
2016-09-01 08:29:07 +02:00
char conf_wd[PATH_MAX];
if (getcwd(conf_wd, sizeof(conf_wd)) == NULL) {
syslog(LOG_CRIT, "unable to get the current, uts-server start failed");
2016-09-01 08:29:07 +02:00
return EXIT_FAILURE;
}
if (args.daemonize)
skeleton_daemon();
2016-09-01 08:29:07 +02:00
syslog(LOG_NOTICE,
"uts-server daemon starting with conf '%s' from working dir '%s'",
args.conffile, conf_wd);
2016-08-23 19:38:07 +02:00
while (1) {
ret = http_server_start(args.conffile, conf_wd, args.stdout_dbg);
2015-12-17 14:09:44 +01:00
break;
}
syslog(LOG_NOTICE, "uts-server daemon terminated.");
2015-12-17 14:09:44 +01:00
closelog();
return ret;
2015-12-17 14:09:44 +01:00
}