summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-05-27 21:02:36 +0000
committerNick Mathewson <nickm@torproject.org>2008-05-27 21:02:36 +0000
commit4ea2a4595e0331db531d293315be58a21394bd1f (patch)
tree8dc1a80c21832823ada2fb5b7d71431e6a57cc44 /src
parent9975c4f6f8c54b150335a5cd6bb7e0e7defbca80 (diff)
downloadtor-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.c25
-rw-r--r--src/or/or.h6
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