61 lines
1.7 KiB
Rust
61 lines
1.7 KiB
Rust
use std::thread;
|
|
use std::time::Duration;
|
|
|
|
use pmoupnp::ssdp::{SsdpClient, SsdpEvent};
|
|
|
|
fn main() -> std::io::Result<()> {
|
|
tracing_subscriber::fmt::init();
|
|
tracing::info!("Starting raw SSDP dump helper...");
|
|
|
|
let client = SsdpClient::new()?;
|
|
|
|
// Envoie quelques requêtes M-SEARCH ciblées pour accélérer les réponses.
|
|
let search_targets = [
|
|
"ssdp:all",
|
|
"urn:schemas-upnp-org:device:MediaRenderer:1",
|
|
"urn:av-openhome-org:device:MediaRenderer:1",
|
|
"urn:schemas-upnp-org:device:MediaServer:1",
|
|
"urn:schemas-wiimu-com:service:PlayQueue:1",
|
|
];
|
|
for st in &search_targets {
|
|
if let Err(err) = client.send_msearch(st, 3) {
|
|
eprintln!("Failed to send M-SEARCH for {}: {}", st, err);
|
|
}
|
|
thread::sleep(Duration::from_millis(200));
|
|
}
|
|
|
|
println!("Listening for SSDP events. Press Ctrl+C to stop.");
|
|
|
|
client.run_event_loop(|event| match event {
|
|
SsdpEvent::Alive {
|
|
usn,
|
|
nt,
|
|
location,
|
|
server,
|
|
max_age,
|
|
from,
|
|
} => {
|
|
println!(
|
|
"[ALIVE] from={} usn={} nt={} location={} server={} max_age={}",
|
|
from, usn, nt, location, server, max_age
|
|
);
|
|
}
|
|
SsdpEvent::SearchResponse {
|
|
usn,
|
|
st,
|
|
location,
|
|
server,
|
|
max_age,
|
|
from,
|
|
} => {
|
|
println!(
|
|
"[SEARCH RESPONSE] from={} usn={} st={} location={} server={} max_age={}",
|
|
from, usn, st, location, server, max_age
|
|
);
|
|
}
|
|
SsdpEvent::ByeBye { usn, nt, from } => {
|
|
println!("[BYEBYE] from={} usn={} nt={}", from, usn, nt);
|
|
}
|
|
})
|
|
}
|