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]
main() -> Result<(), Error>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