Browse Source

infrastructure for the 'change pseudonym' button.
not used yet.


svn:r5199

Roger Dingledine 20 years ago
parent
commit
c3aac3ff6b
2 changed files with 22 additions and 0 deletions
  1. 21 0
      src/or/circuitlist.c
  2. 1 0
      src/or/or.h

+ 21 - 0
src/or/circuitlist.c

@@ -567,6 +567,27 @@ circuit_mark_all_unused_circs(void)
   }
 }
 
+/** Go through the circuitlist; for each circuit that starts at us
+ * and is dirty, frob its timestamp_dirty so we won't use it for any
+ * new streams.
+ *
+ * This is useful for letting the user change pseudonyms, so new
+ * streams will not be linkable to old streams.
+ */
+void
+circuit_expire_all_dirty_circs(void)
+{
+  circuit_t *circ;
+  or_options_t *options = get_options();
+
+  for (circ=global_circuitlist; circ; circ = circ->next) {
+    if (CIRCUIT_IS_ORIGIN(circ) &&
+        !circ->marked_for_close &&
+        circ->timestamp_dirty)
+      circ->timestamp_dirty -= options->MaxCircuitDirtiness;
+  }
+}
+
 /** Mark <b>circ</b> to be closed next time we call
  * circuit_close_all_marked(). Do any cleanup needed:
  *   - If state is onionskin_pending, remove circ from the onion_pending

+ 1 - 0
src/or/or.h

@@ -1417,6 +1417,7 @@ circuit_t *circuit_get_rendezvous(const char *cookie);
 circuit_t *circuit_get_clean_open(uint8_t purpose, int need_uptime,
                                   int need_capacity, int internal);
 void circuit_mark_all_unused_circs(void);
+void circuit_expire_all_dirty_circs(void);
 void _circuit_mark_for_close(circuit_t *circ, int line, const char *file);
 
 #define circuit_mark_for_close(c) \