Merge pull request #18 from angelybo/libmdns_linux
Use libdmns on Linux
This commit is contained in:
commit
72f40e0e35
2 changed files with 43 additions and 11 deletions
|
@ -56,6 +56,12 @@ qrcode = { version = "0.12", default-features = false }
|
||||||
[target.'cfg(target_os = "macos")'.dependencies]
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
astro-dnssd = "0.3"
|
astro-dnssd = "0.3"
|
||||||
|
|
||||||
|
# MDNS support
|
||||||
|
[target.'cfg(target_os = "linux")'.dependencies]
|
||||||
|
lazy_static = "1.4.0"
|
||||||
|
# Patched copy of libmdns
|
||||||
|
libmdns = { git = "https://github.com/angelybo/libmdns.git", branch = "return_all_on_query" }
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
name = "onoff_light"
|
name = "onoff_light"
|
||||||
path = "../examples/onoff_light/src/main.rs"
|
path = "../examples/onoff_light/src/main.rs"
|
||||||
|
|
|
@ -16,17 +16,43 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use log::error;
|
use lazy_static::lazy_static;
|
||||||
|
use libmdns::{Responder, Service};
|
||||||
|
use log::info;
|
||||||
|
use std::sync::{Arc, Mutex};
|
||||||
|
use std::vec::Vec;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub struct SysMdnsService {}
|
pub struct SysMdnsService {
|
||||||
|
service: Service,
|
||||||
pub fn sys_publish_service(
|
}
|
||||||
_name: &str,
|
|
||||||
_regtype: &str,
|
lazy_static! {
|
||||||
_port: u16,
|
static ref RESPONDER: Arc<Mutex<Responder>> = Arc::new(Mutex::new(Responder::new().unwrap()));
|
||||||
_txt_kvs: &[[&str; 2]],
|
}
|
||||||
) -> Result<SysMdnsService, Error> {
|
|
||||||
error!("Linux is not yet supported for MDNS Service");
|
/// Publish a mDNS service
|
||||||
Ok(SysMdnsService {})
|
/// name - can be a service name (comma separate subtypes may follow)
|
||||||
|
/// regtype - registration type (e.g. _matter_.tcp etc)
|
||||||
|
/// port - the port
|
||||||
|
pub fn sys_publish_service(
|
||||||
|
name: &str,
|
||||||
|
regtype: &str,
|
||||||
|
port: u16,
|
||||||
|
txt_kvs: &[[&str; 2]],
|
||||||
|
) -> Result<SysMdnsService, Error> {
|
||||||
|
info!("mDNS Registration Type {}", regtype);
|
||||||
|
info!("mDNS properties {:?}", txt_kvs);
|
||||||
|
|
||||||
|
let mut properties = Vec::new();
|
||||||
|
for kvs in txt_kvs {
|
||||||
|
info!("mDNS TXT key {} val {}", kvs[0], kvs[1]);
|
||||||
|
properties.push(format!("{}={}", kvs[0], kvs[1]));
|
||||||
|
}
|
||||||
|
let properties: Vec<&str> = properties.iter().map(|entry| entry.as_str()).collect();
|
||||||
|
|
||||||
|
let responder = RESPONDER.lock().map_err(|_| Error::MdnsError)?;
|
||||||
|
let service = responder.register(regtype.to_owned(), name.to_owned(), port, &properties);
|
||||||
|
|
||||||
|
Ok(SysMdnsService { service })
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue