mdns: Discriminator is a property of the 'commissionable' state
This commit is contained in:
parent
b74d626efc
commit
98fccca392
3 changed files with 22 additions and 15 deletions
|
@ -62,7 +62,7 @@ impl Matter {
|
|||
dev_comm: &CommissioningData,
|
||||
) -> Result<Box<Matter>, Error> {
|
||||
let mdns = Mdns::get()?;
|
||||
mdns.set_values(dev_det.vid, dev_det.pid, dev_comm.discriminator);
|
||||
mdns.set_values(dev_det.vid, dev_det.pid);
|
||||
|
||||
let fabric_mgr = Arc::new(FabricMgr::new()?);
|
||||
let acl_mgr = Arc::new(AclMgr::new()?);
|
||||
|
@ -78,7 +78,11 @@ impl Matter {
|
|||
matter.transport_mgr.register_protocol(interaction_model)?;
|
||||
let mut secure_channel = Box::new(SecureChannel::new(matter.fabric_mgr.clone()));
|
||||
if open_comm_window {
|
||||
secure_channel.open_comm_window(&dev_comm.salt, dev_comm.passwd)?;
|
||||
secure_channel.open_comm_window(
|
||||
&dev_comm.salt,
|
||||
dev_comm.passwd,
|
||||
dev_comm.discriminator,
|
||||
)?;
|
||||
}
|
||||
|
||||
matter.transport_mgr.register_protocol(secure_channel)?;
|
||||
|
|
|
@ -30,8 +30,6 @@ pub struct MdnsInner {
|
|||
vid: u16,
|
||||
/// Product ID
|
||||
pid: u16,
|
||||
/// Discriminator
|
||||
discriminator: u16,
|
||||
}
|
||||
|
||||
pub struct Mdns {
|
||||
|
@ -46,8 +44,10 @@ static INIT: Once = Once::new();
|
|||
|
||||
#[derive(Clone, Copy)]
|
||||
pub enum ServiceMode {
|
||||
/// The commissioned state
|
||||
Commissioned,
|
||||
Commissionable,
|
||||
/// The commissionable state with the discriminator that should be used
|
||||
Commissionable(u16),
|
||||
}
|
||||
|
||||
impl Mdns {
|
||||
|
@ -72,11 +72,10 @@ impl Mdns {
|
|||
/// Set mDNS service specific values
|
||||
/// Values like vid, pid, discriminator etc
|
||||
// TODO: More things like device-type etc can be added here
|
||||
pub fn set_values(&self, vid: u16, pid: u16, discriminator: u16) {
|
||||
pub fn set_values(&self, vid: u16, pid: u16) {
|
||||
let mut inner = self.inner.lock().unwrap();
|
||||
inner.vid = vid;
|
||||
inner.pid = pid;
|
||||
inner.discriminator = discriminator;
|
||||
}
|
||||
|
||||
/// Publish a mDNS service
|
||||
|
@ -87,13 +86,11 @@ impl Mdns {
|
|||
ServiceMode::Commissioned => {
|
||||
sys_publish_service(name, "_matter._tcp", MATTER_PORT, &[])
|
||||
}
|
||||
ServiceMode::Commissionable => {
|
||||
let inner = self.inner.lock().unwrap();
|
||||
let short =
|
||||
(inner.discriminator & SHORT_DISCRIMINATOR_MASK) >> SHORT_DISCRIMINATOR_SHIFT;
|
||||
let serv_type = format!("_matterc._udp,_S{},_L{}", short, inner.discriminator);
|
||||
ServiceMode::Commissionable(discriminator) => {
|
||||
let short = (discriminator & SHORT_DISCRIMINATOR_MASK) >> SHORT_DISCRIMINATOR_SHIFT;
|
||||
let serv_type = format!("_matterc._udp,_S{},_L{}", short, discriminator);
|
||||
|
||||
let str_discriminator = format!("{}", inner.discriminator);
|
||||
let str_discriminator = format!("{}", discriminator);
|
||||
let txt_kvs = [["D", &str_discriminator], ["CM", "1"]];
|
||||
sys_publish_service(name, &serv_type, MATTER_PORT, &txt_kvs)
|
||||
}
|
||||
|
|
|
@ -48,10 +48,16 @@ impl SecureChannel {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn open_comm_window(&mut self, salt: &[u8; 16], passwd: u32) -> Result<(), Error> {
|
||||
pub fn open_comm_window(
|
||||
&mut self,
|
||||
salt: &[u8; 16],
|
||||
passwd: u32,
|
||||
discriminator: u16,
|
||||
) -> Result<(), Error> {
|
||||
let name: u64 = rand::thread_rng().gen_range(0..0xFFFFFFFFFFFFFFFF);
|
||||
let name = format!("{:016X}", name);
|
||||
let mdns = Mdns::get()?.publish_service(&name, mdns::ServiceMode::Commissionable)?;
|
||||
let mdns = Mdns::get()?
|
||||
.publish_service(&name, mdns::ServiceMode::Commissionable(discriminator))?;
|
||||
self.pake = Some((PAKE::new(salt, passwd), mdns));
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue