(&mut self)
| 262 | } |
| 263 | |
| 264 | async fn get_device_data_or_try_pr_roaming(&mut self) -> Result<()> { |
| 265 | trace!("Getting device"); |
| 266 | let jr = self.join_request.as_ref().unwrap(); |
| 267 | let (dev, app, t, dp) = match get_all_device_data(jr.dev_eui).await { |
| 268 | Ok(v) => v, |
| 269 | Err(e) => { |
| 270 | if let StorageError::NotFound(_) = e { |
| 271 | if !roaming::is_enabled() { |
| 272 | warn!(dev_eui = %jr.dev_eui, "Unknown device"); |
| 273 | return Err(anyhow::Error::new(Error::Abort)); |
| 274 | } |
| 275 | |
| 276 | info!(dev_eui = %jr.dev_eui, join_eui = %jr.join_eui, "Unknown device, trying passive-roaming activation"); |
| 277 | join_fns::JoinRequest::start_pr(self.uplink_frame_set.clone(), *jr).await?; |
| 278 | return Err(anyhow::Error::new(Error::Abort)); |
| 279 | } else { |
| 280 | return Err(anyhow::Error::new(e)); |
| 281 | } |
| 282 | } |
| 283 | }; |
| 284 | |
| 285 | if dp.region != self.uplink_frame_set.region_common_name { |
| 286 | return Err(anyhow!("Invalid device-profile region")); |
| 287 | } |
| 288 | |
| 289 | self.tenant = Some(t); |
| 290 | self.application = Some(app); |
| 291 | self.device_profile = Some(dp); |
| 292 | self.device = Some(dev); |
| 293 | |
| 294 | Ok(()) |
| 295 | } |
| 296 | |
| 297 | fn set_device_info(&mut self) -> Result<()> { |
| 298 | let tenant = self.tenant.as_ref().unwrap(); |
no test coverage detected