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

Method get_random_dev_addr

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

Source from the content-addressed store, hash-verified

688 }
689
690 async fn get_random_dev_addr(
691 &self,
692 request: Request<api::GetRandomDevAddrRequest>,
693 ) -> Result<Response<api::GetRandomDevAddrResponse>, Status> {
694 let req = request.get_ref();
695
696 let dev_eui = if !req.dev_eui.is_empty() {
697 Some(EUI64::from_str(&req.dev_eui).map_err(|e| e.status())?)
698 } else {
699 None
700 };
701
702 let tenant_id = if !req.tenant_id.is_empty() {
703 Some(Uuid::from_str(&req.tenant_id).map_err(|e| e.status())?)
704 } else {
705 None
706 };
707
708 let t = if let Some(dev_eui) = dev_eui {
709 self.validator
710 .validate(
711 request.extensions(),
712 validator::ValidateDeviceAccess::new(validator::Flag::Read, dev_eui),
713 )
714 .await?;
715
716 tenant::get_for_dev_eui(dev_eui)
717 .await
718 .map_err(|e| e.status())?
719 } else if let Some(tenant_id) = tenant_id {
720 self.validator
721 .validate(
722 request.extensions(),
723 validator::ValidateTenantAccess::new(validator::Flag::Read, tenant_id),
724 )
725 .await?;
726
727 tenant::get(&tenant_id).await.map_err(|e| e.status())?
728 } else {
729 return Err(Status::invalid_argument(
730 "either dev_addr or tenant_id must be set",
731 ));
732 };
733
734 Ok(Response::new(api::GetRandomDevAddrResponse {
735 dev_addr: get_random_dev_addr(&t.get_dev_addr_prefixes()).to_string(),
736 }))
737 }
738
739 async fn get_metrics(
740 &self,

Callers 1

test_deviceFunction · 0.45

Calls 7

get_random_dev_addrFunction · 0.85
statusMethod · 0.80
to_stringMethod · 0.80
get_for_dev_euiFunction · 0.50
getFunction · 0.50
validateMethod · 0.45
get_dev_addr_prefixesMethod · 0.45

Tested by 1

test_deviceFunction · 0.36