diff options
author | Andrea Shepard <andrea@torproject.org> | 2012-09-27 12:20:05 -0700 |
---|---|---|
committer | Andrea Shepard <andrea@torproject.org> | 2012-10-10 00:44:45 -0700 |
commit | eade7a37cdc9c128d66d2c2c74d7056516fde364 (patch) | |
tree | 2b7e0152fc4a701d3bc333900f50eb522f474a52 /src | |
parent | 930e3d611a7983dc0d5558b21b79e81f72cb7158 (diff) | |
download | tor-eade7a37cdc9c128d66d2c2c74d7056516fde364.tar tor-eade7a37cdc9c128d66d2c2c74d7056516fde364.tar.gz |
Add cmux policy notify_set_n_cells() and notify_xmit_cells() callbacks
Diffstat (limited to 'src')
-rw-r--r-- | src/or/circuitmux.c | 13 | ||||
-rw-r--r-- | src/or/circuitmux.h | 11 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c index 5a5739fcd..53d3a1ba7 100644 --- a/src/or/circuitmux.c +++ b/src/or/circuitmux.c @@ -995,6 +995,19 @@ circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ, cmux->n_cells -= hashent->muxinfo.cell_count; cmux->n_cells += n_cells; + /* Do we need to notify a cmux policy? */ + if (cmux->policy && cmux->policy_data && + cmux->policy->notify_set_n_cells) { + /* Yeah; assert that we have circuit policy data */ + tor_assert(hashent->muxinfo.policy_data); + /* ... and call notify_set_n_cells */ + cmux->policy->notify_set_n_cells(cmux, + cmux->policy_data, + circ, + hashent->muxinfo.policy_data, + n_cells); + } + /* * Update cmux active circuit counter: is the old cell count > 0 and the * new cell count == 0 ? diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h index e344b6ed9..dcacb8e15 100644 --- a/src/or/circuitmux.h +++ b/src/or/circuitmux.h @@ -42,6 +42,17 @@ struct circuitmux_policy_s { circuitmux_policy_data_t *pol_data, circuit_t *circ, circuitmux_policy_circ_data_t *pol_circ_data); + /* Notify of arriving/transmitted cells on a circuit */ + void (*notify_set_n_cells)(circuitmux_t *cmux, + circuitmux_policy_data_t *pol_data, + circuit_t *circ, + circuitmux_policy_circ_data_t *pol_circ_data, + unsigned int n_cells); + void (*notify_xmit_cells)(circuitmux_t *cmux, + circuitmux_policy_data_t *pol_data, + circuit_t *circ, + circuitmux_policy_circ_data_t *pol_circ_data, + unsigned int n_cells); }; /* |