mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
sendme: Modernize and cleanup old moved code
Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
+28
-20
@@ -14,40 +14,48 @@
|
||||
#include "core/or/relay.h"
|
||||
#include "core/or/sendme.h"
|
||||
|
||||
/** Called when we've just received a relay data cell, when
|
||||
* we've just finished flushing all bytes to stream <b>conn</b>,
|
||||
* or when we've flushed *some* bytes to the stream <b>conn</b>.
|
||||
/** Called when we've just received a relay data cell, when we've just
|
||||
* finished flushing all bytes to stream <b>conn</b>, or when we've flushed
|
||||
* *some* bytes to the stream <b>conn</b>.
|
||||
*
|
||||
* If conn->outbuf is not too full, and our deliver window is
|
||||
* low, send back a suitable number of stream-level sendme cells.
|
||||
* If conn->outbuf is not too full, and our deliver window is low, send back a
|
||||
* suitable number of stream-level sendme cells.
|
||||
*/
|
||||
void
|
||||
sendme_connection_edge_consider_sending(edge_connection_t *conn)
|
||||
{
|
||||
circuit_t *circ;
|
||||
tor_assert(conn);
|
||||
|
||||
if (connection_outbuf_too_full(TO_CONN(conn)))
|
||||
return;
|
||||
int log_domain = TO_CONN(conn)->type == CONN_TYPE_AP ? LD_APP : LD_EXIT;
|
||||
|
||||
circ = circuit_get_by_edge_conn(conn);
|
||||
if (!circ) {
|
||||
/* this can legitimately happen if the destroy has already
|
||||
* arrived and torn down the circuit */
|
||||
log_info(LD_APP,"No circuit associated with conn. Skipping.");
|
||||
return;
|
||||
/* Don't send it if we still have data to deliver. */
|
||||
if (connection_outbuf_too_full(TO_CONN(conn))) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
while (conn->deliver_window <= STREAMWINDOW_START - STREAMWINDOW_INCREMENT) {
|
||||
log_debug(conn->base_.type == CONN_TYPE_AP ?LD_APP:LD_EXIT,
|
||||
"Outbuf %d, Queuing stream sendme.",
|
||||
(int)conn->base_.outbuf_flushlen);
|
||||
if (circuit_get_by_edge_conn(conn) == NULL) {
|
||||
/* This can legitimately happen if the destroy has already arrived and
|
||||
* torn down the circuit. */
|
||||
log_info(log_domain, "No circuit associated with edge connection. "
|
||||
"Skipping sending SENDME.");
|
||||
goto end;
|
||||
}
|
||||
|
||||
while (conn->deliver_window <=
|
||||
(STREAMWINDOW_START - STREAMWINDOW_INCREMENT)) {
|
||||
log_debug(log_domain, "Outbuf %" TOR_PRIuSZ ", queuing stream SENDME.",
|
||||
TO_CONN(conn)->outbuf_flushlen);
|
||||
conn->deliver_window += STREAMWINDOW_INCREMENT;
|
||||
if (connection_edge_send_command(conn, RELAY_COMMAND_SENDME,
|
||||
NULL, 0) < 0) {
|
||||
log_warn(LD_APP,"connection_edge_send_command failed. Skipping.");
|
||||
return; /* the circuit's closed, don't continue */
|
||||
log_warn(LD_BUG, "connection_edge_send_command failed while sending "
|
||||
"a SENDME. Circuit probably closed, skipping.");
|
||||
goto end; /* The circuit's closed, don't continue */
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
return;
|
||||
}
|
||||
|
||||
/** Check if the deliver_window for circuit <b>circ</b> (at hop
|
||||
|
||||
Reference in New Issue
Block a user