mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Implement circuitmux_get_first_active_circuit() in circuitmux.c; add pick_active_circuit() to circuitmux_policy_t in circuitmux.h
This commit is contained in:
parent
c4e5e4727d
commit
4a14c6aa67
@ -359,7 +359,6 @@ circuitmux_detach_all_circuits(circuitmux_t *cmux)
|
||||
U64_PRINTF_ARG(to_remove->chan_id));
|
||||
}
|
||||
|
||||
|
||||
/* Free policy-specific data if we have it */
|
||||
if (to_remove->muxinfo.policy_data) {
|
||||
/*
|
||||
@ -1254,6 +1253,35 @@ circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ,
|
||||
* notify that cells have been transmitted.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Pick a circuit to send from, using the active circuits list or a
|
||||
* circuitmux policy if one is available. This is called from channel.c.
|
||||
*/
|
||||
|
||||
circuit_t *
|
||||
circuitmux_get_first_active_circuit(circuitmux_t *cmux)
|
||||
{
|
||||
circuit_t *circ = NULL;
|
||||
|
||||
tor_assert(cmux);
|
||||
|
||||
if (cmux->n_active_circuits > 0) {
|
||||
/* We also must have a cell available for this to be the case */
|
||||
tor_assert(cmux->n_cells > 0);
|
||||
/* Do we have a policy-provided circuit selector? */
|
||||
if (cmux->policy && cmux->policy->pick_active_circuit) {
|
||||
circ = cmux->policy->pick_active_circuit(cmux, cmux->policy_data);
|
||||
}
|
||||
/* Fall back on the head of the active circuits list */
|
||||
if (!circ) {
|
||||
tor_assert(cmux->active_circuits_head);
|
||||
circ = cmux->active_circuits_head;
|
||||
}
|
||||
} else tor_assert(cmux->n_cells == 0);
|
||||
|
||||
return circ;
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the circuitmux that cells have been sent on a circuit; this
|
||||
* is called from channel.c.
|
||||
@ -1310,7 +1338,7 @@ circuitmux_notify_xmit_cells(circuitmux_t *cmux, circuit_t *circ,
|
||||
|
||||
/*
|
||||
* Now make the circuit inactive if needed; this will call the policy's
|
||||
* notify_circ_inactive() if present.
|
||||
* notify_circ_inactive() if present.
|
||||
*/
|
||||
if (becomes_inactive) {
|
||||
--(cmux->n_active_circuits);
|
||||
|
@ -53,6 +53,9 @@ struct circuitmux_policy_s {
|
||||
circuit_t *circ,
|
||||
circuitmux_policy_circ_data_t *pol_circ_data,
|
||||
unsigned int n_cells);
|
||||
/* Choose a circuit */
|
||||
circuit_t * (*pick_active_circuit)(circuitmux_t *cmux,
|
||||
circuitmux_policy_data_t *pol_data);
|
||||
};
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user