aboutsummaryrefslogtreecommitdiff
path: root/src/or/circuitmux.c
diff options
context:
space:
mode:
authorAndrea Shepard <andrea@torproject.org>2012-09-26 12:23:58 -0700
committerAndrea Shepard <andrea@torproject.org>2012-10-10 00:43:18 -0700
commita9deec3550ed51b3cd2a6a51104745def56b5e7a (patch)
tree2d6ad9d485a2d7e17f599d7c7a4daca2538b2145 /src/or/circuitmux.c
parent8004448635d63fa829d2a836214c42c1609c3f01 (diff)
downloadtor-a9deec3550ed51b3cd2a6a51104745def56b5e7a.tar
tor-a9deec3550ed51b3cd2a6a51104745def56b5e7a.tar.gz
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.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c
index ede2486bf..f6cdbf1e5 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;
+}
+