MCPcopy Create free account
hub / github.com/chirpstack/chirpstack / get_device_for_phy_payload_relayed

Method get_device_for_phy_payload_relayed

chirpstack/src/uplink/data.rs:281–342  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

279 }
280
281 async fn get_device_for_phy_payload_relayed(&mut self) -> Result<(), Error> {
282 trace!("Getting device for PhyPayload (relayed)");
283
284 let relay_ctx = self.relay_context.as_ref().unwrap();
285
286 let dev_addr = if let lrwn::Payload::MACPayload(pl) = &self.phy_payload.payload {
287 pl.fhdr.devaddr
288 } else {
289 return Err(Error::Anyhow(anyhow!("No MacPayload in PhyPayload")));
290 };
291
292 let dr = relay_ctx.req.metadata.dr;
293 let ch = helpers::get_uplink_ch(
294 &self.uplink_frame_set.region_config_id,
295 relay_ctx.req.frequency,
296 dr,
297 )? as u8;
298
299 match device::get_for_phypayload_and_incr_f_cnt_up(
300 &self.uplink_frame_set.region_config_id,
301 true,
302 &mut self.phy_payload,
303 dr,
304 ch,
305 )
306 .await
307 {
308 Ok(v) => match v {
309 device::ValidationStatus::Ok(f_cnt, d) => {
310 self.device = Some(d);
311 self.f_cnt_up_full = f_cnt;
312 }
313 device::ValidationStatus::Retransmission(f_cnt, d) => {
314 self.retransmission = true;
315 self.device = Some(d);
316 self.f_cnt_up_full = f_cnt;
317 }
318 device::ValidationStatus::Reset(f_cnt, d) => {
319 self.reset = true;
320 self.device = Some(d);
321 self.f_cnt_up_full = f_cnt;
322 }
323 },
324 Err(e) => match e {
325 StorageError::NotFound(s) => {
326 info!(dev_addr = %s, "No device-session exists for dev_addr");
327 return Err(Error::Abort);
328 }
329 StorageError::InvalidMIC => {
330 info!(dev_addr = %dev_addr, "None of the device-sessions for dev_addr resulted in valid MIC");
331 return Err(Error::Abort);
332 }
333 _ => {
334 return Err(Error::Anyhow(
335 anyhow::Error::new(e).context("Get device-session"),
336 ));
337 }
338 },

Callers 1

_handle_relayedMethod · 0.80

Calls 4

get_uplink_chFunction · 0.85
unwrapMethod · 0.80
as_refMethod · 0.80

Tested by

no test coverage detected