1 use webrtc_mdns as mdns; 2 3 use mdns::Error; 4 use mdns::{config::*, conn::*}; 5 6 use clap::{App, AppSettings, Arg}; 7 use std::io::Write; 8 use std::net::SocketAddr; 9 use std::str::FromStr; 10 11 // For interop with webrtc-rs/mdns_server 12 // cargo run --color=always --package webrtc-mdns --example mdns_server 13 14 // For interop with pion/mdns_client: 15 // cargo run --color=always --package webrtc-mdns --example mdns_server -- --local-name pion-test.local 16 17 #[tokio::main] 18 async fn main() -> Result<(), Error> { 19 env_logger::Builder::new() 20 .format(|buf, record| { 21 writeln!( 22 buf, 23 "{}:{} [{}] {} - {}", 24 record.file().unwrap_or("unknown"), 25 record.line().unwrap_or(0), 26 record.level(), 27 chrono::Local::now().format("%H:%M:%S.%6f"), 28 record.args() 29 ) 30 }) 31 .filter(None, log::LevelFilter::Trace) 32 .init(); 33 34 let mut app = App::new("mDNS Sever") 35 .version("0.1.0") 36 .author("Rain Liu <[email protected]>") 37 .about("An example of mDNS Sever") 38 .setting(AppSettings::DeriveDisplayOrder) 39 .setting(AppSettings::SubcommandsNegateReqs) 40 .arg( 41 Arg::with_name("FULLHELP") 42 .help("Prints more detailed help information") 43 .long("fullhelp"), 44 ) 45 .arg( 46 Arg::with_name("server") 47 .required_unless("FULLHELP") 48 .takes_value(true) 49 .default_value("0.0.0.0:5353") 50 .long("server") 51 .help("mDNS Server name."), 52 ) 53 .arg( 54 Arg::with_name("local-name") 55 .long("local-name") 56 .takes_value(true) 57 .default_value("webrtc-rs-test.local") 58 .help("Local name"), 59 ); 60 61 let matches = app.clone().get_matches(); 62 63 if matches.is_present("FULLHELP") { 64 app.print_long_help().unwrap(); 65 std::process::exit(0); 66 } 67 68 let server = matches.value_of("server").unwrap(); 69 let local_name = matches.value_of("local-name").unwrap(); 70 71 let server = DnsConn::server( 72 SocketAddr::from_str(server)?, 73 Config { 74 local_names: vec![local_name.to_owned()], 75 ..Default::default() 76 }, 77 ) 78 .unwrap(); 79 80 println!("Press ctlr-c to stop server"); 81 tokio::signal::ctrl_c().await.unwrap(); 82 server.close().await.unwrap(); 83 Ok(()) 84 } 85