=================================================================== RCS file: /cvs/cvs/blind/blind.c,v retrieving revision 1.1 retrieving revision 1.13 diff -u -p -r1.1 -r1.13 --- blind/blind.c 2022/03/13 23:06:39 1.1 +++ blind/blind.c 2022/03/20 17:33:18 1.13 @@ -16,10 +16,89 @@ #include #include +#include +#include +#include +#include "blind.h" +#include "config.h" +#include "log.h" + +static void usage(void); + +int daemonize = 1; +struct blind *bl; + +static void +usage(void) +{ + extern char *__progname; + + fprintf(stderr, "usage: %s [-dhnv] [-f file]\n", __progname); + exit(1); +} + int main(int argc, char *argv[]) { - printf("under construction\n"); + int ch; + int verbose = 0; + int no_action = 0; + const char *config = BL_CONF; + + while ((ch = getopt(argc, argv, "dhnvf:")) != -1) { + switch (ch) { + case 'd': + daemonize = 0; + break; + case 'h': + fprintf(stderr, BL_TEXT " " BL_VERS "\n"); + usage(); + break; + case 'n': + no_action = 1; + break; + case 'f': + config = optarg; + break; + case 'v': + verbose = BL_OPT_VERBOSE; + break; + default: + usage(); + } + } + argc -= optind; + argv += optind; + + if (argc || *argv) + usage(); + + log_init(daemonize, LOG_DAEMON); + log_info("%s %s starting", BL_TEXT, BL_VERS); + + if ((bl = config_init()) == NULL) + log_fatal("default values init failed"); + + bl->bl_opt |= verbose; + log_setv(verbose); + log_debug("verbose mode on"); + + if (strlcpy(bl->bl_conf, config, PATH_MAX) >= PATH_MAX) + log_fatal("config file name exceeds PATH_MAX"); + + if (config_load(bl, config)) + log_fatal("config file parsing failed"); + + log_debug("conf=%s", bl->bl_conf); + log_debug("sock=%s", bl->bl_sock); + log_debug(" ttl=%d", bl->bl_ttl); + log_debug(" opt=%d", bl->bl_opt); + log_debug(" flg=%d", bl->bl_flg); + + // TAILQ_INIT(&offline_queue) + + // fork + process setup + communication setup + exit(0); -} +}