Loading changes/bug32883 0 → 100644 +5 −0 Original line number Diff line number Diff line o Code simplification and refactoring (windows services): - The windows service logic now uses the tor_api.h entry points, to avoid needless code duplication, and to prevent bugs related to the different entry points getting out of sync. Closes ticket 32883. src/app/main/main.c +11 −11 Original line number Diff line number Diff line Loading @@ -1238,15 +1238,10 @@ tor_run_main(const tor_main_configuration_t *tor_cfg) memcpy(argv + tor_cfg->argc, tor_cfg->argv_owned, tor_cfg->argc_owned*sizeof(char*)); #ifdef NT_SERVICE { int done = 0; result = nt_service_parse_options(argc, argv, &done); if (done) { if (done) goto done; } } #endif /* defined(NT_SERVICE) */ pubsub_install(); Loading Loading @@ -1279,11 +1274,16 @@ tor_run_main(const tor_main_configuration_t *tor_cfg) #endif } if (tor_cfg->run_tor_only && get_options()->command != CMD_RUN_TOR) { log_err(LD_CONFIG, "Unsupported command when running as an NT service."); result = -1; tor_cleanup(); goto done; } switch (get_options()->command) { case CMD_RUN_TOR: #ifdef NT_SERVICE nt_service_set_state(SERVICE_RUNNING); #endif result = run_tor_main_loop(); break; case CMD_KEYGEN: Loading src/app/main/ntmain.c +17 −35 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ #include "lib/evloop/compat_libevent.h" #include "lib/fs/winlib.h" #include "lib/log/win32err.h" #include "feature/api/tor_api.h" #include "feature/api/tor_api_internal.h" #include <windows.h> #define GENSRV_SERVICENAME "tor" Loading Loading @@ -263,7 +265,6 @@ nt_service_control(DWORD request) static void nt_service_body(int argc, char **argv) { int r; (void) argc; /* unused */ (void) argv; /* unused */ nt_service_loadlibrary(); Loading @@ -283,24 +284,20 @@ nt_service_body(int argc, char **argv) return; } r = tor_init(backup_argc, backup_argv); if (r) { /* Failed to start the Tor service */ r = NT_SERVICE_ERROR_TORINIT_FAILED; service_status.dwCurrentState = SERVICE_STOPPED; service_status.dwWin32ExitCode = r; service_status.dwServiceSpecificExitCode = r; service_fns.SetServiceStatus_fn(hStatus, &service_status); tor_main_configuration_t *cfg = tor_main_configuration_new(); cfg->run_tor_only = 1; if (tor_main_configuration_set_command_line(cfg, backup_argc, backup_argv) < 0) return; } /* Set the service's status to SERVICE_RUNNING and start the main * event loop */ service_status.dwCurrentState = SERVICE_RUNNING; service_fns.SetServiceStatus_fn(hStatus, &service_status); set_main_thread(); run_tor_main_loop(); tor_cleanup(); tor_run_main(cfg); tor_main_configuration_free(cfg); } /** Main service entry point. Starts the service control dispatcher and waits Loading @@ -323,29 +320,14 @@ nt_service_main(void) printf("Service error %d : %s\n", (int) result, errmsg); tor_free(errmsg); if (result == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) { if (tor_init(backup_argc, backup_argv)) tor_main_configuration_t *cfg = tor_main_configuration_new(); cfg->run_tor_only = 1; if (tor_main_configuration_set_command_line(cfg, backup_argc, backup_argv) < 0) return; switch (get_options()->command) { case CMD_RUN_TOR: run_tor_main_loop(); break; case CMD_LIST_FINGERPRINT: case CMD_HASH_PASSWORD: case CMD_VERIFY_CONFIG: case CMD_DUMP_CONFIG: case CMD_KEYGEN: case CMD_KEY_EXPIRATION: log_err(LD_CONFIG, "Unsupported command (--list-fingerprint, " "--hash-password, --keygen, --dump-config, --verify-config, " "or --key-expiration) in NT service."); break; case CMD_RUN_UNITTESTS: case CMD_IMMEDIATE: default: log_err(LD_CONFIG, "Illegal command number %d: internal error.", get_options()->command); } tor_cleanup(); tor_run_main(cfg); tor_main_configuration_free(cfg); } } } Loading src/app/main/ntmain.h +2 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,8 @@ int nt_service_is_stopping(void); void nt_service_set_state(DWORD state); #else #define nt_service_is_stopping() 0 #define nt_service_parse_options(a, b, c) (0) #define nt_service_set_state(s) STMT_NIL #endif /* defined(NT_SERVICE) */ #endif /* !defined(TOR_NTMAIN_H) */ src/feature/api/tor_api_internal.h +5 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,11 @@ struct tor_main_configuration_t { /** Socket that Tor will use as an owning control socket. Owned. */ tor_socket_t owning_controller_socket; /** Disable commands other than "run tor". Not for use from outside Tor * itself; if you need to use this for embedding, please contact the tor * developers. */ int run_tor_only; }; #endif /* !defined(TOR_API_INTERNAL_H) */ Loading
changes/bug32883 0 → 100644 +5 −0 Original line number Diff line number Diff line o Code simplification and refactoring (windows services): - The windows service logic now uses the tor_api.h entry points, to avoid needless code duplication, and to prevent bugs related to the different entry points getting out of sync. Closes ticket 32883.
src/app/main/main.c +11 −11 Original line number Diff line number Diff line Loading @@ -1238,15 +1238,10 @@ tor_run_main(const tor_main_configuration_t *tor_cfg) memcpy(argv + tor_cfg->argc, tor_cfg->argv_owned, tor_cfg->argc_owned*sizeof(char*)); #ifdef NT_SERVICE { int done = 0; result = nt_service_parse_options(argc, argv, &done); if (done) { if (done) goto done; } } #endif /* defined(NT_SERVICE) */ pubsub_install(); Loading Loading @@ -1279,11 +1274,16 @@ tor_run_main(const tor_main_configuration_t *tor_cfg) #endif } if (tor_cfg->run_tor_only && get_options()->command != CMD_RUN_TOR) { log_err(LD_CONFIG, "Unsupported command when running as an NT service."); result = -1; tor_cleanup(); goto done; } switch (get_options()->command) { case CMD_RUN_TOR: #ifdef NT_SERVICE nt_service_set_state(SERVICE_RUNNING); #endif result = run_tor_main_loop(); break; case CMD_KEYGEN: Loading
src/app/main/ntmain.c +17 −35 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ #include "lib/evloop/compat_libevent.h" #include "lib/fs/winlib.h" #include "lib/log/win32err.h" #include "feature/api/tor_api.h" #include "feature/api/tor_api_internal.h" #include <windows.h> #define GENSRV_SERVICENAME "tor" Loading Loading @@ -263,7 +265,6 @@ nt_service_control(DWORD request) static void nt_service_body(int argc, char **argv) { int r; (void) argc; /* unused */ (void) argv; /* unused */ nt_service_loadlibrary(); Loading @@ -283,24 +284,20 @@ nt_service_body(int argc, char **argv) return; } r = tor_init(backup_argc, backup_argv); if (r) { /* Failed to start the Tor service */ r = NT_SERVICE_ERROR_TORINIT_FAILED; service_status.dwCurrentState = SERVICE_STOPPED; service_status.dwWin32ExitCode = r; service_status.dwServiceSpecificExitCode = r; service_fns.SetServiceStatus_fn(hStatus, &service_status); tor_main_configuration_t *cfg = tor_main_configuration_new(); cfg->run_tor_only = 1; if (tor_main_configuration_set_command_line(cfg, backup_argc, backup_argv) < 0) return; } /* Set the service's status to SERVICE_RUNNING and start the main * event loop */ service_status.dwCurrentState = SERVICE_RUNNING; service_fns.SetServiceStatus_fn(hStatus, &service_status); set_main_thread(); run_tor_main_loop(); tor_cleanup(); tor_run_main(cfg); tor_main_configuration_free(cfg); } /** Main service entry point. Starts the service control dispatcher and waits Loading @@ -323,29 +320,14 @@ nt_service_main(void) printf("Service error %d : %s\n", (int) result, errmsg); tor_free(errmsg); if (result == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) { if (tor_init(backup_argc, backup_argv)) tor_main_configuration_t *cfg = tor_main_configuration_new(); cfg->run_tor_only = 1; if (tor_main_configuration_set_command_line(cfg, backup_argc, backup_argv) < 0) return; switch (get_options()->command) { case CMD_RUN_TOR: run_tor_main_loop(); break; case CMD_LIST_FINGERPRINT: case CMD_HASH_PASSWORD: case CMD_VERIFY_CONFIG: case CMD_DUMP_CONFIG: case CMD_KEYGEN: case CMD_KEY_EXPIRATION: log_err(LD_CONFIG, "Unsupported command (--list-fingerprint, " "--hash-password, --keygen, --dump-config, --verify-config, " "or --key-expiration) in NT service."); break; case CMD_RUN_UNITTESTS: case CMD_IMMEDIATE: default: log_err(LD_CONFIG, "Illegal command number %d: internal error.", get_options()->command); } tor_cleanup(); tor_run_main(cfg); tor_main_configuration_free(cfg); } } } Loading
src/app/main/ntmain.h +2 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,8 @@ int nt_service_is_stopping(void); void nt_service_set_state(DWORD state); #else #define nt_service_is_stopping() 0 #define nt_service_parse_options(a, b, c) (0) #define nt_service_set_state(s) STMT_NIL #endif /* defined(NT_SERVICE) */ #endif /* !defined(TOR_NTMAIN_H) */
src/feature/api/tor_api_internal.h +5 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,11 @@ struct tor_main_configuration_t { /** Socket that Tor will use as an owning control socket. Owned. */ tor_socket_t owning_controller_socket; /** Disable commands other than "run tor". Not for use from outside Tor * itself; if you need to use this for embedding, please contact the tor * developers. */ int run_tor_only; }; #endif /* !defined(TOR_API_INTERNAL_H) */