diff options
-rw-r--r-- | src/common/log.c | 8 | ||||
-rw-r--r-- | src/common/torlog.h | 8 | ||||
-rw-r--r-- | src/or/main.c | 4 | ||||
-rw-r--r-- | src/rust/protover/protover.rs | 8 | ||||
-rw-r--r-- | src/rust/tor_log/tor_log.rs | 59 | ||||
-rw-r--r-- | src/rust/tor_util/ffi.rs | 4 |
6 files changed, 63 insertions, 28 deletions
diff --git a/src/common/log.c b/src/common/log.c index ebe6c228ce..365a4673a4 100644 --- a/src/common/log.c +++ b/src/common/log.c @@ -54,10 +54,10 @@ /** Defining compile-time constants for Tor log levels (used by the Rust * log wrapper at src/rust/tor_log) */ -const int _LOG_WARN = LOG_WARN; -const int _LOG_NOTICE = LOG_NOTICE; -const log_domain_mask_t _LD_GENERAL = LD_GENERAL; -const log_domain_mask_t _LD_NET = LD_NET; +const int LOG_WARN_ = LOG_WARN; +const int LOG_NOTICE_ = LOG_NOTICE; +const log_domain_mask_t LD_GENERAL_ = LD_GENERAL; +const log_domain_mask_t LD_NET_ = LD_NET; /** Information for a single logfile; only used in log.c */ typedef struct logfile_t { diff --git a/src/common/torlog.h b/src/common/torlog.h index 0ed990b6ef..3ecaf50af7 100644 --- a/src/common/torlog.h +++ b/src/common/torlog.h @@ -36,10 +36,10 @@ * * C_RUST_COUPLED src/rust/tor_log LogSeverity, LogDomain */ -extern const int _LOG_WARN; -extern const int _LOG_NOTICE; -extern const log_domain_mask_t _LD_NET; -extern const log_domain_mask_t _LD_GENERAL; +extern const int LOG_WARN_; +extern const int LOG_NOTICE_; +extern const log_domain_mask_t LD_NET_; +extern const log_domain_mask_t LD_GENERAL_; /** Debug-level severity: for hyper-verbose messages of no interest to * anybody but developers. */ diff --git a/src/or/main.c b/src/or/main.c index c19d4f6909..b42b0b6208 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -132,7 +132,7 @@ void evdns_shutdown(int); #ifdef HAVE_RUST // helper function defined in Rust to output a log message indicating if tor is // running with Rust enabled. See src/rust/tor_util -void rust_welcome_string(void); +void rust_log_welcome_string(void); #endif /********* PROTOTYPES **********/ @@ -3283,7 +3283,7 @@ tor_init(int argc, char *argv[]) } #ifdef HAVE_RUST - rust_welcome_string(); + rust_log_welcome_string(); #endif /* defined(HAVE_RUST) */ if (network_init()<0) { diff --git a/src/rust/protover/protover.rs b/src/rust/protover/protover.rs index 33d49ea485..22a94a164d 100644 --- a/src/rust/protover/protover.rs +++ b/src/rust/protover/protover.rs @@ -243,11 +243,11 @@ fn contains_only_supported_protocols(proto_entry: &str) -> bool { Err("Too many versions to expand") => { tor_log_msg!( LogSeverity::Warn, - LogDomain::LdNet, + LogDomain::Net, "get_versions", - "When expanding a protocol list from an authority, I - got too many protocols. This is possibly an attack or a bug, - unless the Tor network truly has expanded to support over {} + "When expanding a protocol list from an authority, I \ + got too many protocols. This is possibly an attack or a bug, \ + unless the Tor network truly has expanded to support over {} \ different subprotocol versions. The offending string was: {}", MAX_PROTOCOLS_TO_EXPAND, proto_entry diff --git a/src/rust/tor_log/tor_log.rs b/src/rust/tor_log/tor_log.rs index f8bf190690..a88184cda9 100644 --- a/src/rust/tor_log/tor_log.rs +++ b/src/rust/tor_log/tor_log.rs @@ -9,8 +9,8 @@ /// general messages can use LdGeneral. #[derive(Eq, PartialEq)] pub enum LogDomain { - LdNet, - LdGeneral, + Net, + General, } /// The severity level at which to log messages. @@ -98,33 +98,35 @@ pub mod log { /// C_RUST_COUPLED: src/common/log.c, log domain types extern "C" { #[no_mangle] - static _LOG_WARN: c_int; - static _LOG_NOTICE: c_int; + static LOG_WARN_: c_int; + static LOG_NOTICE_: c_int; } /// Domain log types. These mirror definitions in /src/common/torlog.h /// C_RUST_COUPLED: src/common/log.c, log severity types extern "C" { #[no_mangle] - static _LD_NET: u32; - static _LD_GENERAL: u32; + static LD_NET_: u32; + static LD_GENERAL_: u32; } /// Translate Rust defintions of log domain levels to C. This exposes a 1:1 /// mapping between types. + #[inline] pub unsafe fn translate_domain(domain: LogDomain) -> u32 { match domain { - LogDomain::LdNet => _LD_NET, - LogDomain::LdGeneral => _LD_GENERAL, + LogDomain::Net => LD_NET_, + LogDomain::General => LD_GENERAL_, } } /// Translate Rust defintions of log severity levels to C. This exposes a /// 1:1 mapping between types. + #[inline] pub unsafe fn translate_severity(severity: LogSeverity) -> c_int { match severity { - LogSeverity::Warn => _LOG_WARN, - LogSeverity::Notice => _LOG_NOTICE, + LogSeverity::Warn => LOG_WARN_, + LogSeverity::Notice => LOG_NOTICE_, } } @@ -194,7 +196,7 @@ mod test { fn test_macro() { tor_log_msg!( LogSeverity::Warn, - LogDomain::LdNet, + LogDomain::Net, "test_macro", "test log message {}", "a", @@ -210,11 +212,12 @@ mod test { assert_eq!("test log message a", *message); } + // test multiple inputs into the log message { fn test_macro() { tor_log_msg!( LogSeverity::Warn, - LogDomain::LdNet, + LogDomain::Net, "next_test_macro", "test log message {} {} {} {} {}", 1, @@ -233,5 +236,37 @@ mod test { let message = unsafe { Box::from_raw(LAST_LOGGED_MESSAGE) }; assert_eq!("test log message 1 2 3 4 5", *message); } + + // test how a long log message will be formatted + { + fn test_macro() { + tor_log_msg!( + LogSeverity::Warn, + LogDomain::Net, + "test_macro", + "{}", + "All the world's a stage, and all the men and women \ + merely players: they have their exits and their \ + entrances; and one man in his time plays many parts, his \ + acts being seven ages." + ); + } + + test_macro(); + + let expected_string = "All the world's a \ + stage, and all the men \ + and women merely players: \ + they have their exits and \ + their entrances; and one man \ + in his time plays many parts, \ + his acts being seven ages."; + + let function = unsafe { Box::from_raw(LAST_LOGGED_FUNCTION) }; + assert_eq!("test_macro", *function); + + let message = unsafe { Box::from_raw(LAST_LOGGED_MESSAGE) }; + assert_eq!(expected_string, *message); + } } } diff --git a/src/rust/tor_util/ffi.rs b/src/rust/tor_util/ffi.rs index a9a6cf895c..a803dae26d 100644 --- a/src/rust/tor_util/ffi.rs +++ b/src/rust/tor_util/ffi.rs @@ -16,10 +16,10 @@ use tor_log::{LogSeverity, LogDomain}; /// tor_free(rust_str); /// ``` #[no_mangle] -pub extern "C" fn rust_welcome_string() { +pub extern "C" fn rust_log_welcome_string() { tor_log_msg!( LogSeverity::Notice, - LogDomain::LdGeneral, + LogDomain::General, "rust_welcome_string", "Tor is running with Rust integration. Please report \ any bugs you encounter." |