diff options
author | Andrea Shepard <andrea@torproject.org> | 2012-09-26 12:23:58 -0700 |
---|---|---|
committer | Andrea Shepard <andrea@torproject.org> | 2012-10-10 00:43:18 -0700 |
commit | a9deec3550ed51b3cd2a6a51104745def56b5e7a (patch) | |
tree | 2d6ad9d485a2d7e17f599d7c7a4daca2538b2145 /src/or/circuitmux.c | |
parent | 8004448635d63fa829d2a836214c42c1609c3f01 (diff) | |
download | tor-a9deec3550ed51b3cd2a6a51104745def56b5e7a.tar.gz tor-a9deec3550ed51b3cd2a6a51104745def56b5e7a.zip |
Implement circuitmux_clear_num_cells() and circuitmux_set_num_cells() in circuitmux.c, remove unneeded circuitmux_add_to_num_cells() from circuitmux.h
Diffstat (limited to 'src/or/circuitmux.c')
-rw-r--r-- | src/or/circuitmux.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c index ede2486bfb..f6cdbf1e56 100644 --- a/src/or/circuitmux.c +++ b/src/or/circuitmux.c @@ -512,3 +512,53 @@ circuitmux_detach_circuit(circuitmux_t *cmux, circuit_t *circ) } } +/** + * Clear the cell counter for a circuit on a circuitmux + */ + +void +circuitmux_clear_num_cells(circuitmux_t *cmux, circuit_t *circ) +{ + /* This is the same as setting the cell count to zero */ + circuitmux_set_num_cells(cmux, circ, 0); +} + +/** + * Set the cell counter for a circuit on a circuitmux + */ + +void +circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ, + unsigned int n_cells) +{ + chanid_circid_muxinfo_t *hashent = NULL; + + tor_assert(cmux); + tor_assert(circ); + + /* Search for this circuit's entry */ + hashent = circuitmux_find_map_entry(cmux, circ); + /* Assert that we found one */ + tor_assert(hashent); + + /* Update cmux cell counter */ + cmux->n_cells -= hashent->muxinfo.cell_count; + cmux->n_cells += n_cells; + + /* + * Update cmux active circuit counter: is the old cell count > 0 and the + * new cell count == 0 ? + */ + if (hashent->muxinfo.cell_count > 0 && n_cells == 0) { + --(cmux->n_active_circuits); + /* TODO update active_circuits / active_circuit_pqueue */ + /* Is the old cell count == 0 and the new cell count > 0 ? */ + } else if (hashent->muxinfo.cell_count == 0 && n_cells > 0) { + ++(cmux->n_active_circuits); + /* TODO update active_circuits / active_circuit_pqueue */ + } + + /* Update hash entry cell counter */ + hashent->muxinfo.cell_count = n_cells; +} + |