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

Method activate

chirpstack/src/api/device.rs:499–581  ·  view source on GitHub ↗
(
        &self,
        request: Request<api::ActivateDeviceRequest>,
    )

Source from the content-addressed store, hash-verified

497 }
498
499 async fn activate(
500 &self,
501 request: Request<api::ActivateDeviceRequest>,
502 ) -> Result<Response<()>, Status> {
503 let req_da = match &request.get_ref().device_activation {
504 Some(v) => v,
505 None => {
506 return Err(Status::invalid_argument("device_activation is missing"));
507 }
508 };
509
510 let dev_eui = EUI64::from_str(&req_da.dev_eui).map_err(|e| e.status())?;
511
512 self.validator
513 .validate(
514 request.extensions(),
515 validator::ValidateDeviceAccess::new(validator::Flag::Update, dev_eui),
516 )
517 .await?;
518
519 let d = device::get(&dev_eui).await.map_err(|e| e.status())?;
520 let dp = device_profile::get(&d.device_profile_id)
521 .await
522 .map_err(|e| e.status())?;
523
524 let dev_addr = DevAddr::from_str(&req_da.dev_addr).map_err(|e| e.status())?;
525 let s_nwk_s_int_key =
526 AES128Key::from_str(&req_da.s_nwk_s_int_key).map_err(|e| e.status())?;
527 let f_nwk_s_int_key =
528 AES128Key::from_str(&req_da.f_nwk_s_int_key).map_err(|e| e.status())?;
529 let nwk_s_enc_key = AES128Key::from_str(&req_da.nwk_s_enc_key).map_err(|e| e.status())?;
530 let app_s_key = AES128Key::from_str(&req_da.app_s_key).map_err(|e| e.status())?;
531
532 let mut ds = internal::DeviceSession {
533 region_config_id: "".to_string(),
534 dev_addr: dev_addr.to_vec(),
535 mac_version: dp.mac_version.to_proto().into(),
536 s_nwk_s_int_key: s_nwk_s_int_key.to_vec(),
537 f_nwk_s_int_key: f_nwk_s_int_key.to_vec(),
538 nwk_s_enc_key: nwk_s_enc_key.to_vec(),
539 app_s_key: Some(common::KeyEnvelope {
540 kek_label: "".into(),
541 aes_key: app_s_key.to_vec(),
542 }),
543 n_f_cnt_down: req_da.n_f_cnt_down,
544 a_f_cnt_down: req_da.a_f_cnt_down,
545 skip_f_cnt_check: d.skip_fcnt_check,
546 ..Default::default()
547 };
548 dp.reset_session_to_boot_params(&mut ds);
549
550 let mut device_changeset = device::DeviceChangeset {
551 device_session: Some(Some(ds.into())),
552 dev_addr: Some(Some(dev_addr)),
553 secondary_dev_addr: Some(None),
554 f_cnt_up: Some(req_da.f_cnt_up as i64),
555 ..Default::default()
556 };

Callers 3

test_deviceFunction · 0.80
DeviceStoreClass · 0.80
onFinishFunction · 0.80

Calls 12

flush_for_dev_euiFunction · 0.85
statusMethod · 0.80
to_stringMethod · 0.80
to_protoMethod · 0.80
insertMethod · 0.80
unwrapMethod · 0.80
getFunction · 0.50
partial_updateFunction · 0.50
validateMethod · 0.45
to_vecMethod · 0.45
intoMethod · 0.45

Tested by 1

test_deviceFunction · 0.64