Skip to content

Commit

Permalink
Update to udp discovery xml
Browse files Browse the repository at this point in the history
  • Loading branch information
QuantumEntangledAndy committed Apr 5, 2024
1 parent c0a6123 commit 9187694
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 18 deletions.
22 changes: 14 additions & 8 deletions crates/core/src/bc_protocol/connection/discovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -421,19 +421,24 @@ impl Discoverer {
}),
};
trace!("Sending look up {:?}", msg);
let (packet, _) = self
let (reg, relay, _) = self
.retry_send(msg, addr, |bc, addr| match bc {
UdpDiscovery {
tid: _,
payload: UdpXml::M2cQr(m2c_q_r),
} if valid_addr(&m2c_q_r.reg) => Some((m2c_q_r, addr)),
payload:
UdpXml::M2cQr(M2cQr {
reg: Some(reg),
relay: Some(relay),
..
}),
} if valid_addr(&reg) && valid_addr(&relay) => Some((reg, relay, addr)),
_ => None,
})
.await?;
trace!("Look up complete");
Ok(UidLookupResults {
reg: SocketAddr::new(packet.reg.ip.parse()?, packet.reg.port),
relay: SocketAddr::new(packet.relay.ip.parse()?, packet.relay.port),
reg: SocketAddr::new(reg.ip.parse()?, reg.port),
relay: SocketAddr::new(relay.ip.parse()?, relay.port),
})
}

Expand Down Expand Up @@ -489,14 +494,15 @@ impl Discoverer {
dmap,
dev,
relay,
sid,
sid: Some(sid),
rsp,
..
}),
} if (dev.as_ref().map(valid_addr).unwrap_or(false)
|| dmap.as_ref().map(valid_addr).unwrap_or(false)
|| relay.as_ref().map(valid_addr).unwrap_or(false))
&& rsp != -1 =>
&& rsp != -1
&& rsp != -3 =>
{
Some(Ok((sid, dev, dmap, relay)))
}
Expand Down Expand Up @@ -544,7 +550,7 @@ impl Discoverer {
} if (dev.as_ref().map(valid_addr).unwrap_or(false)
|| dmap.as_ref().map(valid_addr).unwrap_or(false)
|| relay.as_ref().map(valid_addr).unwrap_or(false))
&& rsp == -1 =>
&& (rsp == -1 || rsp == -3) =>
{
Some(Err(Error::RegisterError))
}
Expand Down
27 changes: 17 additions & 10 deletions crates/core/src/bcudp/xml.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ pub struct ClientList {
pub struct D2cCr {
/// Called timer but not sure what it is a timer of
pub timer: Timer,
/// Unknown
/// Unknown seems to be 0 on success and -3 on fail
pub rsp: u32,
/// Client ID
pub cid: i32,
Expand Down Expand Up @@ -237,13 +237,17 @@ pub struct C2mQ {
#[derive(PartialEq, Eq, Default, Debug, Deserialize, Serialize, Clone)]
pub struct M2cQr {
/// The register server location
pub reg: IpPort,
#[serde(skip_serializing_if = "Option::is_none")]
pub reg: Option<IpPort>,
/// The relay server location
pub relay: IpPort,
#[serde(skip_serializing_if = "Option::is_none")]
pub relay: Option<IpPort>,
/// The log server location
pub log: IpPort,
#[serde(skip_serializing_if = "Option::is_none")]
pub log: Option<IpPort>,
/// The camera location
pub t: IpPort,
#[serde(skip_serializing_if = "Option::is_none")]
pub t: Option<IpPort>,
}

/// Used as part of M2C_Q_R to provide the host and port
Expand Down Expand Up @@ -328,11 +332,14 @@ pub struct R2cCr {
/// The location of the relay
#[serde(skip_serializing_if = "Option::is_none")]
pub relay: Option<IpPort>,
/// The location of the relayt (not sure what the t is for)
#[serde(skip_serializing_if = "Option::is_none")]
pub relayt: Option<IpPort>,
/// The nat type. Known values `"NULL"`
pub nat: String,
/// The camera SID
pub sid: u32,
/// rsp. Known values `0`
/// The camera SID, missing when rsp is `-3`
pub sid: Option<u32>,
/// rsp. Known values `0`, `-3, seems to be 0 on success and -3 on fail`
pub rsp: i32,
/// ac. Known values. `127536491`
pub ac: u32,
Expand All @@ -347,7 +354,7 @@ pub struct D2cCfm {
pub sid: u32,
/// Type of connection observed values are `"local"`
pub conn: String,
/// Unknown known values are `0`
/// Unknown known values are `0`, `-3, seems to be 0 on success and -3 on fail`
pub rsp: u32,
/// The client connection ID
pub cid: i32,
Expand All @@ -366,7 +373,7 @@ pub struct C2rCfm {
pub sid: u32,
/// Type of connection observed values are `"local"`
pub conn: String,
/// Unknown known values are `0`
/// Unknown known values are `0`, `-3, seems to be 0 on success and -3 on fail`
pub rsp: u32,
/// The client connection ID
pub cid: i32,
Expand Down

0 comments on commit 9187694

Please sign in to comment.