[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r12437: Keep track, for each OR connection, of the last time we adde (in tor/trunk: . doc src/or)
Author: nickm
Date: 2007-11-08 11:19:07 -0500 (Thu, 08 Nov 2007)
New Revision: 12437
Modified:
tor/trunk/
tor/trunk/doc/TODO
tor/trunk/src/or/connection.c
tor/trunk/src/or/connection_or.c
tor/trunk/src/or/main.c
tor/trunk/src/or/or.h
Log:
r16570@catbus: nickm | 2007-11-08 11:04:20 -0500
Keep track, for each OR connection, of the last time we added a non-padding cell to its outbuf. Use this timestamp, not "lastwritten" to tell if it is time to close a circuitless connection. (We can'tuse lastwritten, since lastwritten is updated when ever the connection flushes anything, and by that point we can no longer tell what is a padding cell and what is not.)
Property changes on: tor/trunk
___________________________________________________________________
svk:merge ticket from /tor/trunk [r16570] on 8246c3cf-6607-4228-993b-4d95d33730f1
Modified: tor/trunk/doc/TODO
===================================================================
--- tor/trunk/doc/TODO 2007-11-08 16:19:04 UTC (rev 12436)
+++ tor/trunk/doc/TODO 2007-11-08 16:19:07 UTC (rev 12437)
@@ -15,7 +15,7 @@
X Abandoned
Items blocking 0.2.0.10-alpha:
- - Some resolution for (the reopened) bug 546.
+ . Some resolution for (the reopened) bug 546.
- We should back out the MBTF->WFU Guard factors, since they open us
up to new attacks, and don't this "median" notion doesn't necessarily
help us distinguish between "was good enough to be a guard when
@@ -32,9 +32,9 @@
median WFU of the set. In addition, anybody born more than a month ago
who has >=50% WFU is always a winner.
- - If 1.5*MaxCircuitDirtiness is more than KeepAlive, do we then send
+ o If 1.5*MaxCircuitDirtiness is more than KeepAlive, do we then send
a KeepAlive and reset our timeout, thus never reaching 1.5*MCD?
- - Aw, crud. We could keep track of how long it's been since
+ o Aw, crud. We could keep track of how long it's been since
we last did anything _other_ than a keepalive, I guess. -NM
For Tor 0.2.0.11-alpha:
Modified: tor/trunk/src/or/connection.c
===================================================================
--- tor/trunk/src/or/connection.c 2007-11-08 16:19:04 UTC (rev 12436)
+++ tor/trunk/src/or/connection.c 2007-11-08 16:19:07 UTC (rev 12437)
@@ -209,8 +209,10 @@
if (CONN_IS_EDGE(conn)) {
TO_EDGE_CONN(conn)->global_identifier = n_connections_allocated++;
}
- if (type == CONN_TYPE_OR)
+ if (type == CONN_TYPE_OR) {
+ TO_OR_CONN(conn)->timestamp_last_added_nonpadding = now;
TO_OR_CONN(conn)->next_circ_id = crypto_rand_int(1<<15);
+ }
conn->timestamp_created = now;
conn->timestamp_lastread = now;
Modified: tor/trunk/src/or/connection_or.c
===================================================================
--- tor/trunk/src/or/connection_or.c 2007-11-08 16:19:04 UTC (rev 12436)
+++ tor/trunk/src/or/connection_or.c 2007-11-08 16:19:07 UTC (rev 12437)
@@ -855,6 +855,9 @@
cell_pack(&networkcell, cell);
connection_write_to_buf(networkcell.body, CELL_NETWORK_SIZE, TO_CONN(conn));
+
+ if (cell->command != CELL_PADDING)
+ conn->timestamp_last_added_nonpadding = time(NULL);
}
/**DOCDOC*/
@@ -868,6 +871,8 @@
var_cell_pack_header(cell, hdr);
connection_write_to_buf(hdr, sizeof(hdr), TO_CONN(conn));
connection_write_to_buf(cell->payload, cell->payload_len, TO_CONN(conn));
+ if (cell->command != CELL_PADDING)
+ conn->timestamp_last_added_nonpadding = time(NULL);
}
/** DOCDOC */
Modified: tor/trunk/src/or/main.c
===================================================================
--- tor/trunk/src/or/main.c 2007-11-08 16:19:04 UTC (rev 12436)
+++ tor/trunk/src/or/main.c 2007-11-08 16:19:07 UTC (rev 12437)
@@ -780,7 +780,8 @@
connection_mark_for_close(conn);
conn->hold_open_until_flushed = 1;
} else if (!clique_mode(options) && !or_conn->n_circuits &&
- now >= conn->timestamp_lastwritten + maxCircuitlessPeriod &&
+ now >= or_conn->timestamp_last_added_nonpadding +
+ maxCircuitlessPeriod &&
(!router || !server_mode(options) ||
!router_is_clique_mode(router))) {
log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) "
Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h 2007-11-08 16:19:04 UTC (rev 12436)
+++ tor/trunk/src/or/or.h 2007-11-08 16:19:07 UTC (rev 12437)
@@ -926,6 +926,8 @@
or_handshake_state_t *handshake_state;/**< DOCDOC */
time_t timestamp_lastempty; /**< When was the outbuf last completely empty?*/
+ time_t timestamp_last_added_nonpadding; /** When did we last add a
+ * non-padding cell to the outbuf? */
/* bandwidth* and read_bucket only used by ORs in OPEN state: */
int bandwidthrate; /**< Bytes/s added to the bucket. (OPEN ORs only.) */