void main_init() { /* one-time initialization */ #ifdef USE_SYSTEMD int i; systemd_fds=sd_listen_fds(1); if(systemd_fds<0) fatal("systemd initialization failed"); listen_fds_start=SD_LISTEN_FDS_START; /* set non-blocking mode on systemd file descriptors */ for(i=0; i<systemd_fds; ++i) set_nonblock(listen_fds_start+i, 1); #else systemd_fds=0; /* no descriptors received */ listen_fds_start=3; /* the value is not really important */ #endif /* basic initialization contains essential functions required for logging * subsystem to function properly, thus all errors here are fatal */ if(ssl_init()) /* initialize SSL library */ fatal("SSL initialization failed"); if(sthreads_init()) /* initialize critical sections & SSL callbacks */ fatal("Threads initialization failed"); if(cron_init()) /* initialize periodic events */ fatal("Cron initialization failed"); options_defaults(); options_apply(); #ifndef USE_FORK get_limits(); /* required by setup_fd() */ #endif fds=s_poll_alloc(); if(signal_pipe_init()) fatal("Signal pipe initialization failed: " "check your personal firewall"); stunnel_info(LOG_NOTICE); }
static struct options parse_command_line(int *argc, char **argv[], const ProcessTable *process, ProcessParamsTable **paramaddpoint) { struct options options = options_defaults(); int c; int option_index; struct LALoption long_options[] = { {"gps-end-time", required_argument, NULL, 'A'}, {"gps-start-time", required_argument, NULL, 'B'}, {"help", no_argument, NULL, 'C'}, {"max-amplitude", required_argument, NULL, 'D'}, {"min-amplitude", required_argument, NULL, 'E'}, {"max-bandwidth", required_argument, NULL, 'F'}, {"min-bandwidth", required_argument, NULL, 'G'}, {"max-duration", required_argument, NULL, 'H'}, {"min-duration", required_argument, NULL, 'I'}, {"max-e-over-r2", required_argument, NULL, 'S'}, {"min-e-over-r2", required_argument, NULL, 'T'}, {"max-frequency", required_argument, NULL, 'J'}, {"min-frequency", required_argument, NULL, 'K'}, {"max-hrss", required_argument, NULL, 'L'}, {"min-hrss", required_argument, NULL, 'M'}, {"output", required_argument, NULL, 'V'}, {"population", required_argument, NULL, 'N'}, {"q", required_argument, NULL, 'O'}, {"ra-dec", required_argument, NULL, 'U'}, {"seed", required_argument, NULL, 'P'}, {"time-step", required_argument, NULL, 'Q'}, {"time-slide-file", required_argument, NULL, 'W'}, {"jitter", required_argument, NULL, 'X'}, {"user-tag", required_argument, NULL, 'R'}, {NULL, 0, NULL, 0} }; do switch(c = LALgetopt_long(*argc, *argv, "", long_options, &option_index)) { case 'A': XLALClearErrno(); { LIGOTimeGPS tmp; XLALStrToGPS(&tmp, LALoptarg, NULL); options.gps_end_time = XLALGPSToINT8NS(&tmp); } if(xlalErrno) { fprintf(stderr, "invalid --%s (%s specified)\n", long_options[option_index].name, LALoptarg); exit(1); } ADD_PROCESS_PARAM(process, "lstring"); break; case 'B': XLALClearErrno(); { LIGOTimeGPS tmp; XLALStrToGPS(&tmp, LALoptarg, NULL); options.gps_start_time = XLALGPSToINT8NS(&tmp); } if(xlalErrno) { fprintf(stderr, "invalid --%s (%s specified)\n", long_options[option_index].name, LALoptarg); exit(1); } ADD_PROCESS_PARAM(process, "lstring"); break; case 'C': print_usage(); exit(0); case 'D': options.maxA = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'E': options.minA = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'F': options.maxbandwidth = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'G': options.minbandwidth = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'H': options.maxduration = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'I': options.minduration = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'J': options.maxf = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'K': options.minf = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'L': options.maxhrss = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'M': options.minhrss = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'N': if(!strcmp(LALoptarg, "targeted")) options.population = POPULATION_TARGETED; else if(!strcmp(LALoptarg, "string_cusp")) options.population = POPULATION_STRING_CUSP; else if(!strcmp(LALoptarg, "all_sky_sinegaussian")) options.population = POPULATION_ALL_SKY_SINEGAUSSIAN; else if(!strcmp(LALoptarg, "all_sky_btlwnb")) options.population = POPULATION_ALL_SKY_BTLWNB; else { fprintf(stderr, "error: unrecognized population \"%s\"", LALoptarg); exit(1); } ADD_PROCESS_PARAM(process, "lstring"); break; case 'O': options.q = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'P': options.seed = atol(LALoptarg); ADD_PROCESS_PARAM(process, "int_8u"); break; case 'Q': options.time_step = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'R': options.user_tag = LALoptarg; ADD_PROCESS_PARAM(process, "lstring"); break; case 'S': options.maxEoverr2 = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'T': options.minEoverr2 = atof(LALoptarg); ADD_PROCESS_PARAM(process, "real_8"); break; case 'U': { char *end; options.ra = strtod(LALoptarg, &end); while(isspace(*end)) end++; if(*end != ',') { fprintf(stderr, "error: cannot parse --ra-dec \"%s\"\n", LALoptarg); exit(1); } options.dec = strtod(end + 1, &end); while(isspace(*end)) end++; if(*end != '\0') { fprintf(stderr, "error: cannot parse --ra-dec \"%s\"\n", LALoptarg); exit(1); } } ADD_PROCESS_PARAM(process, "lstring"); break; case 'V': options.output = LALoptarg; break; case 'W': options.time_slide_file = LALoptarg; ADD_PROCESS_PARAM(process, "lstring"); break; case 'X': options.jitter = atof(LALoptarg); ADD_PROCESS_PARAM(process, "lstring"); break; case 0: /* option sets a flag */ break; case -1: /* end of arguments */ break; case '?': /* unrecognized option */ print_usage(); exit(1); case ':': /* missing argument for an option */ print_usage(); exit(1); } while(c != -1); /* check some of the input parameters for consistency */ if(options.maxA < options.minA) { fprintf(stderr, "error: --max-amplitude < --min-amplitude\n"); exit(1); } if(options.maxbandwidth < options.minbandwidth) { fprintf(stderr, "error: --max-bandwidth < --min-bandwidth\n"); exit(1); } if(options.maxduration < options.minduration) { fprintf(stderr, "error: --max-duration < --min-duration\n"); exit(1); } if(options.maxf < options.minf) { fprintf(stderr, "error: --max-frequency < --min-frequency\n"); exit(1); } if(options.maxhrss < options.minhrss) { fprintf(stderr, "error: --max-hrss < --min-hrss\n"); exit(1); } if(options.gps_start_time == -1 || options.gps_end_time == -1) { fprintf(stderr, "--gps-start-time and --gps-end-time are both required\n"); exit(1); } if(options.gps_end_time < options.gps_start_time) { fprintf(stderr, "error: --gps-end-time < --gps-start-time\n"); exit(1); } if(!options.time_slide_file) { fprintf(stderr, "--time-slide-file is required\n"); exit(1); } switch(options.population) { case POPULATION_TARGETED: case POPULATION_ALL_SKY_SINEGAUSSIAN: case POPULATION_ALL_SKY_BTLWNB: case POPULATION_STRING_CUSP: break; default: fprintf(stderr, "error: --population is required\n"); exit(1); } if(!options.output) { int max_length = 100; /* ARGH: ugly */ options.output = calloc(max_length + 1, sizeof(*options.output)); if(options.user_tag) snprintf(options.output, max_length, "HL-INJECTIONS_%s-%d-%d.xml", options.user_tag, (int) (options.gps_start_time / LAL_INT8_C(1000000000)), (int) ((options.gps_end_time - options.gps_start_time) / LAL_INT8_C(1000000000))); else snprintf(options.output, max_length, "HL-INJECTIONS-%d-%d.xml", (int) (options.gps_start_time / LAL_INT8_C(1000000000)), (int) ((options.gps_end_time - options.gps_start_time) / LAL_INT8_C(1000000000))); } return options; }