diff options
author | Nick Mathewson <nickm@torproject.org> | 2006-01-09 23:13:53 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2006-01-09 23:13:53 +0000 |
commit | bec9b705cc1c01b866a73a8ec34052b207e31ac4 (patch) | |
tree | 6aaef27cb1b02e65d012529786d9fcaaa5eb284c | |
parent | 10100c431596bba4824579c353b3bf2cb6aafa38 (diff) | |
download | tor-bec9b705cc1c01b866a73a8ec34052b207e31ac4.tar.gz tor-bec9b705cc1c01b866a73a8ec34052b207e31ac4.zip |
Instrument directory client bytes as well as server bytes.
svn:r5760
-rw-r--r-- | src/or/control.c | 2 | ||||
-rw-r--r-- | src/or/directory.c | 23 | ||||
-rw-r--r-- | src/or/or.h | 1 |
3 files changed, 19 insertions, 7 deletions
diff --git a/src/or/control.c b/src/or/control.c index d557fab854..ac60287782 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -1413,6 +1413,8 @@ handle_getinfo_helper(const char *question, char **answer) *answer = smartlist_join_strings(mappings, "\n", 0, NULL); SMARTLIST_FOREACH(mappings, char *, cp, tor_free(cp)); smartlist_free(mappings); + } else if (!strcmp(question, "dir-usage")) { + *answer = directory_dump_request_log(); } return 0; } diff --git a/src/or/directory.c b/src/or/directory.c index a3a355db7f..d4ff04e8df 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -50,6 +50,7 @@ static void connection_dir_download_networkstatus_failed(connection_t *conn); static void connection_dir_download_routerdesc_failed(connection_t *conn); static void dir_networkstatus_download_failed(smartlist_t *failed); static void dir_routerdesc_download_failed(smartlist_t *failed); +static void note_request(const char *key, size_t bytes); /********* START VARIABLES **********/ @@ -821,7 +822,7 @@ connection_dir_client_reached_eof(connection_t *conn) char *body; char *headers; char *reason = NULL; - size_t body_len=0; + size_t body_len=0, orig_len=0; int status_code; time_t now, date_header=0; int delta; @@ -829,6 +830,7 @@ connection_dir_client_reached_eof(connection_t *conn) int plausible; int skewed=0; int allow_partial = conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC; + int was_compressed=0; switch (fetch_from_buf_http(conn->inbuf, &headers, MAX_HEADERS_SIZE, @@ -844,6 +846,7 @@ connection_dir_client_reached_eof(connection_t *conn) return -1; /* case 1, fall through */ } + orig_len = body_len; if (parse_http_response(headers, &status_code, &date_header, &compression, &reason) < 0) { @@ -928,11 +931,12 @@ connection_dir_client_reached_eof(connection_t *conn) tor_free(body); body = new_body; body_len = new_len; + was_compressed = 1; } } if (conn->purpose == DIR_PURPOSE_FETCH_DIR) { - /* fetch/process the directory to learn about new routers. */ + /* fetch/process the directory to cache it. */ info(LD_DIR,"Received directory (size %d) from server '%s:%d'", (int)body_len, conn->address, conn->port); if (status_code == 503 || body_len == 0) { @@ -952,6 +956,7 @@ connection_dir_client_reached_eof(connection_t *conn) notice(LD_DIR,"I failed to parse the directory I fetched from " "'%s:%d'. Ignoring.", conn->address, conn->port); } + note_request(was_compressed?"dl/dir.z":"dl/dir", orig_len); } if (conn->purpose == DIR_PURPOSE_FETCH_RUNNING_LIST) { @@ -971,6 +976,8 @@ connection_dir_client_reached_eof(connection_t *conn) tor_free(body); tor_free(headers); tor_free(reason); return -1; } + note_request(was_compressed?"dl/running-routers.z": + "dl/running-routers", orig_len); } if (conn->purpose == DIR_PURPOSE_FETCH_NETWORKSTATUS) { @@ -987,6 +994,7 @@ connection_dir_client_reached_eof(connection_t *conn) connection_dir_download_networkstatus_failed(conn); return -1; } + note_request(was_compressed?"dl/status.z":"dl/status", orig_len); if (conn->requested_resource && !strcmpstart(conn->requested_resource,"fp/")) { which = smartlist_create(); @@ -1024,6 +1032,7 @@ connection_dir_client_reached_eof(connection_t *conn) int n_asked_for = 0; info(LD_DIR,"Received server info (size %d) from server '%s:%d'", (int)body_len, conn->address, conn->port); + note_request(was_compressed?"dl/server.z":"dl/server", orig_len); if (conn->requested_resource && !strcmpstart(conn->requested_resource,"d/")) { which = smartlist_create(); @@ -1277,8 +1286,8 @@ note_request(const char *key, size_t bytes) } /** DOCDOC */ -static char * -dump_request_log(void) +char * +directory_dump_request_log(void) { smartlist_t *lines; char tmp[256]; @@ -1315,8 +1324,8 @@ note_request(const char *key, size_t bytes) return; } -static char * -dump_request_log(void) +char * +directory_dump_request_log(void) { return tor_strdup("Not supported."); } @@ -1583,7 +1592,7 @@ directory_handle_command_get(connection_t *conn, char *headers, } if (!strcmpstart(url,"/tor/bytes.txt")) { - char *bytes = dump_request_log(); + char *bytes = directory_dump_request_log(); size_t len = strlen(bytes); format_rfc1123_time(date, time(NULL)); tor_snprintf(tmp, sizeof(tmp), diff --git a/src/or/or.h b/src/or/or.h index 06043f9e37..bd4b797079 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -1876,6 +1876,7 @@ void free_dir_policy(void); int dir_split_resource_into_fingerprints(const char *resource, smartlist_t *fp_out, int *compresseed_out, int decode_hex); +char *directory_dump_request_log(void); /********************************* dirserv.c ***************************/ |