Windows Service support.

Program can now be started as a Windows Service. No additional
arguments needed. Refer to `service_install` and `service_remove`
scripts in released zip file.
This commit is contained in:
ValdikSS
2017-12-20 17:03:22 +03:00
parent 95765f3ed9
commit 23babdc8fa
5 changed files with 103 additions and 21 deletions

View File

@@ -11,6 +11,7 @@
#include <getopt.h>
#include "windivert.h"
#include "goodbyedpi.h"
#include "service.h"
#include "dnsredir.h"
#include "blackwhitelist.h"
@@ -52,6 +53,7 @@
} \
} while (0)
static int running_from_service = 0;
static HANDLE filters[MAX_FILTERS];
static int filter_num = 0;
static const char *http10_redirect_302 = "HTTP/1.0 302 ";
@@ -144,7 +146,7 @@ static int deinit(HANDLE handle) {
return FALSE;
}
static void deinit_all() {
void deinit_all() {
for (int i = 0; i < filter_num; i++) {
deinit(filters[i]);
}
@@ -277,6 +279,15 @@ int main(int argc, char *argv[]) {
char *hdr_name_addr = NULL, *hdr_value_addr = NULL;
int hdr_value_len;
if (!running_from_service && service_register(argc, argv)) {
/* We've been called as a service. Register service
* and exit this thread. main() would be called from
* service.c next time.
*/
running_from_service = 1;
return 0;
}
if (filter_string == NULL) {
filter_string = malloc(strlen(filter_string_template) + 1);
strcpy(filter_string, filter_string_template);