From 82d431fe18ac4d7d1dfc46055d5f8c4785ce07c2 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Thu, 10 Apr 2014 23:24:16 +0100 Subject: Better logging, and various fixes --- src/or/rendservice.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 7307cdf46..037405463 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -3184,6 +3184,9 @@ rend_services_introduce(void) } } else { + // reset unreachable count + intro->unreachable_count = 0; + if (intro != NULL && intro->time_expiring == -1) ++n_intro_points_unexpired; } @@ -3197,6 +3200,10 @@ rend_services_introduce(void) if (!intro_point_set_changed && (n_intro_points_unexpired >= service->n_intro_points_wanted)) { + + log_info(LD_REND, "clearing failed intro points"); + smartlist_clear(service->failed_intro_nodes); + continue; } @@ -3347,9 +3354,14 @@ rend_services_introduce(void) smartlist_t *potential_introduction_points = smartlist_new(); smartlist_t *intros_to_ignore = smartlist_new(); - smartlist_add_all(intros_to_ignore, service->intro_nodes); smartlist_add_all(intros_to_ignore, service->failed_intro_nodes); + SMARTLIST_FOREACH_BEGIN(service->intro_nodes, rend_intro_point_t *, + intro) { + node = node_get_by_id(intro->extend_info->identity_digest); + smartlist_add(intros_to_ignore, (void*) node); + } SMARTLIST_FOREACH_END(intro); + if (hid_serv_get_introduction_points(potential_introduction_points, n_intro_points_to_open, intros_to_ignore, // ignore the current introduction points @@ -3362,7 +3374,6 @@ rend_services_introduce(void) smartlist_free(intros_to_ignore); - const node_t *node; for (j = 0; j < smartlist_len(potential_introduction_points); j++) { log_info(LD_REND, "looking at introduction point %i ", @@ -3383,11 +3394,41 @@ rend_services_introduce(void) safe_str_client(node_describe(node)), safe_str_client(service->service_id)); } + + { // debug purposes only + smartlist_clear(potential_introduction_points); + + intros_to_ignore = smartlist_new(); + smartlist_add_all(intros_to_ignore, service->failed_intro_nodes); + + SMARTLIST_FOREACH_BEGIN(service->intro_nodes, rend_intro_point_t *, + intro) { + node = node_get_by_id(intro->extend_info->identity_digest); + smartlist_add(intros_to_ignore, (void*) node); + } SMARTLIST_FOREACH_END(intro); + + if (hid_serv_get_introduction_points(potential_introduction_points, + 3, + intros_to_ignore, + service->service_id) < 0) { + log_warn(LD_REND, "Could not find any new introduction points"); + smartlist_free(potential_introduction_points); + smartlist_free(intros_to_ignore); + return; + } + + for (j = 0; j < smartlist_len(potential_introduction_points); j++) { + node = smartlist_get(potential_introduction_points, j); + + log_info(LD_REND, "next intro %s for %s.", + safe_str_client(node_describe(node)), + safe_str_client(service->service_id)); + } + + smartlist_free(intros_to_ignore); + } } - // Now that some introduction points have been picked, the failed ones - // can be removed - smartlist_clear(service->failed_intro_nodes); } /* If there's no need to launch new circuits, stop here. */ -- cgit v1.2.3