diff --git a/src/cleardns.c b/src/cleardns.c index 2199168..1902bc9 100644 --- a/src/cleardns.c +++ b/src/cleardns.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "loader.h" #include "logger.h" #include "constant.h" @@ -11,11 +12,7 @@ #include "adguard.h" #include "system.h" #include "assets.h" - -//#include -//#include -//#include "common.h" -//#include "process.h" +#include "sundry.h" //char *init_script = "/usr/bin/load"; //char *custom_script = "/etc/cleardns/custom.sh"; @@ -24,48 +21,63 @@ //char *overture_config = "/etc/overture/config.yml"; //char *upstream_config = "/etc/cleardns/upstream.json"; -//void show_command(char *title, char **command) { -// int num = 0; -// fprintf(stderr, "%s => \"", title); -// while(command[num] != NULL) { -// fprintf(stderr, "%s", command[num++]); -// if (command[num] != NULL) { -// fprintf(stderr, " "); -// } -// } -// fprintf(stderr, "\"\n"); -//} +#define HELP_MSG "\ +ClearDNS usage \n\ +--debug ...\n\ +--config ...\n\ +--help ...\n\ +" -// TODO: load `--debug`, `--config ...`, `--version` +#define CONFIG_FILE "test.json" -int main(int argc, char *argv[]) { // ClearDNS server +// TODO: load `--debug`, `--config ...`, `--version`, `--help` - LOG_LEVEL = LOG_DEBUG; - log_info("ClearDNS server start (%s)", VERSION); +char* init(int argc, char *argv[]) { // return config file + char *config = string_init(CONFIG_FILE); + for (int i = 0; i < argc; ++i) { + if (!strcmp(argv[i], "--debug")) { + LOG_LEVEL = LOG_DEBUG; // enable debug mode + } + if (!strcmp(argv[i], "--version")) { + printf("ClearDNS version %s\n", VERSION); // show version + exit(0); + } + if (!strcmp(argv[i], "--help")) { + printf("\n%s\n", HELP_MSG); // show help message + exit(0); + } + if (!strcmp(argv[i], "--config")) { + if (i + 1 == argc) { + log_error("Option `--config` missing value"); + exit(1); + } + free(config); + config = string_init(argv[++i]); // use custom config file + } + } + log_debug("Config file -> %s", config); + return config; +} - // TODO: load assets -> extract `/assets.tar.xz` -> ${ASSETS_DIR}*.txt +int main(int argc, char *argv[]) { // ClearDNS server - load_assets(); - return 0; + char *config_file = init(argc, argv); + LOG_LEVEL = LOG_DEBUG; // TODO: dev only + log_info("ClearDNS server start (%s)", VERSION); - load_config("test.json"); + load_config(config_file); + free(config_file); dnsproxy_load("Domestic", loader.domestic, "domestic.json"); dnsproxy_load("Foreign", loader.foreign, "foreign.json"); overture_load(loader.diverter, "overture.json"); adguard_load(loader.filter, ADGUARD_DIR); + // TODO: running custom script + -// int debug_mode = 0; -// fprintf(stderr, "[ClearDNS] Server start.\n"); -// for (char **p = argv; p < argv + argc; ++p) { -// if (!strcmp(*p, "--debug")) { // --debug option -// ++debug_mode; -// } -// } -// // init_server(init_script, custom_script); // run init script and custom script // // load_start_command(adguard_workdir, overture_config, upstream_config, debug_mode); // generate commands