From 42e17182daa828760da8f839211618113c6ffdc4 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 4 Oct 2005 22:34:09 +0000 Subject: [PATCH] When we get an EOF or a timeout on a directory connection, note how many bytes of serverdesc we are dropping. This will help us determine whether it is smart to parse incomplete serverdesc responses. svn:r5186 --- doc/TODO | 2 +- src/or/directory.c | 6 ++++++ src/or/main.c | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/TODO b/doc/TODO index a5e8d21e75..9700eaa311 100644 --- a/doc/TODO +++ b/doc/TODO @@ -188,7 +188,7 @@ N . Routerdesc download changes o Networkstatus should list who's an authority. o Add nickname element to dirserver line. Log this along with IP:Port. o Warn when using non-default directory servers. - - When giving up on a non-finished dir request, log how many bytes + o When giving up on a non-finished dir request, log how many bytes dropped, to see whether it's worthwhile to use partial info. - Security - Alices avoid duplicate class C nodes. diff --git a/src/or/directory.c b/src/or/directory.c index 60d34b9eed..19cf41f9d7 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -1111,6 +1111,12 @@ connection_dir_reached_eof(connection_t *conn) int retval; if (conn->state != DIR_CONN_STATE_CLIENT_READING) { log_fn(LOG_INFO,"conn reached eof, not reading. Closing."); + /* This check is temporary; it's to let us know whether we should consider + * parsing partial serverdesc responses. */ + if (conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC) { + log_fn(LOG_NOTICE, "Reached EOF while downloading server descriptors; dropping %d bytes.", + buf_datalen(conn->inbuf)); + } connection_close_immediate(conn); /* it was an error; give up on flushing */ connection_mark_for_close(conn); return -1; diff --git a/src/or/main.c b/src/or/main.c index 8cf0032cf7..579556ba70 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -575,6 +575,12 @@ run_connection_housekeeping(int i, time_t now) conn->timestamp_lastwritten + 5*60 < now) { log_fn(LOG_INFO,"Expiring wedged directory conn (fd %d, purpose %d)", conn->s, conn->purpose); + /* This check is temporary; it's to let us know whether we should consider + * parsing partial serverdesc responses. */ + if (conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC) { + log_fn(LOG_NOTICE, "Expired wedged directory conn was downloading server descriptors; dropping %d bytes.", + buf_datalen(conn->inbuf)); + } connection_mark_for_close(conn); return; }