diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-05-27 21:02:36 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-05-27 21:02:36 +0000 |
commit | 4ea2a4595e0331db531d293315be58a21394bd1f (patch) | |
tree | 8dc1a80c21832823ada2fb5b7d71431e6a57cc44 /src | |
parent | 9975c4f6f8c54b150335a5cd6bb7e0e7defbca80 (diff) | |
download | tor-4ea2a4595e0331db531d293315be58a21394bd1f.tar.gz tor-4ea2a4595e0331db531d293315be58a21394bd1f.zip |
Fix the first part of bug 681, as suggested by Robert Hogan on or-talk.
svn:r14754
Diffstat (limited to 'src')
-rw-r--r-- | src/or/control.c | 25 | ||||
-rw-r--r-- | src/or/or.h | 6 |
2 files changed, 29 insertions, 2 deletions
diff --git a/src/or/control.c b/src/or/control.c index 01d5918112..878f0d2f01 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -3108,6 +3108,7 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp, circuit_t *circ; origin_circuit_t *origin_circ = NULL; char buf[256]; + const char *purpose = ""; tor_assert(conn->socks_request); if (!EVENT_IS_INTERESTING(EVENT_STREAM_STATUS)) @@ -3175,15 +3176,35 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp, addrport_buf[0] = '\0'; } + if (tp == STREAM_EVENT_NEW_RESOLVE) { + purpose = " PURPOSE=DNS_REQUEST"; + } else if (tp == STREAM_EVENT_NEW) { + if (conn->is_dns_request || + (conn->socks_request && + SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command))) + purpose = " PURPOSE=DNS_REQUEST"; + else if (conn->use_begindir) { + connection_t *linked = TO_CONN(conn)->linked_conn; + int linked_dir_purpose = -1; + if (linked && linked->type == CONN_TYPE_DIR) + linked_dir_purpose = linked->purpose; + if (DIR_PURPOSE_IS_UPLOAD(linked_dir_purpose)) + purpose = " PURPOSE=DIR_UPLOAD"; + else + purpose = " PURPOSE=DIR_FETCH"; + } else + purpose = " PURPOSE=USER"; + } + circ = circuit_get_by_edge_conn(conn); if (circ && CIRCUIT_IS_ORIGIN(circ)) origin_circ = TO_ORIGIN_CIRCUIT(circ); send_control_event_extended(EVENT_STREAM_STATUS, ALL_NAMES, - "650 STREAM %lu %s %lu %s@%s%s\r\n", + "650 STREAM %lu %s %lu %s@%s%s%s\r\n", (unsigned long)conn->global_identifier, status, origin_circ? (unsigned long)origin_circ->global_identifier : 0ul, - buf, reason_buf, addrport_buf); + buf, reason_buf, addrport_buf, purpose); /* XXX need to specify its intended exit, etc? */ diff --git a/src/or/or.h b/src/or/or.h index 624d407d4c..2ebe7511db 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -369,6 +369,12 @@ typedef enum { #define DIR_PURPOSE_FETCH_RENDDESC_V2 18 #define _DIR_PURPOSE_MAX 18 +#define DIR_PURPOSE_IS_UPLOAD(p) \ + ((p)==DIR_PURPOSE_UPLOAD_DIR || \ + (p)==DIR_PURPOSE_UPLOAD_RENDDESC || \ + (p)==DIR_PURPOSE_UPLOAD_VOTE || \ + (p)==DIR_PURPOSE_UPLOAD_SIGNATURES) + #define _EXIT_PURPOSE_MIN 1 /** This exit stream wants to do an ordinary connect. */ #define EXIT_PURPOSE_CONNECT 1 |