#include #include #include #include #include #include #include "build.h" #include "log.h" #include "opts.h" #include "uuid.h" #include "server.h" #pragma GCC diagnostic ignored "-Wdate-time" uint8_t server_id[UUID_LEN]; char server_version[] = "https://github.com/flamingcowtv/adsb-tools#1"; static opts_group server_opts; static char log_module = 'X'; static bool server_detach(const char __attribute__ ((unused)) *arg) { LOG(server_id, "Detaching"); int ret = fork(); assert(ret >= 0); if (ret > 0) { // We are the parent exit(EXIT_SUCCESS); } LOG(server_id, "Background process ID: %u", getpid()); assert(setsid() >= 0); return true; } void server_opts_add() { opts_add("detach", NULL, server_detach, server_opts); } void server_init() { uuid_gen(server_id); LOG(server_id, "Server start"); LOG(server_id, "Build data:"); LOG(server_id, "\tgit_last_change: %s", GIT_LAST_CHANGE); LOG(server_id, "\tgit_local_clean: %s", GIT_LOCAL_CLEAN ? "true" : "false"); LOG(server_id, "\tclang_version: %s", __clang_version__); LOG(server_id, "\tglibc_version: %d.%d", __GLIBC__, __GLIBC_MINOR__); LOG(server_id, "\tjansson_version: %s", JANSSON_VERSION); LOG(server_id, "\tprotobuf-c_version: %s", PROTOBUF_C_VERSION); LOG(server_id, "\tdatetime: %s", __DATE__ " " __TIME__); LOG(server_id, "\tusername: %s", USERNAME); LOG(server_id, "\thostname: %s", HOSTNAME); LOG(server_id, "Runtime data:"); struct utsname utsname; assert(!uname(&utsname)); LOG(server_id, "\tusername: %s", getlogin()); LOG(server_id, "\thostname: %s", utsname.nodename); LOG(server_id, "\tprocess_id: %d", getpid()); LOG(server_id, "\tsystem: %s", utsname.sysname); LOG(server_id, "\trelease: %s", utsname.release); LOG(server_id, "\tversion: %s", utsname.version); LOG(server_id, "\tmachine: %s", utsname.machine); opts_call(server_opts); }