commit ecf61e924d5807420aaeee8620dc83f3b952d77f Merge: 745434d 8b9a2cb Author: Nick Mathewson nickm@torproject.org Date: Thu Feb 13 14:49:15 2014 -0500
Merge remote-tracking branch 'public/bug9841_024_v2' into bug9841_025
Conflicts: src/or/circuitlist.c
changes/bug9841 | 7 +++ src/or/circuitlist.c | 148 +++++++++++++++++++++++++++++++++++++++++++++----- src/or/circuitlist.h | 2 + src/or/or.h | 33 ++++++----- src/or/rendmid.c | 6 +- 5 files changed, 165 insertions(+), 31 deletions(-)
diff --cc src/or/circuitlist.c index 9474896,8ab673c..04cfcbf --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@@ -43,8 -42,13 +44,11 @@@ struct global_circuitlist_s global_circ /** A list of all the circuits in CIRCUIT_STATE_CHAN_WAIT. */ static smartlist_t *circuits_pending_chans = NULL;
-static void circuit_free(circuit_t *circ); -static void circuit_free_cpath(crypt_path_t *cpath); static void circuit_free_cpath_node(crypt_path_t *victim); static void cpath_ref_decref(crypt_path_reference_t *cpath_ref); + //static void circuit_set_rend_token(or_circuit_t *circ, int is_rend_circ, + // const uint8_t *token); + static void circuit_clear_rend_token(or_circuit_t *circ);
/********* END VARIABLES ************/
diff --cc src/or/or.h index cc4e5ed,510b8ea..7c44c7d --- a/src/or/or.h +++ b/src/or/or.h @@@ -3209,14 -3173,27 +3197,33 @@@ typedef struct or_circuit_t * exit-ward queues of this circuit; reset every time when writing * buffer stats to disk. */ uint64_t total_cell_waiting_time; + + /** Maximum cell queue size for a middle relay; this is stored per circuit + * so append_cell_to_circuit_queue() can adjust it if it changes. If set + * to zero, it is initialized to the default value. + */ + uint32_t max_middle_cells; } or_circuit_t;
+ typedef struct or_circuit_rendinfo_s { + + #if REND_COOKIE_LEN != DIGEST_LEN + #error "The REND_TOKEN_LEN macro assumes REND_COOKIE_LEN == DIGEST_LEN" + #endif + #define REND_TOKEN_LEN DIGEST_LEN + + /** A hash of location-hidden service's PK if purpose is INTRO_POINT, or a + * rendezvous cookie if purpose is REND_POINT_WAITING. Filled with zeroes + * otherwise. + */ + char rend_token[REND_TOKEN_LEN]; + + /** True if this is a rendezvous point circuit; false if this is an + * introduction point. */ + unsigned is_rend_circ; + + } or_circuit_rendinfo_t; + /** Convert a circuit subtype to a circuit_t. */ #define TO_CIRCUIT(x) (&((x)->base_))