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

Method get_join_accept_from_js

chirpstack/src/uplink/join_sns.rs:216–296  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

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);

Callers 1

_start_prMethod · 0.45

Calls 12

get_region_networkFunction · 0.85
unwrapFunction · 0.85
unwrapMethod · 0.80
as_refMethod · 0.80
to_stringMethod · 0.80
join_reqMethod · 0.80
getFunction · 0.50
encodeFunction · 0.50
to_vecMethod · 0.45
to_le_bytesMethod · 0.45
get_cf_listMethod · 0.45
to_bytesMethod · 0.45

Tested by

no test coverage detected