#![allow(dead_code)]
use std::io::{Read, Write};
use std::net::TcpListener;
use std::sync::mpsc;
use std::sync::mpsc::{Receiver, RecvTimeoutError};
use std::time::Duration;
pub fn spawn_capture_server() -> (String, mpsc::Receiver<bool>) {
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
let addr = listener.local_addr().unwrap();
let base = format!("http://{}", addr);
let (tx, rx) = mpsc::channel();
std::thread::spawn(move || {
for stream in listener.incoming() {
let Ok(mut stream) = stream else { continue };
stream
.set_read_timeout(Some(Duration::from_millis(500)))
.ok();
let mut buf = [0u8; 4096];
let got = matches!(stream.read(&mut buf), Ok(n) if n > 0);
let _ = stream
.write_all(b"HTTP/1.1 200 OK\r\nContent-Length: 0\r\nConnection: close\r\n\r\n");
if got {
let _ = tx.send(true);
}
}
});
(base, rx)
}
pub fn recv_telemetry(rx: &Receiver<bool>, timeout: Duration) -> bool {
match rx.recv_timeout(timeout) {
Ok(v) => v,
Err(RecvTimeoutError::Timeout) => false,
Err(RecvTimeoutError::Disconnected) => {
panic!("capture-server thread disconnected — harness failure, not a telemetry signal")
}
}
}