(&mut self)
| 214 | } |
| 215 | |
| 216 | async fn get_join_accept_from_js(&mut self) -> Result<()> { |
| 217 | trace!("Getting join-accept from Join Server"); |
| 218 | |
| 219 | let js_client = self.js_client.as_ref().unwrap(); |
| 220 | let jr = self.join_request.as_ref().unwrap(); |
| 221 | let region_network = config::get_region_network(&self.uplink_frame_set.region_config_id)?; |
| 222 | let region_conf = region::get(&self.uplink_frame_set.region_config_id)?; |
| 223 | |
| 224 | let phy_b = self.uplink_frame_set.phy_payload.to_vec()?; |
| 225 | let dp = self.device_profile.as_ref().unwrap(); |
| 226 | let dev = self.device.as_ref().unwrap(); |
| 227 | |
| 228 | // The opt_neg flag is set for devices other than 1.0.x. |
| 229 | let opt_neg = !self |
| 230 | .device_profile |
| 231 | .as_ref() |
| 232 | .unwrap() |
| 233 | .mac_version |
| 234 | .to_string() |
| 235 | .starts_with("1.0"); |
| 236 | |
| 237 | let dl_settings = lrwn::DLSettings { |
| 238 | opt_neg, |
| 239 | rx2_dr: region_network.rx2_dr, |
| 240 | rx1_dr_offset: region_network.rx1_dr_offset, |
| 241 | }; |
| 242 | |
| 243 | let mut join_req_pl = backend::JoinReqPayload { |
| 244 | mac_version: dp.mac_version.to_string(), |
| 245 | phy_payload: phy_b, |
| 246 | dev_eui: dev.dev_eui.to_vec(), |
| 247 | dev_addr: self.dev_addr.unwrap().to_vec(), |
| 248 | dl_settings: dl_settings.to_le_bytes()?.to_vec(), |
| 249 | rx_delay: region_network.rx1_delay, |
| 250 | cf_list: match region_conf.get_cf_list(dp.mac_version) { |
| 251 | Some(v) => v.to_bytes()?.to_vec(), |
| 252 | None => Vec::new(), |
| 253 | }, |
| 254 | ..Default::default() |
| 255 | }; |
| 256 | |
| 257 | let join_ans_pl = js_client |
| 258 | .join_req(jr.join_eui.to_vec(), &mut join_req_pl, None) |
| 259 | .await?; |
| 260 | |
| 261 | if let Some(v) = &join_ans_pl.app_s_key { |
| 262 | self.app_s_key = Some(common::KeyEnvelope { |
| 263 | kek_label: v.kek_label.clone(), |
| 264 | aes_key: v.aes_key.clone(), |
| 265 | }); |
| 266 | } |
| 267 | self.js_session_key_id = hex::encode(join_ans_pl.session_key_id); |
| 268 | |
| 269 | if let Some(v) = &join_ans_pl.nwk_s_key { |
| 270 | let key = keywrap::unwrap(v).context("Unwrap nwk_s_key")?; |
| 271 | self.s_nwk_s_int_key = Some(key); |
| 272 | self.f_nwk_s_int_key = Some(key); |
| 273 | self.nwk_s_enc_key = Some(key); |
no test coverage detected