aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ransom <rransom.8774@gmail.com>2011-06-23 14:34:56 -0700
committerRobert Ransom <rransom.8774@gmail.com>2011-11-24 06:32:54 -0800
commitb7c765b1b196433f38b94353edbc1655f5da1017 (patch)
tree224a59c8b74eb87ebc8a9fea061e16bab9a1d87e
parent9ce76adfe8ccf873302cc8690fac266f966ea8b5 (diff)
downloadtor-b7c765b1b196433f38b94353edbc1655f5da1017.tar
tor-b7c765b1b196433f38b94353edbc1655f5da1017.tar.gz
Report circuit build_state flags in CIRC events
-rw-r--r--changes/feature24117
-rw-r--r--src/or/control.c28
2 files changed, 35 insertions, 0 deletions
diff --git a/changes/feature2411 b/changes/feature2411
new file mode 100644
index 000000000..b60fbfd6a
--- /dev/null
+++ b/changes/feature2411
@@ -0,0 +1,7 @@
+ o Minor features:
+
+ - Report flags that control a circuit's path selection to
+ controllers in CIRC events and in replies to 'GETINFO
+ circuit-status'. Implements part of ticket 2411.
+
+
diff --git a/src/or/control.c b/src/or/control.c
index 735492271..3dda9979f 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1795,6 +1795,34 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
}
{
+ char *buildflags = NULL;
+ cpath_build_state_t *build_state = circ->build_state;
+ smartlist_t *flaglist = smartlist_create();
+ char *flaglist_joined;
+
+ if (build_state->onehop_tunnel)
+ smartlist_add(flaglist, (void *)"ONEHOP_TUNNEL");
+ if (build_state->is_internal)
+ smartlist_add(flaglist, (void *)"IS_INTERNAL");
+ if (build_state->need_capacity)
+ smartlist_add(flaglist, (void *)"NEED_CAPACITY");
+ if (build_state->need_uptime)
+ smartlist_add(flaglist, (void *)"NEED_UPTIME");
+
+ /* Only emit a BUILD_FLAGS argument if it will have a non-empty value. */
+ if (smartlist_len(flaglist)) {
+ flaglist_joined = smartlist_join_strings(flaglist, ",", 0, NULL);
+
+ tor_asprintf(&buildflags, "BUILD_FLAGS=%s", flaglist_joined);
+ smartlist_add(descparts, buildflags);
+
+ tor_free(flaglist_joined);
+ }
+
+ smartlist_free(flaglist);
+ }
+
+ {
char *purpose = NULL;
tor_asprintf(&purpose, "PURPOSE=%s",
circuit_purpose_to_controller_string(circ->_base.purpose));