@@ -24,6 +24,7 @@ use std::time::Duration;
2424use tokio:: time:: { interval_at, Instant } ;
2525use tokio_fd:: AsyncFd ;
2626
27+ use crate :: smartdns:: * ;
2728use hyper_tungstenite:: { tungstenite, HyperWebsocket } ;
2829use nix:: errno:: Errno ;
2930use nix:: libc:: * ;
@@ -41,6 +42,23 @@ type Error = Box<dyn std::error::Error + Send + Sync + 'static>;
4142const LOG_CONTROL_MESSAGE_TYPE : u8 = 1 ;
4243const LOG_CONTROL_PAUSE : u8 = 1 ;
4344const LOG_CONTROL_RESUME : u8 = 2 ;
45+ const LOG_CONTROL_LOGLEVEL : u8 = 3 ;
46+
47+ struct LogLevelGuard {
48+ old_log_level : LogLevel ,
49+ }
50+
51+ impl Drop for LogLevelGuard {
52+ fn drop ( & mut self ) {
53+ dns_log_set_level ( self . old_log_level ) ;
54+ }
55+ }
56+ impl LogLevelGuard {
57+ fn new ( ) -> Self {
58+ let old_log_level = dns_log_get_level ( ) ;
59+ LogLevelGuard { old_log_level }
60+ }
61+ }
4462
4563pub async fn serve_log_stream (
4664 http_server : Arc < HttpServer > ,
@@ -51,6 +69,9 @@ pub async fn serve_log_stream(
5169
5270 let data_server = http_server. get_data_server ( ) ;
5371 let mut log_stream = data_server. get_log_stream ( ) . await ;
72+
73+ let _log_guard = LogLevelGuard :: new ( ) ;
74+
5475 loop {
5576 tokio:: select! {
5677 msg = log_stream. recv( ) => {
@@ -99,6 +120,33 @@ pub async fn serve_log_stream(
99120 is_pause = false ;
100121 continue ;
101122 }
123+ LOG_CONTROL_LOGLEVEL => {
124+ if msg. len( ) < 6 {
125+ continue ;
126+ }
127+
128+ let level_msg = & msg[ 2 ..2 + msg. len( ) - 2 ] ;
129+ let str_log_level = std:: str :: from_utf8( level_msg) ;
130+ if str_log_level. is_err( ) {
131+ continue ;
132+ }
133+
134+ let str_log_level = str_log_level. unwrap( ) ;
135+ if str_log_level. len( ) == 0 {
136+ continue ;
137+ }
138+
139+ let str_log_level = str_log_level. to_lowercase( ) ;
140+ let str_log_level = str_log_level. as_str( ) ;
141+
142+ let log_level = str_log_level. try_into( ) ;
143+ if log_level. is_err( ) {
144+ continue ;
145+ }
146+
147+ let log_level = log_level. unwrap( ) ;
148+ dns_log_set_level( log_level) ;
149+ }
102150 _ => {
103151 continue ;
104152 }
0 commit comments