From a54dc8212ffb1eec975a27a4d70fea25ed8c3f24 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 12 Nov 2021 18:30:20 +0100 Subject: [PATCH] Reorder server functions This will avoid forward declarations in future commits. --- app/src/server.c | 114 +++++++++++++++++++++++------------------------ 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/app/src/server.c b/app/src/server.c index 9e6ef3f6..1491052a 100644 --- a/app/src/server.c +++ b/app/src/server.c @@ -409,63 +409,6 @@ server_init(struct server *server, const struct server_params *params) { return true; } -static void -server_on_terminated(void *userdata) { - struct server *server = userdata; - - // No need for synchronization, server_socket is initialized before the - // observer thread is created. - if (server->server_socket != SC_INVALID_SOCKET) { - // If the server process dies before connecting to the server socket, - // then the client will be stuck forever on accept(). To avoid the - // problem, wake up the accept() call when the server dies. - net_interrupt(server->server_socket); - } - - LOGD("Server terminated"); -} - -bool -server_start(struct server *server) { - const struct server_params *params = &server->params; - - if (!push_server(params->serial)) { - /* server->serial will be freed on server_destroy() */ - return false; - } - - if (!enable_tunnel_any_port(server, params->port_range, - params->force_adb_forward)) { - return false; - } - - // server will connect to our server socket - server->process = execute_server(server, params); - if (server->process == SC_PROCESS_NONE) { - goto error; - } - - static const struct sc_process_listener listener = { - .on_terminated = server_on_terminated, - }; - bool ok = sc_process_observer_init(&server->observer, server->process, - &listener, server); - if (!ok) { - sc_process_terminate(server->process); - sc_process_wait(server->process, true); // ignore exit code - goto error; - } - - return true; - -error: - // The server socket (if any) will be closed on server_destroy() - - disable_tunnel(server); - - return false; -} - static bool device_read_info(sc_socket device_socket, struct server_info *info) { unsigned char buf[DEVICE_NAME_FIELD_LENGTH + 4]; @@ -561,6 +504,63 @@ fail: return false; } +static void +server_on_terminated(void *userdata) { + struct server *server = userdata; + + // No need for synchronization, server_socket is initialized before the + // observer thread is created. + if (server->server_socket != SC_INVALID_SOCKET) { + // If the server process dies before connecting to the server socket, + // then the client will be stuck forever on accept(). To avoid the + // problem, wake up the accept() call when the server dies. + net_interrupt(server->server_socket); + } + + LOGD("Server terminated"); +} + +bool +server_start(struct server *server) { + const struct server_params *params = &server->params; + + if (!push_server(params->serial)) { + /* server->serial will be freed on server_destroy() */ + return false; + } + + if (!enable_tunnel_any_port(server, params->port_range, + params->force_adb_forward)) { + return false; + } + + // server will connect to our server socket + server->process = execute_server(server, params); + if (server->process == SC_PROCESS_NONE) { + goto error; + } + + static const struct sc_process_listener listener = { + .on_terminated = server_on_terminated, + }; + bool ok = sc_process_observer_init(&server->observer, server->process, + &listener, server); + if (!ok) { + sc_process_terminate(server->process); + sc_process_wait(server->process, true); // ignore exit code + goto error; + } + + return true; + +error: + // The server socket (if any) will be closed on server_destroy() + + disable_tunnel(server); + + return false; +} + void server_stop(struct server *server) { if (server->server_socket != SC_INVALID_SOCKET) {