int main (int argc, char *argv[]) { LOG_INIT(LOG_ALL); LOG_GMT_ZONE; LOG_BEGIN; settings = bp_hashtab_new_ext(czstr_hash, czstr_equal, free, free); if (!preload_settings()){ LOG_END_RC(1); //return 1; } chain_set(); LOG("chain-set"); RAND_bytes((unsigned char *)&instance_nonce, sizeof(instance_nonce)); unsigned int arg; for (arg = 1; arg < argc; arg++) { const char *argstr = argv[arg]; if (!do_setting(argstr)){ LOG_END_RC(1); //return 1; } } LOG("arguments processed"); /* * properly capture TERM and other signals */ signal(SIGHUP, SIG_IGN); signal(SIGPIPE, SIG_IGN); signal(SIGINT, term_signal); signal(SIGTERM, term_signal); LOG("signals set"); init_daemon(&global_nci); run_daemon(&global_nci); fprintf(plog, "daemon exiting\n"); shutdown_daemon(&global_nci); LOG_END_RC(0); //return 0; }
int main(int argc, char **argv) { auto_handle *session = NULL; char *config_file = NULL; char *logfile = NULL; char *xmlfile = NULL; char erbuf[100]; NODE *current = NULL; uint32_t count = 0; uint8_t first_run = 1; uint8_t once = 0; uint8_t verbose = AM_DEFAULT_VERBOSE; uint8_t append_log = 0; uint8_t match_only = 0; /* this sets the log level to the default before anything else is done. ** This way, if any outputting happens in readargs(), it'll be printed ** to stderr. */ log_init(NULL, verbose, 0); readargs(argc, argv, &config_file, &logfile, &xmlfile, &nofork, &verbose, &once, &append_log, &match_only); /* reinitialize the logging with the values from the command line */ log_init(logfile, verbose, append_log); if(!config_file) { config_file = am_strdup(AM_DEFAULT_CONFIGFILE); } strncpy(AutoConfigFile, config_file, strlen(config_file)); session = session_init(); session->match_only = match_only; if(parse_config_file(session, AutoConfigFile) != 0) { if(errno == ENOENT) { snprintf(erbuf, sizeof(erbuf), "Cannot find file '%s'", config_file); } else { snprintf(erbuf, sizeof(erbuf), "Unknown error"); } fprintf(stderr, "Error parsing config file: %s\n", erbuf); shutdown_daemon(session); } setup_signals(); if(!nofork) { /* start daemon */ if(daemonize() != 0) { dbg_printf(P_ERROR, "Error: Daemonize failed. Aborting..."); shutdown_daemon(session); } dbg_printft( P_MSG, "Daemon started"); } filter_printList(session->filters); dbg_printf(P_MSG, "Trailermatic version: %s", LONG_VERSION_STRING); dbg_printf(P_INFO, "verbose level: %d", verbose); dbg_printf(P_INFO, "foreground mode: %s", nofork == 1 ? "yes" : "no"); dbg_printf(P_INFO, "config file: %s", AutoConfigFile); dbg_printf(P_INFO, "check interval: %d min", session->check_interval); dbg_printf(P_INFO, "download folder: %s", session->download_folder); dbg_printf(P_INFO, "state file: %s", session->statefile); dbg_printf(P_MSG, "%d feed URLs", listCount(session->feeds)); dbg_printf(P_MSG, "Read %d filters from config file", listCount(session->filters)); if(session->prowl_key) { dbg_printf(P_INFO, "Prowl API key: %s", session->prowl_key); } if(listCount(session->feeds) == 0) { dbg_printf(P_ERROR, "No feed URL specified in trailermatic.conf!\n"); shutdown_daemon(session); } if(listCount(session->filters) == 0) { dbg_printf(P_ERROR, "No filters specified in trailermatic.conf!\n"); shutdown_daemon(session); } /* check if Prowl API key is given, and if it is valid */ if(session->prowl_key && verifyProwlAPIKey(session->prowl_key) ) { session->prowl_key_valid = 1; } load_state(session->statefile, &session->downloads); while(!closing) { dbg_printft( P_INFO, "------ Checking for new trailers ------"); if(xmlfile && *xmlfile) { processFile(session, xmlfile); once = 1; } else { current = session->feeds; count = 0; while(current && current->data) { ++count; dbg_printf(P_INFO2, "Checking feed %d ...", count); processFeed(session, current->data, first_run); current = current->next; } if(first_run) { dbg_printf(P_INFO2, "New bucket size: %d", session->max_bucket_items); } first_run = 0; } /* leave loop when program is only supposed to run once */ if(once) { break; } sleep(session->check_interval * 60); } shutdown_daemon(session); return 0; }
int main(int argc, char **argv) { auto_handle * ses = NULL; char *config_file = NULL; char *logfile = NULL; char *pidfile = NULL; char *xmlfile = NULL; char erbuf[100]; NODE *current = NULL; uint32_t count = 0; uint8_t first_run = 1; uint8_t once = 0; uint8_t verbose = AM_DEFAULT_VERBOSE; uint8_t append_log = 0; uint8_t match_only = 0; /* this sets the log level to the default before anything else is done. ** This way, if any outputting happens in readargs(), it'll be printed ** to stderr. */ log_init(NULL, verbose, 0); readargs(argc, argv, &config_file, &logfile, &pidfile, &xmlfile, &nofork, &verbose, &once, &append_log, &match_only); /* reinitialize the logging with the values from the command line */ log_init(logfile, verbose, append_log); dbg_printf(P_MSG, "Automatic version: %s", LONG_VERSION_STRING); if(!config_file) { config_file = am_strdup(AM_DEFAULT_CONFIGFILE); } strncpy(AutoConfigFile, config_file, strlen(config_file)); ses = session_init(); ses->match_only = match_only; if(parse_config_file(ses, AutoConfigFile) != 0) { if(errno == ENOENT) { snprintf(erbuf, sizeof(erbuf), "Cannot find file '%s'", config_file); } else { snprintf(erbuf, sizeof(erbuf), "Unknown error"); } fprintf(stderr, "Error parsing config file: %s\n", erbuf); shutdown_daemon(ses); } if(!setupSession(ses)) { shutdown_daemon(ses); } setup_signals(); if(!nofork) { /* start daemon */ if(daemonize(pidfile) != 0) { dbg_printf(P_ERROR, "Error: Daemonize failed. Aborting..."); shutdown_daemon(mySession); } dbg_printft( P_MSG, "Daemon started"); } dbg_printf(P_INFO, "verbose level: %d", verbose); dbg_printf(P_INFO, "foreground mode: %s", nofork == true ? "yes" : "no"); while(!closing) { isRunning = true; dbg_printft( P_INFO, "------ Checking for new episodes ------"); if(xmlfile && *xmlfile) { processFile(mySession, xmlfile); once = 1; } else { current = mySession->feeds; count = 0; while(current && current->data) { ++count; processFeed(mySession, current->data, first_run); current = current->next; } if(first_run) { dbg_printf(P_INFO2, "New bucket size: %d", mySession->max_bucket_items); } first_run = 0; } /* leave loop when program is only supposed to run once */ if(once) { break; } isRunning = false; if(seenHUP) { signal_handler(SIGHUP); } sleep(mySession->check_interval * 60); } shutdown_daemon(mySession); return 0; }