(&mut self)
| 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(()) |
no test coverage detected