|
@@ -54,13 +54,9 @@
|
|
|
**/
|
|
|
typedef uint32_t event_mask_t;
|
|
|
|
|
|
-/** An event mask of all the events that controller with the LONG_NAMES option
|
|
|
- * set is interested in receiving. */
|
|
|
-static event_mask_t global_event_mask1long = 0;
|
|
|
-
|
|
|
-/** An event mask of all the events that controller with the SHORT_NAMES option
|
|
|
- * set is interested in receiving. */
|
|
|
-static event_mask_t global_event_mask1short = 0;
|
|
|
+/** An event mask of all the events that any controller is interested in
|
|
|
+ * receiving. */
|
|
|
+static event_mask_t global_event_mask = 0;
|
|
|
|
|
|
/** True iff we have disabled log messages from being sent to the controller */
|
|
|
static int disable_log_messages = 0;
|
|
@@ -68,13 +64,7 @@ static int disable_log_messages = 0;
|
|
|
/** Macro: true if any control connection is interested in events of type
|
|
|
* <b>e</b>. */
|
|
|
#define EVENT_IS_INTERESTING(e) \
|
|
|
- ((global_event_mask1long|global_event_mask1short) & (1<<(e)))
|
|
|
-/** Macro: true if any control connection with the LONG_NAMES option is
|
|
|
- * interested in events of type <b>e</b>. */
|
|
|
-#define EVENT_IS_INTERESTING1L(e) (global_event_mask1long & (1<<(e)))
|
|
|
-/** Macro: true if any control connection with the SHORT_NAMES option is
|
|
|
- * interested in events of type <b>e</b>. */
|
|
|
-#define EVENT_IS_INTERESTING1S(e) (global_event_mask1short & (1<<(e)))
|
|
|
+ (global_event_mask & (1<<(e)))
|
|
|
|
|
|
/** If we're using cookie-type authentication, how long should our cookies be?
|
|
|
*/
|
|
@@ -95,25 +85,13 @@ static char authentication_cookie[AUTHENTICATION_COOKIE_LEN];
|
|
|
* of this so we can respond to getinfo status/bootstrap-phase queries. */
|
|
|
static char last_sent_bootstrap_message[BOOTSTRAP_MSG_LEN];
|
|
|
|
|
|
-/** Flag for event_format_t. Indicates that we should use the old
|
|
|
- * name format of nickname|hexdigest
|
|
|
- */
|
|
|
-#define SHORT_NAMES 1
|
|
|
-/** Flag for event_format_t. Indicates that we should use the new
|
|
|
- * name format of $hexdigest[=~]nickname
|
|
|
+/** Flag for event_format_t. Indicates that we should use the one standard
|
|
|
+ format.
|
|
|
*/
|
|
|
-#define LONG_NAMES 2
|
|
|
-#define ALL_NAMES (SHORT_NAMES|LONG_NAMES)
|
|
|
-/** Flag for event_format_t. Indicates that we should use the new event
|
|
|
- * format where extra event fields are allowed using a NAME=VAL format. */
|
|
|
-#define EXTENDED_FORMAT 4
|
|
|
-/** Flag for event_format_t. Indicates that we are using the old event format
|
|
|
- * where extra fields aren't allowed. */
|
|
|
-#define NONEXTENDED_FORMAT 8
|
|
|
-#define ALL_FORMATS (EXTENDED_FORMAT|NONEXTENDED_FORMAT)
|
|
|
+#define ALL_FORMATS 1
|
|
|
|
|
|
/** Bit field of flags to select how to format a controller event. Recognized
|
|
|
- * flags are SHORT_NAMES, LONG_NAMES, EXTENDED_FORMAT, NONEXTENDED_FORMAT. */
|
|
|
+ * flag is ALL_FORMATS. */
|
|
|
typedef int event_format_t;
|
|
|
|
|
|
static void connection_printf_to_buf(control_connection_t *conn,
|
|
@@ -123,9 +101,6 @@ static void send_control_done(control_connection_t *conn);
|
|
|
static void send_control_event(uint16_t event, event_format_t which,
|
|
|
const char *format, ...)
|
|
|
CHECK_PRINTF(3,4);
|
|
|
-static void send_control_event_extended(uint16_t event, event_format_t which,
|
|
|
- const char *format, ...)
|
|
|
- CHECK_PRINTF(3,4);
|
|
|
static int handle_control_setconf(control_connection_t *conn, uint32_t len,
|
|
|
char *body);
|
|
|
static int handle_control_resetconf(control_connection_t *conn, uint32_t len,
|
|
@@ -174,7 +149,7 @@ static int handle_control_usefeature(control_connection_t *conn,
|
|
|
const char *body);
|
|
|
static int write_stream_target_to_buf(edge_connection_t *conn, char *buf,
|
|
|
size_t len);
|
|
|
-static void orconn_target_get_name(int long_names, char *buf, size_t len,
|
|
|
+static void orconn_target_get_name(char *buf, size_t len,
|
|
|
or_connection_t *conn);
|
|
|
static char *get_cookie_file(void);
|
|
|
|
|
@@ -214,25 +189,19 @@ control_update_global_event_mask(void)
|
|
|
{
|
|
|
smartlist_t *conns = get_connection_array();
|
|
|
event_mask_t old_mask, new_mask;
|
|
|
- old_mask = global_event_mask1short;
|
|
|
- old_mask |= global_event_mask1long;
|
|
|
+ old_mask = global_event_mask;
|
|
|
|
|
|
- global_event_mask1short = 0;
|
|
|
- global_event_mask1long = 0;
|
|
|
+ global_event_mask = 0;
|
|
|
SMARTLIST_FOREACH(conns, connection_t *, _conn,
|
|
|
{
|
|
|
if (_conn->type == CONN_TYPE_CONTROL &&
|
|
|
STATE_IS_OPEN(_conn->state)) {
|
|
|
control_connection_t *conn = TO_CONTROL_CONN(_conn);
|
|
|
- if (conn->use_long_names)
|
|
|
- global_event_mask1long |= conn->event_mask;
|
|
|
- else
|
|
|
- global_event_mask1short |= conn->event_mask;
|
|
|
+ global_event_mask |= conn->event_mask;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- new_mask = global_event_mask1short;
|
|
|
- new_mask |= global_event_mask1long;
|
|
|
+ new_mask = global_event_mask;
|
|
|
|
|
|
/* Handle the aftermath. Set up the log callback to tell us only what
|
|
|
* we want to hear...*/
|
|
@@ -542,28 +511,15 @@ send_control_event_string(uint16_t event, event_format_t which,
|
|
|
const char *msg)
|
|
|
{
|
|
|
smartlist_t *conns = get_connection_array();
|
|
|
+ (void)which;
|
|
|
tor_assert(event >= _EVENT_MIN && event <= _EVENT_MAX);
|
|
|
|
|
|
- SMARTLIST_FOREACH(conns, connection_t *, conn,
|
|
|
- {
|
|
|
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
|
|
|
if (conn->type == CONN_TYPE_CONTROL &&
|
|
|
!conn->marked_for_close &&
|
|
|
conn->state == CONTROL_CONN_STATE_OPEN) {
|
|
|
control_connection_t *control_conn = TO_CONTROL_CONN(conn);
|
|
|
- if (control_conn->use_long_names) {
|
|
|
- if (!(which & LONG_NAMES))
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- if (!(which & SHORT_NAMES))
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (control_conn->use_extended_events) {
|
|
|
- if (!(which & EXTENDED_FORMAT))
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- if (!(which & NONEXTENDED_FORMAT))
|
|
|
- continue;
|
|
|
- }
|
|
|
+
|
|
|
if (control_conn->event_mask & (1<<event)) {
|
|
|
int is_err = 0;
|
|
|
connection_write_to_buf(msg, strlen(msg), TO_CONN(control_conn));
|
|
@@ -579,7 +535,7 @@ send_control_event_string(uint16_t event, event_format_t which,
|
|
|
connection_handle_write(TO_CONN(control_conn), 1);
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
+ } SMARTLIST_FOREACH_END(conn);
|
|
|
}
|
|
|
|
|
|
/** Helper for send_control1_event and send_control1_event_extended:
|
|
@@ -587,22 +543,17 @@ send_control_event_string(uint16_t event, event_format_t which,
|
|
|
* <b>event</b>. The event's body is created by the printf-style format in
|
|
|
* <b>format</b>, and other arguments as provided.
|
|
|
*
|
|
|
- * If <b>extended</b> is true, and the format contains a single '@' character,
|
|
|
- * it will be replaced with a space and all text after that character will be
|
|
|
- * sent only to controllers that have enabled extended events.
|
|
|
- *
|
|
|
* Currently the length of the message is limited to 1024 (including the
|
|
|
* ending \\r\\n\\0). */
|
|
|
static void
|
|
|
-send_control_event_impl(uint16_t event, event_format_t which, int extended,
|
|
|
- const char *format, va_list ap)
|
|
|
+send_control_event_impl(uint16_t event, event_format_t which,
|
|
|
+ const char *format, va_list ap)
|
|
|
{
|
|
|
/* This is just a little longer than the longest allowed log message */
|
|
|
#define SEND_CONTROL1_EVENT_BUFFERSIZE 10064
|
|
|
int r;
|
|
|
char buf[SEND_CONTROL1_EVENT_BUFFERSIZE];
|
|
|
size_t len;
|
|
|
- char *cp;
|
|
|
|
|
|
r = tor_vsnprintf(buf, sizeof(buf), format, ap);
|
|
|
if (r<0) {
|
|
@@ -618,15 +569,7 @@ send_control_event_impl(uint16_t event, event_format_t which, int extended,
|
|
|
buf[SEND_CONTROL1_EVENT_BUFFERSIZE-3] = '\r';
|
|
|
}
|
|
|
|
|
|
- if (extended && (cp = strchr(buf, '@'))) {
|
|
|
- which &= ~ALL_FORMATS;
|
|
|
- *cp = ' ';
|
|
|
- send_control_event_string(event, which|EXTENDED_FORMAT, buf);
|
|
|
- memcpy(cp, "\r\n\0", 3);
|
|
|
- send_control_event_string(event, which|NONEXTENDED_FORMAT, buf);
|
|
|
- } else {
|
|
|
- send_control_event_string(event, which|ALL_FORMATS, buf);
|
|
|
- }
|
|
|
+ send_control_event_string(event, which|ALL_FORMATS, buf);
|
|
|
}
|
|
|
|
|
|
/** Send an event to all v1 controllers that are listening for code
|
|
@@ -641,27 +584,7 @@ send_control_event(uint16_t event, event_format_t which,
|
|
|
{
|
|
|
va_list ap;
|
|
|
va_start(ap, format);
|
|
|
- send_control_event_impl(event, which, 0, format, ap);
|
|
|
- va_end(ap);
|
|
|
-}
|
|
|
-
|
|
|
-/** Send an event to all v1 controllers that are listening for code
|
|
|
- * <b>event</b>. The event's body is created by the printf-style format in
|
|
|
- * <b>format</b>, and other arguments as provided.
|
|
|
- *
|
|
|
- * If the format contains a single '@' character, it will be replaced with a
|
|
|
- * space and all text after that character will be sent only to controllers
|
|
|
- * that have enabled extended events.
|
|
|
- *
|
|
|
- * Currently the length of the message is limited to 1024 (including the
|
|
|
- * ending \\n\\r\\0. */
|
|
|
-static void
|
|
|
-send_control_event_extended(uint16_t event, event_format_t which,
|
|
|
- const char *format, ...)
|
|
|
-{
|
|
|
- va_list ap;
|
|
|
- va_start(ap, format);
|
|
|
- send_control_event_impl(event, which, 1, format, ap);
|
|
|
+ send_control_event_impl(event, which, format, ap);
|
|
|
va_end(ap);
|
|
|
}
|
|
|
|
|
@@ -948,7 +871,6 @@ handle_control_setevents(control_connection_t *conn, uint32_t len,
|
|
|
{
|
|
|
uint16_t event_code;
|
|
|
uint32_t event_mask = 0;
|
|
|
- unsigned int extended = 0;
|
|
|
smartlist_t *events = smartlist_create();
|
|
|
|
|
|
(void) len;
|
|
@@ -958,7 +880,6 @@ handle_control_setevents(control_connection_t *conn, uint32_t len,
|
|
|
SMARTLIST_FOREACH_BEGIN(events, const char *, ev)
|
|
|
{
|
|
|
if (!strcasecmp(ev, "EXTENDED")) {
|
|
|
- extended = 1;
|
|
|
continue;
|
|
|
} else if (!strcasecmp(ev, "CIRC"))
|
|
|
event_code = EVENT_CIRCUIT_STATUS;
|
|
@@ -1016,8 +937,6 @@ handle_control_setevents(control_connection_t *conn, uint32_t len,
|
|
|
smartlist_free(events);
|
|
|
|
|
|
conn->event_mask = event_mask;
|
|
|
- if (extended)
|
|
|
- conn->use_extended_events = 1;
|
|
|
|
|
|
control_update_global_event_mask();
|
|
|
send_control_done(conn);
|
|
@@ -1463,6 +1382,7 @@ static int
|
|
|
getinfo_helper_dir(control_connection_t *control_conn,
|
|
|
const char *question, char **answer)
|
|
|
{
|
|
|
+ (void) control_conn;
|
|
|
if (!strcmpstart(question, "desc/id/")) {
|
|
|
routerinfo_t *ri = router_get_by_hexdigest(question+strlen("desc/id/"));
|
|
|
if (ri) {
|
|
@@ -1597,10 +1517,8 @@ getinfo_helper_dir(control_connection_t *control_conn,
|
|
|
}
|
|
|
} else if (!strcmp(question, "network-status")) { /* v1 */
|
|
|
routerlist_t *routerlist = router_get_routerlist();
|
|
|
- int verbose = control_conn->use_long_names;
|
|
|
if (!routerlist || !routerlist->routers ||
|
|
|
- list_server_status_v1(routerlist->routers, answer,
|
|
|
- verbose ? 2 : 1) < 0) {
|
|
|
+ list_server_status_v1(routerlist->routers, answer, 1) < 0) {
|
|
|
return -1;
|
|
|
}
|
|
|
} else if (!strcmpstart(question, "extra-info/digest/")) {
|
|
@@ -1636,6 +1554,7 @@ static int
|
|
|
getinfo_helper_events(control_connection_t *control_conn,
|
|
|
const char *question, char **answer)
|
|
|
{
|
|
|
+ (void) control_conn;
|
|
|
if (!strcmp(question, "circuit-status")) {
|
|
|
circuit_t *circ;
|
|
|
smartlist_t *status = smartlist_create();
|
|
@@ -1646,10 +1565,9 @@ getinfo_helper_events(control_connection_t *control_conn,
|
|
|
const char *purpose;
|
|
|
if (! CIRCUIT_IS_ORIGIN(circ) || circ->marked_for_close)
|
|
|
continue;
|
|
|
- if (control_conn->use_long_names)
|
|
|
- path = circuit_list_path_for_controller(TO_ORIGIN_CIRCUIT(circ));
|
|
|
- else
|
|
|
- path = circuit_list_path(TO_ORIGIN_CIRCUIT(circ),0);
|
|
|
+
|
|
|
+ path = circuit_list_path_for_controller(TO_ORIGIN_CIRCUIT(circ));
|
|
|
+
|
|
|
if (circ->state == CIRCUIT_STATE_OPEN)
|
|
|
state = "BUILT";
|
|
|
else if (strlen(path))
|
|
@@ -1727,8 +1645,7 @@ getinfo_helper_events(control_connection_t *control_conn,
|
|
|
} else if (!strcmp(question, "orconn-status")) {
|
|
|
smartlist_t *conns = get_connection_array();
|
|
|
smartlist_t *status = smartlist_create();
|
|
|
- SMARTLIST_FOREACH(conns, connection_t *, base_conn,
|
|
|
- {
|
|
|
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, base_conn) {
|
|
|
const char *state;
|
|
|
char *s;
|
|
|
char name[128];
|
|
@@ -1743,13 +1660,12 @@ getinfo_helper_events(control_connection_t *control_conn,
|
|
|
state = "LAUNCHED";
|
|
|
else
|
|
|
state = "NEW";
|
|
|
- orconn_target_get_name(control_conn->use_long_names, name, sizeof(name),
|
|
|
- conn);
|
|
|
+ orconn_target_get_name(name, sizeof(name), conn);
|
|
|
slen = strlen(name)+strlen(state)+2;
|
|
|
s = tor_malloc(slen+1);
|
|
|
tor_snprintf(s, slen, "%s %s", name, state);
|
|
|
smartlist_add(status, s);
|
|
|
- });
|
|
|
+ } SMARTLIST_FOREACH_END(base_conn);
|
|
|
*answer = smartlist_join_strings(status, "\r\n", 0, NULL);
|
|
|
SMARTLIST_FOREACH(status, char *, cp, tor_free(cp));
|
|
|
smartlist_free(status);
|
|
@@ -2688,7 +2604,6 @@ handle_control_usefeature(control_connection_t *conn,
|
|
|
const char *body)
|
|
|
{
|
|
|
smartlist_t *args;
|
|
|
- int verbose_names = 0, extended_events = 0;
|
|
|
int bad = 0;
|
|
|
(void) len; /* body is nul-terminated; it's safe to ignore the length */
|
|
|
args = smartlist_create();
|
|
@@ -2696,9 +2611,9 @@ handle_control_usefeature(control_connection_t *conn,
|
|
|
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
|
|
|
SMARTLIST_FOREACH(args, const char *, arg, {
|
|
|
if (!strcasecmp(arg, "VERBOSE_NAMES"))
|
|
|
- verbose_names = 1;
|
|
|
+ ;
|
|
|
else if (!strcasecmp(arg, "EXTENDED_EVENTS"))
|
|
|
- extended_events = 1;
|
|
|
+ ;
|
|
|
else {
|
|
|
connection_printf_to_buf(conn, "552 Unrecognized feature \"%s\"\r\n",
|
|
|
arg);
|
|
@@ -2708,12 +2623,6 @@ handle_control_usefeature(control_connection_t *conn,
|
|
|
});
|
|
|
|
|
|
if (!bad) {
|
|
|
- if (verbose_names) {
|
|
|
- conn->use_long_names = 1;
|
|
|
- control_update_global_event_mask();
|
|
|
- }
|
|
|
- if (extended_events)
|
|
|
- conn->use_extended_events = 1;
|
|
|
send_control_done(conn);
|
|
|
}
|
|
|
|
|
@@ -3011,20 +2920,11 @@ control_event_circuit_status(origin_circuit_t *circ, circuit_status_event_t tp,
|
|
|
tor_free(reason);
|
|
|
}
|
|
|
|
|
|
- if (EVENT_IS_INTERESTING1S(EVENT_CIRCUIT_STATUS)) {
|
|
|
- char *path = circuit_list_path(circ,0);
|
|
|
- const char *sp = strlen(path) ? " " : "";
|
|
|
- send_control_event_extended(EVENT_CIRCUIT_STATUS, SHORT_NAMES,
|
|
|
- "650 CIRC %lu %s%s%s@%s\r\n",
|
|
|
- (unsigned long)circ->global_identifier,
|
|
|
- status, sp, path, extended_buf);
|
|
|
- tor_free(path);
|
|
|
- }
|
|
|
- if (EVENT_IS_INTERESTING1L(EVENT_CIRCUIT_STATUS)) {
|
|
|
+ {
|
|
|
char *vpath = circuit_list_path_for_controller(circ);
|
|
|
const char *sp = strlen(vpath) ? " " : "";
|
|
|
- send_control_event_extended(EVENT_CIRCUIT_STATUS, LONG_NAMES,
|
|
|
- "650 CIRC %lu %s%s%s@%s\r\n",
|
|
|
+ send_control_event(EVENT_CIRCUIT_STATUS, ALL_FORMATS,
|
|
|
+ "650 CIRC %lu %s%s%s %s\r\n",
|
|
|
(unsigned long)circ->global_identifier,
|
|
|
status, sp, vpath, extended_buf);
|
|
|
tor_free(vpath);
|
|
@@ -3160,8 +3060,8 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp,
|
|
|
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 "U64_FORMAT" %s %lu %s@%s%s%s\r\n",
|
|
|
+ send_control_event(EVENT_STREAM_STATUS, ALL_FORMATS,
|
|
|
+ "650 STREAM "U64_FORMAT" %s %lu %s %s%s%s\r\n",
|
|
|
U64_PRINTF_ARG(conn->_base.global_identifier), status,
|
|
|
origin_circ?
|
|
|
(unsigned long)origin_circ->global_identifier : 0ul,
|
|
@@ -3174,30 +3074,21 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp,
|
|
|
|
|
|
/** Figure out the best name for the target router of an OR connection
|
|
|
* <b>conn</b>, and write it into the <b>len</b>-character buffer
|
|
|
- * <b>name</b>. Use verbose names if <b>long_names</b> is set. */
|
|
|
+ * <b>name</b>. */
|
|
|
static void
|
|
|
-orconn_target_get_name(int long_names,
|
|
|
- char *name, size_t len, or_connection_t *conn)
|
|
|
-{
|
|
|
- if (! long_names) {
|
|
|
- if (conn->nickname)
|
|
|
- strlcpy(name, conn->nickname, len);
|
|
|
- else
|
|
|
- tor_snprintf(name, len, "%s:%d",
|
|
|
- conn->_base.address, conn->_base.port);
|
|
|
+orconn_target_get_name(char *name, size_t len, or_connection_t *conn)
|
|
|
+{
|
|
|
+ routerinfo_t *ri = router_get_by_digest(conn->identity_digest);
|
|
|
+ if (ri) {
|
|
|
+ tor_assert(len > MAX_VERBOSE_NICKNAME_LEN);
|
|
|
+ router_get_verbose_nickname(name, ri);
|
|
|
+ } else if (! tor_digest_is_zero(conn->identity_digest)) {
|
|
|
+ name[0] = '$';
|
|
|
+ base16_encode(name+1, len-1, conn->identity_digest,
|
|
|
+ DIGEST_LEN);
|
|
|
} else {
|
|
|
- routerinfo_t *ri = router_get_by_digest(conn->identity_digest);
|
|
|
- if (ri) {
|
|
|
- tor_assert(len > MAX_VERBOSE_NICKNAME_LEN);
|
|
|
- router_get_verbose_nickname(name, ri);
|
|
|
- } else if (! tor_digest_is_zero(conn->identity_digest)) {
|
|
|
- name[0] = '$';
|
|
|
- base16_encode(name+1, len-1, conn->identity_digest,
|
|
|
- DIGEST_LEN);
|
|
|
- } else {
|
|
|
- tor_snprintf(name, len, "%s:%d",
|
|
|
- conn->_base.address, conn->_base.port);
|
|
|
- }
|
|
|
+ tor_snprintf(name, len, "%s:%d",
|
|
|
+ conn->_base.address, conn->_base.port);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3236,24 +3127,13 @@ control_event_or_conn_status(or_connection_t *conn, or_conn_status_event_t tp,
|
|
|
reason ? " " : "", ncircs);
|
|
|
}
|
|
|
|
|
|
- if (EVENT_IS_INTERESTING1S(EVENT_OR_CONN_STATUS)) {
|
|
|
- orconn_target_get_name(0, name, sizeof(name), conn);
|
|
|
- send_control_event_extended(EVENT_OR_CONN_STATUS, SHORT_NAMES,
|
|
|
- "650 ORCONN %s %s@%s%s%s\r\n",
|
|
|
- name, status,
|
|
|
- reason ? "REASON=" : "",
|
|
|
- orconn_end_reason_to_control_string(reason),
|
|
|
- ncircs_buf);
|
|
|
- }
|
|
|
- if (EVENT_IS_INTERESTING1L(EVENT_OR_CONN_STATUS)) {
|
|
|
- orconn_target_get_name(1, name, sizeof(name), conn);
|
|
|
- send_control_event_extended(EVENT_OR_CONN_STATUS, LONG_NAMES,
|
|
|
- "650 ORCONN %s %s@%s%s%s\r\n",
|
|
|
- name, status,
|
|
|
- reason ? "REASON=" : "",
|
|
|
- orconn_end_reason_to_control_string(reason),
|
|
|
- ncircs_buf);
|
|
|
- }
|
|
|
+ orconn_target_get_name(name, sizeof(name), conn);
|
|
|
+ send_control_event(EVENT_OR_CONN_STATUS, ALL_FORMATS,
|
|
|
+ "650 ORCONN %s %s %s%s%s\r\n",
|
|
|
+ name, status,
|
|
|
+ reason ? "REASON=" : "",
|
|
|
+ orconn_end_reason_to_control_string(reason),
|
|
|
+ ncircs_buf);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -3297,7 +3177,7 @@ control_event_stream_bandwidth_used(void)
|
|
|
if (!edge_conn->n_read && !edge_conn->n_written)
|
|
|
continue;
|
|
|
|
|
|
- send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_NAMES,
|
|
|
+ send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_FORMATS,
|
|
|
"650 STREAM_BW "U64_FORMAT" %lu %lu\r\n",
|
|
|
U64_PRINTF_ARG(edge_conn->_base.global_identifier),
|
|
|
(unsigned long)edge_conn->n_read,
|
|
@@ -3317,7 +3197,7 @@ int
|
|
|
control_event_bandwidth_used(uint32_t n_read, uint32_t n_written)
|
|
|
{
|
|
|
if (EVENT_IS_INTERESTING(EVENT_BANDWIDTH_USED)) {
|
|
|
- send_control_event(EVENT_BANDWIDTH_USED, ALL_NAMES,
|
|
|
+ send_control_event(EVENT_BANDWIDTH_USED, ALL_FORMATS,
|
|
|
"650 BW %lu %lu\r\n",
|
|
|
(unsigned long)n_read,
|
|
|
(unsigned long)n_written);
|
|
@@ -3382,7 +3262,7 @@ control_event_logmsg(int severity, uint32_t domain, const char *msg)
|
|
|
default: s = "UnknownLogSeverity"; break;
|
|
|
}
|
|
|
++disable_log_messages;
|
|
|
- send_control_event(event, ALL_NAMES, "650 %s %s\r\n", s, b?b:msg);
|
|
|
+ send_control_event(event, ALL_FORMATS, "650 %s %s\r\n", s, b?b:msg);
|
|
|
--disable_log_messages;
|
|
|
tor_free(b);
|
|
|
}
|
|
@@ -3395,31 +3275,12 @@ control_event_logmsg(int severity, uint32_t domain, const char *msg)
|
|
|
int
|
|
|
control_event_descriptors_changed(smartlist_t *routers)
|
|
|
{
|
|
|
- size_t len;
|
|
|
char *msg;
|
|
|
- smartlist_t *identities = NULL;
|
|
|
- char buf[HEX_DIGEST_LEN+1];
|
|
|
|
|
|
if (!EVENT_IS_INTERESTING(EVENT_NEW_DESC))
|
|
|
return 0;
|
|
|
- if (EVENT_IS_INTERESTING1S(EVENT_NEW_DESC)) {
|
|
|
- identities = smartlist_create();
|
|
|
- SMARTLIST_FOREACH(routers, routerinfo_t *, r,
|
|
|
- {
|
|
|
- base16_encode(buf,sizeof(buf),r->cache_info.identity_digest,DIGEST_LEN);
|
|
|
- smartlist_add(identities, tor_strdup(buf));
|
|
|
- });
|
|
|
- }
|
|
|
- if (EVENT_IS_INTERESTING1S(EVENT_NEW_DESC)) {
|
|
|
- char *ids = smartlist_join_strings(identities, " ", 0, &len);
|
|
|
- size_t ids_len = strlen(ids)+32;
|
|
|
- msg = tor_malloc(ids_len);
|
|
|
- tor_snprintf(msg, ids_len, "650 NEWDESC %s\r\n", ids);
|
|
|
- send_control_event_string(EVENT_NEW_DESC, SHORT_NAMES|ALL_FORMATS, msg);
|
|
|
- tor_free(ids);
|
|
|
- tor_free(msg);
|
|
|
- }
|
|
|
- if (EVENT_IS_INTERESTING1L(EVENT_NEW_DESC)) {
|
|
|
+
|
|
|
+ {
|
|
|
smartlist_t *names = smartlist_create();
|
|
|
char *ids;
|
|
|
size_t names_len;
|
|
@@ -3432,16 +3293,12 @@ control_event_descriptors_changed(smartlist_t *routers)
|
|
|
names_len = strlen(ids)+32;
|
|
|
msg = tor_malloc(names_len);
|
|
|
tor_snprintf(msg, names_len, "650 NEWDESC %s\r\n", ids);
|
|
|
- send_control_event_string(EVENT_NEW_DESC, LONG_NAMES|ALL_FORMATS, msg);
|
|
|
+ send_control_event_string(EVENT_NEW_DESC, ALL_FORMATS, msg);
|
|
|
tor_free(ids);
|
|
|
tor_free(msg);
|
|
|
SMARTLIST_FOREACH(names, char *, cp, tor_free(cp));
|
|
|
smartlist_free(names);
|
|
|
}
|
|
|
- if (identities) {
|
|
|
- SMARTLIST_FOREACH(identities, char *, cp, tor_free(cp));
|
|
|
- smartlist_free(identities);
|
|
|
- }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -3458,17 +3315,17 @@ control_event_address_mapped(const char *from, const char *to, time_t expires,
|
|
|
return 0;
|
|
|
|
|
|
if (expires < 3 || expires == TIME_MAX)
|
|
|
- send_control_event_extended(EVENT_ADDRMAP, ALL_NAMES,
|
|
|
- "650 ADDRMAP %s %s NEVER@%s\r\n", from, to,
|
|
|
+ send_control_event(EVENT_ADDRMAP, ALL_FORMATS,
|
|
|
+ "650 ADDRMAP %s %s NEVER %s\r\n", from, to,
|
|
|
error?error:"");
|
|
|
else {
|
|
|
char buf[ISO_TIME_LEN+1];
|
|
|
char buf2[ISO_TIME_LEN+1];
|
|
|
format_local_iso_time(buf,expires);
|
|
|
format_iso_time(buf2,expires);
|
|
|
- send_control_event_extended(EVENT_ADDRMAP, ALL_NAMES,
|
|
|
+ send_control_event(EVENT_ADDRMAP, ALL_FORMATS,
|
|
|
"650 ADDRMAP %s %s \"%s\""
|
|
|
- "@%s%sEXPIRES=\"%s\"\r\n",
|
|
|
+ " %s%sEXPIRES=\"%s\"\r\n",
|
|
|
from, to, buf,
|
|
|
error?error:"", error?" ":"",
|
|
|
buf2);
|
|
@@ -3508,9 +3365,9 @@ control_event_or_authdir_new_descriptor(const char *action,
|
|
|
buf = tor_malloc(totallen);
|
|
|
strlcpy(buf, firstline, totallen);
|
|
|
strlcpy(buf+strlen(firstline), esc, totallen);
|
|
|
- send_control_event_string(EVENT_AUTHDIR_NEWDESCS, ALL_NAMES|ALL_FORMATS,
|
|
|
+ send_control_event_string(EVENT_AUTHDIR_NEWDESCS, ALL_FORMATS,
|
|
|
buf);
|
|
|
- send_control_event_string(EVENT_AUTHDIR_NEWDESCS, ALL_NAMES|ALL_FORMATS,
|
|
|
+ send_control_event_string(EVENT_AUTHDIR_NEWDESCS, ALL_FORMATS,
|
|
|
"650 OK\r\n");
|
|
|
tor_free(esc);
|
|
|
tor_free(buf);
|
|
@@ -3548,8 +3405,8 @@ control_event_networkstatus_changed_helper(smartlist_t *statuses,
|
|
|
SMARTLIST_FOREACH(strs, char *, cp, tor_free(cp));
|
|
|
smartlist_free(strs);
|
|
|
tor_free(s);
|
|
|
- send_control_event_string(event, ALL_NAMES|ALL_FORMATS, esc);
|
|
|
- send_control_event_string(event, ALL_NAMES|ALL_FORMATS,
|
|
|
+ send_control_event_string(event, ALL_FORMATS, esc);
|
|
|
+ send_control_event_string(event, ALL_FORMATS,
|
|
|
"650 OK\r\n");
|
|
|
|
|
|
tor_free(esc);
|
|
@@ -3598,7 +3455,7 @@ control_event_networkstatus_changed_single(routerstatus_t *rs)
|
|
|
int
|
|
|
control_event_my_descriptor_changed(void)
|
|
|
{
|
|
|
- send_control_event(EVENT_DESCCHANGED, ALL_NAMES, "650 DESCCHANGED\r\n");
|
|
|
+ send_control_event(EVENT_DESCCHANGED, ALL_FORMATS, "650 DESCCHANGED\r\n");
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -3646,7 +3503,7 @@ control_event_status(int type, int severity, const char *format, va_list args)
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- send_control_event_impl(type, ALL_NAMES|ALL_FORMATS, 0, format_buf, args);
|
|
|
+ send_control_event_impl(type, ALL_FORMATS, format_buf, args);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -3710,7 +3567,7 @@ control_event_guard(const char *nickname, const char *digest,
|
|
|
if (!EVENT_IS_INTERESTING(EVENT_GUARD))
|
|
|
return 0;
|
|
|
|
|
|
- if (EVENT_IS_INTERESTING1L(EVENT_GUARD)) {
|
|
|
+ {
|
|
|
char buf[MAX_VERBOSE_NICKNAME_LEN+1];
|
|
|
routerinfo_t *ri = router_get_by_digest(digest);
|
|
|
if (ri) {
|
|
@@ -3718,13 +3575,9 @@ control_event_guard(const char *nickname, const char *digest,
|
|
|
} else {
|
|
|
tor_snprintf(buf, sizeof(buf), "$%s~%s", hbuf, nickname);
|
|
|
}
|
|
|
- send_control_event(EVENT_GUARD, LONG_NAMES,
|
|
|
+ send_control_event(EVENT_GUARD, ALL_FORMATS,
|
|
|
"650 GUARD ENTRY %s %s\r\n", buf, status);
|
|
|
}
|
|
|
- if (EVENT_IS_INTERESTING1S(EVENT_GUARD)) {
|
|
|
- send_control_event(EVENT_GUARD, SHORT_NAMES,
|
|
|
- "650 GUARD ENTRY $%s %s\r\n", hbuf, status);
|
|
|
- }
|
|
|
return 0;
|
|
|
}
|
|
|
|