From 864e8ea394de6c5d9a3ebc7bc5140a5789be4e55 Mon Sep 17 00:00:00 2001 From: "hinto.janai" <hinto.janai@protonmail.com> Date: Mon, 25 Dec 2023 09:45:55 -0500 Subject: [PATCH] helper: strip ANSI escape sequences at beginning of PTY start --- src/helper.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/helper.rs b/src/helper.rs index ababd9b..2666307 100644 --- a/src/helper.rs +++ b/src/helper.rs @@ -271,6 +271,18 @@ impl Helper { fn read_pty_xmrig(output_parse: Arc<Mutex<String>>, output_pub: Arc<Mutex<String>>, reader: Box<dyn std::io::Read + Send>) { use std::io::BufRead; let mut stdout = std::io::BufReader::new(reader).lines(); + + // Run a ANSI escape sequence filter for the first few lines. + for (i, line) in stdout.next().enumerate() { + let Some(Ok(line)) = line else { continue; } + let line = strip_ansi_escapes::strip_str(line); + if let Err(e) = writeln!(lock!(output_parse), "{}", line) { error!("XMRig PTY Parse | Output error: {}", e); } + if let Err(e) = writeln!(lock!(output_pub), "{}", line) { error!("XMRig PTY Pub | Output error: {}", e); } + if i > 20 { + break; + } + } + while let Some(Ok(line)) = stdout.next() { // println!("{}", line); // For debugging. if let Err(e) = writeln!(lock!(output_parse), "{}", line) { error!("XMRig PTY Parse | Output error: {}", e); } @@ -281,6 +293,18 @@ impl Helper { fn read_pty_p2pool(output_parse: Arc<Mutex<String>>, output_pub: Arc<Mutex<String>>, reader: Box<dyn std::io::Read + Send>, gupax_p2pool_api: Arc<Mutex<GupaxP2poolApi>>) { use std::io::BufRead; let mut stdout = std::io::BufReader::new(reader).lines(); + + // Run a ANSI escape sequence filter for the first few lines. + for (i, line) in stdout.next().enumerate() { + let Some(Ok(line)) = line else { continue; } + let line = strip_ansi_escapes::strip_str(line); + if let Err(e) = writeln!(lock!(output_parse), "{}", line) { error!("P2Pool PTY Parse | Output error: {}", e); } + if let Err(e) = writeln!(lock!(output_pub), "{}", line) { error!("P2Pool PTY Pub | Output error: {}", e); } + if i > 20 { + break; + } + } + while let Some(Ok(line)) = stdout.next() { // println!("{}", line); // For debugging. if P2POOL_REGEX.payout.is_match(&line) {