From 1262d082781322694c06994494c710f893896661 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 27 Jan 2021 16:44:15 +0100 Subject: [PATCH] Some fix --- scripts/2021/torfone | 83 ++++++++++++++++++++++++++++++++++++++++++++ src/donar.c | 4 +++ src/donar_client.c | 15 +++++--- src/donar_server.c | 23 +----------- src/evt_core.c | 2 ++ src/meas_lat.c | 8 ++--- src/net_tools.c | 2 +- 7 files changed, 106 insertions(+), 31 deletions(-) create mode 100755 scripts/2021/torfone diff --git a/scripts/2021/torfone b/scripts/2021/torfone new file mode 100755 index 0000000..94d4b4c --- /dev/null +++ b/scripts/2021/torfone @@ -0,0 +1,83 @@ +#!/bin/bash + +SOCK_PORT=$((9000+$1)) +CONTROL_PORT=$((9100+$1)) +LOCAL_PORT=$((9200+$1)) +DONAR_PORT=$((7000+$1*12)) + +touch /tmp/empty +echo "tor daemon serv" +/usr/bin/tor \ + -f /tmp/empty --defaults-torrc /tmp/empty \ + --hush \ + --UseEntryGuards 0 \ + --SocksPort 0 \ + --ControlPort $CONTROL_PORT \ + --DataDirectory /tmp/tor$CONTROL_PORT & +sleep 1 + +echo "tor client serv" +/usr/bin/tor \ + -f /tmp/empty --defaults-torrc /tmp/empty \ + --hush \ + --UseEntryGuards 0 \ + --SocksPort "127.0.0.1:$SOCK_PORT IsolateDestPort IsolateDestAddr IsolateClientAddr" \ + --DataDirectory /tmp/tor$SOCK_PORT & +sleep 1 + +echo "donar serv" +rm -rf state_$LOCAL_PORT/ +mkdir state_$LOCAL_PORT/ +pushd . +cd state_$LOCAL_PORT/ +/usr/local/bin/donar \ + -s \ + -a dup2 \ + -q $CONTROL_PORT \ + -k $DONAR_PORT \ + -l 2 \ + -e $LOCAL_PORT & +sleep 1 + +echo "donar client" +/usr/local/bin/donar \ + -c \ + -a dup2 \ + -q $SOCK_PORT \ + -k $DONAR_PORT \ + -o ./onion_services.pub \ + -l 2 \ + -r $LOCAL_PORT & +sleep 1 +popd + +echo "measlat serv" +/usr/local/bin/measlat \ + -l \ + -t udp \ + -h 127.0.0.1 \ + -p $LOCAL_PORT \ + -c 135 \ + -i 40 \ + -s 172 & +sleep 1 + +echo "measlat client bootstrap" +/usr/local/bin/measlat \ + -t udp \ + -h 127.13.3.7 \ + -p $LOCAL_PORT \ + -b \ + -c 1 \ + -i 1000 \ + -s 172 + +echo "measlat client collect" +/usr/local/bin/measlat \ + -t udp \ + -h 127.13.3.7 \ + -p $LOCAL_PORT \ + -c 135 \ + -i 40 \ + -s 172 + diff --git a/src/donar.c b/src/donar.c index 4e8accd..b3cadd7 100644 --- a/src/donar.c +++ b/src/donar.c @@ -83,6 +83,10 @@ int main(int argc, char** argv) { if (dp.tor_port == NULL) dp.tor_port = dp.is_client ? "9050" : "9051"; if (dp.algo == NULL) goto in_error; + fprintf(stderr, "Passed parameters: client=%d, server=%d, algo=%s, exposed_ports=%d, remote_ports=%d, transfer_base_port=%d, tor_daemon_port=%s, onion_file=%s, links=%d, duplication=%d,%d\n", + dp.is_client, dp.is_server, dp.algo, dp.exposed_ports->len, dp.remote_ports->len, dp.base_port, dp.tor_port, dp.onion_file, dp.links, dp.fresh_data, dp.redundant_data); + + if (dp.is_server) { struct donar_server_ctx ctx; if (dp.exposed_ports->len < 1 && dp.remote_ports->len < 1) goto in_error; diff --git a/src/donar_client.c b/src/donar_client.c index 655c0f7..35a497f 100644 --- a/src/donar_client.c +++ b/src/donar_client.c @@ -53,7 +53,7 @@ enum DONAR_TIMER_DECISION reinit_socks5(struct evt_core_ctx* ctx, void* user_dat struct donar_client_ctx* app_ctx = cat->app_ctx; int64_t pos = (int64_t) user_data; // trust me... - fprintf(stdout, "[%s][donar-client] We have waited enough, retriggering socks5 for port %ld\n", current_human_datetime (), pos+7500); + fprintf(stdout, "[%s][donar-client] We have waited enough, retriggering socks5 for port %ld\n", current_human_datetime (), app_ctx->base_port+pos); init_socks5_client (app_ctx, pos); return DONAR_TIMER_STOP; } @@ -62,7 +62,7 @@ int on_socks5_failed(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) { struct donar_client_ctx* app_ctx = fdinfo->cat->app_ctx; struct socks5_ctx* s5ctx = fdinfo->other; int64_t pos = 0; - pos = s5ctx->port - 7500; + pos = s5ctx->port - app_ctx->base_port; int64_t to_wait_sec = 30 + pos*3; fprintf(stdout, "[%s][donar-client] Retriggering socks5 in %ld seconds for port %d\n", current_human_datetime (), to_wait_sec, s5ctx->port); @@ -88,11 +88,18 @@ void init_socks5_sinks(struct donar_client_ctx* app_ctx) { } int donar_client_stream_repair(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo) { + struct evt_core_cat* cat = evt_core_get_from_cat (ctx, "socks5-failed"); + if (cat == NULL) { + fprintf(stderr, "Unable to reconnect stream as socks5-failed cat is not available...\n"); + exit(EXIT_FAILURE); + } + struct donar_client_ctx* app_ctx = cat->app_ctx; + fprintf(stdout, "[%s][donar-client] %s broke\n", current_human_datetime (), fdinfo->url); struct evt_core_fdinfo* fdtarget = NULL; int port = url_get_port_int (fdinfo->url); int64_t pos = 0, removed = 0; - pos = port - 7500; + pos = port - app_ctx->base_port; char buffer[256]; sprintf(buffer, "tcp:read:127.0.0.1:%d", port); @@ -160,7 +167,7 @@ void donar_client(struct donar_client_ctx* ctx, struct donar_params* dp) { for (int64_t i = 0; i < dp->links; i++) { int64_t to_wait_sec = i * 3; - fprintf(stdout, "[%s][donar-client] Triggering socks5 in %ld seconds for port %ld\n", current_human_datetime (), to_wait_sec, i+7500); + fprintf(stdout, "[%s][donar-client] Triggering socks5 in %ld seconds for port %ld\n", current_human_datetime (), to_wait_sec, i+dp->base_port); set_timeout(&ctx->evts, 1000 * to_wait_sec, (void*) i, reinit_socks5); } printf("--- TCP Clients Connected\n"); diff --git a/src/donar_server.c b/src/donar_server.c index 2266776..3487825 100644 --- a/src/donar_server.c +++ b/src/donar_server.c @@ -57,7 +57,7 @@ int donar_server_stream_repair(struct evt_core_ctx* ctx, struct evt_core_fdinfo* struct evt_core_fdinfo* fdtarget = NULL; int port = url_get_port_int (fdinfo->url); - int pos = port - 7500, removed = 0; + int removed = 0; char buffer[256]; sprintf(buffer, "tcp:read:127.0.0.1:%d", port); @@ -78,24 +78,6 @@ int donar_server_stream_repair(struct evt_core_ctx* ctx, struct evt_core_fdinfo* return 1; } -struct donar_server_os_republish_params { - struct donar_server_ctx* dctx; - struct donar_params* dp; -}; -/* -void republish_tor_os(struct evt_core_ctx* ctx, void* user_data) { - struct donar_server_os_republish_params* dsorp = user_data; - - int err = 0; - printf("Republish Tor OS\n"); - err = tor_ctl_add_onion (&dsorp->dctx->tctl, &dsorp->dctx->tos, dsorp->dctx->ports, dsorp->dp->tof); - if (err != 0) { - fprintf(stderr, "Unable to create Onion Services (error: %d)\n", err); - exit(EXIT_FAILURE); - } - printf("Republish Tor OS\n"); -}*/ - void donar_server(struct donar_server_ctx* ctx, struct donar_params* dp) { struct algo_params ap = { .is_waiting_bootstrap = dp->is_waiting_bootstrap, @@ -126,9 +108,6 @@ void donar_server(struct donar_server_ctx* ctx, struct donar_params* dp) { ctx->tctl.os_endpoint = dp->my_ip_for_tor; create_onion_services (&(ctx->tos), &(ctx->tctl), dp->tor_ip, dp->tor_port, ctx->ports, dp->links, dp->tof); ugly_global_tctl = &(ctx->tctl); - /*struct donar_server_os_republish_params dsorp = { .dctx = ctx, dp = dp}; - init_timer(&(ctx->evts)); - set_timeout(&(ctx->evts), 1000, &dsorp, republish_tor_os); */ printf("--- Onion services created\n"); g_ptr_array_foreach (dp->remote_ports, (void(*)(void*, void*))init_udp_remote, &(ctx->evts)); diff --git a/src/evt_core.c b/src/evt_core.c index ffa7ca6..61f9d5d 100644 --- a/src/evt_core.c +++ b/src/evt_core.c @@ -38,6 +38,8 @@ void evt_core_init(struct evt_core_ctx* ctx, uint8_t verbose) { } ctx->verbose = verbose; ctx->loop = 1; + ctx->blacklisted_fds_count = 0; + memset(ctx->blacklisted_fds, 0, EVT_CORE_MAX_EVENTS*sizeof(int)); ctx->catlist = g_hash_table_new_full(g_str_hash, g_str_equal,NULL, free_cat); ctx->socklist = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, free_fdinfo); ctx->urltofd = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL); diff --git a/src/meas_lat.c b/src/meas_lat.c index bf963d7..c40010e 100644 --- a/src/meas_lat.c +++ b/src/meas_lat.c @@ -89,15 +89,15 @@ int on_receive_measure_packet_err(struct evt_core_ctx* ctx, struct evt_core_fdin sprintf(url, "timer:%d", fdinfo->fd); struct evt_core_fdinfo* assoc_timer = evt_core_get_from_url (ctx, url); - if (assoc_timer != NULL) { - if (mctx->role == MEASLAT_CLIENT) measure_summary (&mctx->mp, assoc_timer->other); + if (assoc_timer != NULL && !mctx->mp.probe && !mctx->connectionless) { + if (mctx->role == MEASLAT_CLIENT && !mctx->mp.probe) measure_summary (&mctx->mp, assoc_timer->other); evt_core_rm_fd (ctx, assoc_timer->fd); printf("Deleted associated timer %s\n", url); } else { printf("No associated timer %s\n", url); } - if (mctx->role == MEASLAT_CLIENT) exit(EXIT_FAILURE); + if (mctx->role == MEASLAT_CLIENT && !mctx->mp.probe) exit(EXIT_FAILURE); if (mctx->connectionless) return 1; // keep the NET FD else return 0; // delete the NET fd @@ -111,7 +111,7 @@ void measlat_stop( if (ms->mp_in->counter < mctx->mp.max_measure) return; if (ms->mp_out->counter < mctx->mp.max_measure) return; printf("[states] measurement %d+%d terminated\n", net_fd, timer_fd); - if (mctx->role == MEASLAT_CLIENT) measure_summary (&(mctx->mp), ms); + if (mctx->role == MEASLAT_CLIENT && !mctx->mp.probe) measure_summary (&(mctx->mp), ms); evt_core_rm_fd(ctx, timer_fd); if (!(mctx->connectionless && mctx->role == MEASLAT_SERVER)) evt_core_rm_fd(ctx, net_fd); diff --git a/src/net_tools.c b/src/net_tools.c index d4020d1..b84e47e 100644 --- a/src/net_tools.c +++ b/src/net_tools.c @@ -93,7 +93,7 @@ int create_ip_server(char* host, char* service, int type) { } if (cursor == NULL) { - fprintf(stderr, "We failed to create socket or bind\n"); + fprintf(stderr, "We failed to create socket or bind for %s:%s (%d)\n", host, service, type); exit(EXIT_FAILURE); }