Explorar o código

refuse to build a circuit before the directory has arrived
this will prevent a few of the 'couldn't decrypt onionskin' errors, maybe


svn:r2036

Roger Dingledine %!s(int64=21) %!d(string=hai) anos
pai
achega
017d7d1fb3
Modificáronse 2 ficheiros con 6 adicións e 2 borrados
  1. 0 2
      src/or/circuitbuild.c
  2. 6 0
      src/or/circuituse.c

+ 0 - 2
src/or/circuitbuild.c

@@ -726,8 +726,6 @@ int onionskin_answer(circuit_t *circ, unsigned char *payload, unsigned char *key
   return 0;
 }
 
-extern int has_fetched_directory; /* from main.c */
-
 /** Choose a length for a circuit of purpose <b>purpose</b>.
  * Default length is 3 + the number of endpoints that would give something
  * away. If the routerlist <b>routers</b> doesn't have enough routers

+ 6 - 0
src/or/circuituse.c

@@ -14,6 +14,7 @@ extern or_options_t options; /* command-line and config-file options */
 /********* START VARIABLES **********/
 
 extern circuit_t *global_circuitlist; /* from circuitlist.c */
+extern int has_fetched_directory; /* from main.c */
 
 /********* END VARIABLES ************/
 
@@ -590,6 +591,11 @@ static int n_circuit_failures = 0;
 
 circuit_t *circuit_launch_by_identity(uint8_t purpose, const char *exit_digest)
 {
+  if (!has_fetched_directory) {
+    log_fn(LOG_DEBUG,"Haven't fetched directory yet; cancelling circuit launch.");
+    return NULL;
+  }
+
   if (n_circuit_failures > MAX_CIRCUIT_FAILURES) {
     /* too many failed circs in a row. don't try. */
 //    log_fn(LOG_INFO,"%d failures so far, not trying.",n_circuit_failures);