From f4ff5a75c141b671432cd1b9a9a0e102ca872562 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Mon, 12 Apr 2004 22:47:12 +0000 Subject: [PATCH] break circuit_build_needed_circs into its own func svn:r1596 --- src/or/circuit.c | 37 +++++++++++++++++++++++++++++++++++++ src/or/main.c | 45 +++++++-------------------------------------- src/or/or.h | 1 + 3 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/or/circuit.c b/src/or/circuit.c index b4eab75c9b..b466e3e4a0 100644 --- a/src/or/circuit.c +++ b/src/or/circuit.c @@ -514,6 +514,43 @@ int circuit_stream_is_being_handled(connection_t *conn) { return 0; } +void circuit_build_needed_circs(time_t now) { + static long time_to_new_circuit = 0; + circuit_t *circ; + + if (options.SocksPort) + /* launch a new circ for any pending streams that need one */ + connection_ap_attach_pending(); + +/* Build a new test circuit every 5 minutes */ +#define TESTING_CIRCUIT_INTERVAL 300 + + circ = circuit_get_best(NULL, 1, CIRCUIT_PURPOSE_C_GENERAL); + if(time_to_new_circuit < now) { + client_dns_clean(); + circuit_expire_unused_circuits(); + circuit_reset_failure_count(); + if(circ && circ->timestamp_dirty) { + log_fn(LOG_INFO,"Youngest circuit dirty; launching replacement."); + /* make a new circuit */ + circuit_launch_new(CIRCUIT_PURPOSE_C_GENERAL, NULL); + } else if (options.RunTesting && circ && + circ->timestamp_created + TESTING_CIRCUIT_INTERVAL < now) { + log_fn(LOG_INFO,"Creating a new testing circuit."); + circuit_launch_new(CIRCUIT_PURPOSE_C_GENERAL, NULL); + } + time_to_new_circuit = now + options.NewCircuitPeriod; + time_to_new_circuit = now + options.NewCircuitPeriod; + } +#define CIRCUIT_MIN_BUILDING 3 + if(!circ && circuit_count_building() < CIRCUIT_MIN_BUILDING) { + /* if there's no open circ, and less than 3 are on the way, + * go ahead and try another. + */ + circuit_launch_new(CIRCUIT_PURPOSE_C_GENERAL, NULL); + } +} + /* update digest from the payload of cell. assign integrity part to cell. */ static void relay_set_digest(crypto_digest_env_t *digest, cell_t *cell) { char integrity[4]; diff --git a/src/or/main.c b/src/or/main.c index 40a176ecff..88faede1fa 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -338,8 +338,6 @@ static void run_connection_housekeeping(int i, time_t now) { */ static void run_scheduled_events(time_t now) { static long time_to_fetch_directory = 0; - static long time_to_new_circuit = 0; - circuit_t *circ; int i; /* 1. Every DirFetchPostPeriod seconds, we get a new directory and upload @@ -388,49 +386,19 @@ static void run_scheduled_events(time_t now) { * and we make a new circ if there are no clean circuits. */ if(has_fetched_directory && - (options.SocksPort || options.RunTesting)) { + (options.SocksPort || options.RunTesting)) + circuit_build_needed_circs(now); - if (options.SocksPort) - /* launch a new circ for any pending streams that need one */ - connection_ap_attach_pending(); - -/* Build a new test circuit every 5 minutes */ -#define TESTING_CIRCUIT_INTERVAL 300 - - circ = circuit_get_best(NULL, 1, CIRCUIT_PURPOSE_C_GENERAL); - if(time_to_new_circuit < now) { - client_dns_clean(); - circuit_expire_unused_circuits(); - circuit_reset_failure_count(); - if(circ && circ->timestamp_dirty) { - log_fn(LOG_INFO,"Youngest circuit dirty; launching replacement."); - /* make a new circuit */ - circuit_launch_new(CIRCUIT_PURPOSE_C_GENERAL, NULL); - } else if (options.RunTesting && circ && - circ->timestamp_created + TESTING_CIRCUIT_INTERVAL < now) { - log_fn(LOG_INFO,"Creating a new testing circuit."); - circuit_launch_new(CIRCUIT_PURPOSE_C_GENERAL, NULL); - } - time_to_new_circuit = now + options.NewCircuitPeriod; - } -#define CIRCUIT_MIN_BUILDING 3 - if(!circ && circuit_count_building() < CIRCUIT_MIN_BUILDING) { - /* if there's no open circ, and less than 3 are on the way, - * go ahead and try another. - */ - circuit_launch_new(CIRCUIT_PURPOSE_C_GENERAL, NULL); - } - } - - /* 5. We do housekeeping for each connection... */ + /* 4. We do housekeeping for each connection... */ for(i=0;i