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

Method get_device_for_phy_payload

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

Source from the content-addressed store, hash-verified

219 }
220
221 async fn get_device_for_phy_payload(&mut self) -> Result<(), Error> {
222 trace!("Getting device for PhyPayload");
223
224 let dev_addr = if let lrwn::Payload::MACPayload(pl) = &self.phy_payload.payload {
225 pl.fhdr.devaddr
226 } else {
227 return Err(Error::Anyhow(anyhow!("No MacPayload in PhyPayload")));
228 };
229
230 match device::get_for_phypayload_and_incr_f_cnt_up(
231 &self.uplink_frame_set.region_config_id,
232 false,
233 &mut self.phy_payload,
234 self.uplink_frame_set.dr,
235 self.uplink_frame_set.ch as u8,
236 )
237 .await
238 {
239 Ok(v) => match v {
240 device::ValidationStatus::Ok(f_cnt, d) => {
241 self.device = Some(d);
242 self.f_cnt_up_full = f_cnt;
243 }
244 device::ValidationStatus::Retransmission(f_cnt, d) => {
245 self.retransmission = true;
246 self.device = Some(d);
247 self.f_cnt_up_full = f_cnt;
248 }
249 device::ValidationStatus::Reset(f_cnt, d) => {
250 self.reset = true;
251 self.device = Some(d);
252 self.f_cnt_up_full = f_cnt;
253 }
254 },
255 Err(e) => match e {
256 StorageError::NotFound(s) => {
257 info!(dev_addr = %s, "No device-session exists for dev_addr");
258 return Err(Error::Abort);
259 }
260 StorageError::InvalidMIC => {
261 info!(dev_addr = %dev_addr, "None of the device-sessions for dev_addr resulted in valid MIC");
262
263 // Log uplink for null DevEUI.
264 let mut ufl: stream_pb::UplinkFrameLog = (&self.uplink_frame_set).try_into()?;
265 ufl.dev_eui = "0000000000000000".to_string();
266 stream::frame::log_uplink_for_device(&ufl).await?;
267
268 return Err(Error::Abort);
269 }
270 _ => {
271 return Err(Error::Anyhow(
272 anyhow::Error::new(e).context("Get device-session"),
273 ));
274 }
275 },
276 };
277
278 Ok(())

Callers 1

_handleMethod · 0.80

Calls 3

log_uplink_for_deviceFunction · 0.85
to_stringMethod · 0.80

Tested by

no test coverage detected