diff --git a/src/main.c b/src/main.c index 694e075..5e73b5f 100644 --- a/src/main.c +++ b/src/main.c @@ -8,19 +8,16 @@ #include "networksocket.h" #include "ubus.h" #include "dawn_uci.h" -#include "dawn_uci.h" #include "crypto.h" -#define BUFSIZE 17 -#define BUFSIZE_DIR 256 - void daemon_shutdown(); void signal_handler(int sig); -struct sigaction newSigAction; +struct sigaction signal_action; void daemon_shutdown() { + // kill threads close_socket(); uci_clear(); @@ -36,50 +33,24 @@ void daemon_shutdown() { } void signal_handler(int sig) { - printf("SOME SIGNAL RECEIVED!\n"); switch (sig) { case SIGHUP: + daemon_shutdown(); break; case SIGINT: + daemon_shutdown(); + break; case SIGTERM: daemon_shutdown(); exit(EXIT_SUCCESS); - break; default: + daemon_shutdown(); break; } } -int main(int argc, char **argv) { - //free_counter = 0; - - const char *ubus_socket = NULL; - // int ch; - - argc -= optind; - argv += optind; - - newSigAction.sa_handler = signal_handler; - sigemptyset(&newSigAction.sa_mask); - newSigAction.sa_flags = 0; - - sigaction(SIGHUP, &newSigAction, NULL); - sigaction(SIGTERM, &newSigAction, NULL); - sigaction(SIGINT, &newSigAction, NULL); - - uci_init(); - struct network_config_s net_config = uci_get_dawn_network(); - printf("Broadcst bla: %s\n", net_config.broadcast_ip); - - gcrypt_init(); - gcrypt_set_key_and_iv(net_config.shared_key, net_config.iv); - - struct time_config_s time_config = uci_get_time_config(); - timeout_config = time_config; // TODO: Refactor... - - hostapd_dir_glob = uci_get_dawn_hostapd_dir(); - sort_string = (char*) uci_get_dawn_sort_order(); - +int init_mutex() +{ if (pthread_mutex_init(&list_mutex, NULL) != 0) { printf("\n mutex init failed\n"); return 1; @@ -99,6 +70,38 @@ int main(int argc, char **argv) { printf("\n mutex init failed\n"); return 1; } + return 0; +} + +int main(int argc, char **argv) { + + const char *ubus_socket = NULL; + + argc -= optind; + argv += optind; + + // connect signals + signal_action.sa_handler = signal_handler; + sigemptyset(&signal_action.sa_mask); + signal_action.sa_flags = 0; + sigaction(SIGHUP, &signal_action, NULL); + sigaction(SIGTERM, &signal_action, NULL); + sigaction(SIGINT, &signal_action, NULL); + + uci_init(); + struct network_config_s net_config = uci_get_dawn_network(); + printf("Broadcst bla: %s\n", net_config.broadcast_ip); + + gcrypt_init(); + gcrypt_set_key_and_iv(net_config.shared_key, net_config.iv); + + struct time_config_s time_config = uci_get_time_config(); + timeout_config = time_config; // TODO: Refactor... + + hostapd_dir_glob = uci_get_dawn_hostapd_dir(); + sort_string = (char*) uci_get_dawn_sort_order(); + + init_mutex(); init_socket_runopts(net_config.broadcast_ip, net_config.broadcast_port, net_config.bool_multicast);