diff options
Diffstat (limited to 'src/or/control.c')
-rw-r--r-- | src/or/control.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/or/control.c b/src/or/control.c index 814a0c4e6..ea272b868 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -314,7 +314,8 @@ control_adjust_event_log_severity(void) break; } } - if (EVENT_IS_INTERESTING(EVENT_LOG_OBSOLETE)) { + if (EVENT_IS_INTERESTING(EVENT_LOG_OBSOLETE) || + EVENT_IS_INTERESTING(EVENT_STATUS_GENERAL)) { if (min_log_event > EVENT_NOTICE_MSG) min_log_event = EVENT_NOTICE_MSG; if (max_log_event < EVENT_ERR_MSG) @@ -661,8 +662,17 @@ send_control1_event_string(uint16_t event, event_format_t which, continue; } if (control_conn->event_mask & (1<<event)) { + int is_err = 0; connection_write_to_buf(msg, strlen(msg), TO_CONN(control_conn)); if (event == EVENT_ERR_MSG) + is_err = 1; + else if (event == EVENT_STATUS_GENERAL) + is_err = !strcmpstart(msg, "STATUS_GENERAL ERR "); + else if (event == EVENT_STATUS_CLIENT) + is_err = !strcmpstart(msg, "STATUS_CLIENT ERR "); + else if (event == EVENT_STATUS_SERVER) + is_err = !strcmpstart(msg, "STATUS_SERVER ERR "); + if (is_err) connection_handle_write(TO_CONN(control_conn), 1); } } @@ -3326,14 +3336,22 @@ enable_control_logging(void) /** We got a log message: tell any interested control connections. */ void -control_event_logmsg(int severity, unsigned int domain, const char *msg) +control_event_logmsg(int severity, uint32_t domain, const char *msg) { int oldlog, event; - (void) domain; if (disable_log_messages) return; + if (domain == LD_BUG && EVENT_IS_INTERESTING(EVENT_STATUS_GENERAL) && + severity <= LOG_NOTICE) { + char *esc = esc_for_log(msg); + ++disable_log_messages; + control_event_general_status(severity, "BUG REASON=\"%s\"", esc); + --disable_log_messages; + tor_free(esc); + } + oldlog = EVENT_IS_INTERESTING0(EVENT_LOG_OBSOLETE) && (severity == LOG_NOTICE || severity == LOG_WARN || severity == LOG_ERR); event = log_severity_to_event(severity); |