diff --git a/src/goodbyedpi.c b/src/goodbyedpi.c index 0c303dc..d666a11 100644 --- a/src/goodbyedpi.c +++ b/src/goodbyedpi.c @@ -149,7 +149,7 @@ enum ERROR_CODE{ }; static int running_from_service = 0; -static int exiting = 0; +static volatile sig_atomic_t exiting = 0; static HANDLE filters[MAX_FILTERS]; static int filter_num = 0; static const char http10_redirect_302[] = "HTTP/1.0 302 "; @@ -367,8 +367,6 @@ void deinit_all() { static void sigint_handler(int sig __attribute__((unused))) { exiting = 1; - deinit_all(); - exit(EXIT_SUCCESS); } static void mix_case(char *pktdata, unsigned int pktlen) { @@ -1171,8 +1169,9 @@ int main(int argc, char *argv[]) { } printf("Filter activated, GoodbyeDPI is now running!\n"); signal(SIGINT, sigint_handler); + signal(SIGTERM, sigint_handler); - while (1) { + while (!exiting) { if (WinDivertRecv(w_filter, packet, sizeof(packet), &packetLen, &addr)) { debug("Got %s packet, len=%d!\n", addr.Outbound ? "outbound" : "inbound", packetLen); @@ -1294,7 +1293,7 @@ int main(int argc, char *argv[]) { } } /* Handle OUTBOUND packet on port 80, search for Host header */ - else if (addr.Outbound && + else if (addr.Outbound && packet_dataLen > 16 && (do_http_allports ? 1 : (ppTcpHdr->DstPort == htons(80))) && find_http_method_end(packet_data, @@ -1560,4 +1559,6 @@ int main(int argc, char *argv[]) { break; } } + deinit_all(); + exit(EXIT_SUCCESS); }