diff --git a/src/donar_client.c b/src/donar_client.c index e58d62a..75fabc9 100644 --- a/src/donar_client.c +++ b/src/donar_client.c @@ -101,10 +101,10 @@ int donar_client_stream_repair(struct evt_core_ctx* ctx, struct evt_core_fdinfo* if (removed == 2) { fprintf(stdout, "[%s][donar-client] Retriggering socks5 for port %d\n", current_human_datetime (), port); init_socks5_client (app_ctx, pos); - return 0; + return 1; } else if (removed == 0) { fprintf(stdout, "[%s][donar-client] Socks5 has already been retriggered for port %d\n", current_human_datetime (), port); - return 0; + return 1; } else { fprintf(stderr, "[%s][donar-client] We only removed 1 link and not 2 for port %d, strange behaviour, exiting...\n", current_human_datetime (), port); exit(EXIT_FAILURE); diff --git a/src/donar_server.c b/src/donar_server.c index 745c983..64e06b1 100644 --- a/src/donar_server.c +++ b/src/donar_server.c @@ -52,9 +52,29 @@ socket_create_err: } struct tor_ctl* ugly_global_tctl; -int donar_server_stream_repair(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fd) { - fprintf(stderr, "[%s][donar-server] I am a server, I do nothing with broken streams...\n", current_human_datetime ()); - /* tor_ctl_list_onions(ugly_global_tctl); */ +int donar_server_stream_repair(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) { + fprintf(stdout, "[%s][donar-server] %s broke\n", current_human_datetime (), fdinfo->url); + + struct evt_core_fdinfo* fdtarget = NULL; + int port = url_get_port_int (fdinfo->url); + int pos = port - 7500, removed = 0; + char buffer[256]; + + sprintf(buffer, "tcp:read:127.0.0.1:%d", port); + fdtarget = evt_core_get_from_url (ctx, buffer); + if (fdtarget != NULL) { + evt_core_rm_fd(ctx, fdtarget->fd); + removed++; + } + + sprintf(buffer, "tcp:write:127.0.0.1:%d", port); + fdtarget = evt_core_get_from_url (ctx, buffer); + if (fdtarget != NULL) { + evt_core_rm_fd(ctx, fdtarget->fd); + removed++; + } + printf("[%s][donar-server] removed %d links\n", current_human_datetime (), removed); + return 1; }