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

Method start_pr_session

chirpstack/src/uplink/data_fns.rs:161–230  ·  view source on GitHub ↗
(
        &self,
        net_id: NetID,
    )

Source from the content-addressed store, hash-verified

159 }
160
161 async fn start_pr_session(
162 &self,
163 net_id: NetID,
164 ) -> Result<internal::PassiveRoamingDeviceSession> {
165 info!(net_id = %net_id, dev_addr = %self.mac_payload.fhdr.devaddr, "Starting passive-roaming session");
166 let rf_region = self
167 .uplink_frame_set
168 .region_common_name
169 .to_string()
170 .replace('_', "-");
171
172 let mut pr_req = backend::PRStartReqPayload {
173 phy_payload: self.uplink_frame_set.phy_payload.to_vec()?,
174 ul_meta_data: backend::ULMetaData {
175 ul_freq: Some((self.uplink_frame_set.tx_info.frequency as f64) / 1_000_000.0),
176 data_rate: Some(self.uplink_frame_set.dr),
177 recv_time: helpers::get_rx_timestamp_chrono(&self.uplink_frame_set.rx_info_set),
178 rf_region: rf_region.clone(),
179 gw_cnt: Some(self.uplink_frame_set.rx_info_set.len()),
180 gw_info: roaming::rx_info_to_gw_info(
181 &rf_region,
182 &self.uplink_frame_set.rx_info_set,
183 )?,
184 ..Default::default()
185 },
186 ..Default::default()
187 };
188
189 #[cfg(test)]
190 {
191 pr_req.base.transaction_id = 1234;
192 }
193
194 let client = roaming::get(&net_id).await?;
195 let async_receiver = match client.is_async() {
196 false => None,
197 true => Some(
198 get_async_receiver(pr_req.base.transaction_id, client.get_async_timeout()).await?,
199 ),
200 };
201
202 let pr_start_ans = client
203 .pr_start_req(backend::Role::SNS, &mut pr_req, async_receiver)
204 .await?;
205 let sess_id = Uuid::new_v4();
206
207 Ok(internal::PassiveRoamingDeviceSession {
208 session_id: sess_id.as_bytes().to_vec(),
209 net_id: net_id.to_vec(),
210 dev_addr: self.mac_payload.fhdr.devaddr.to_vec(),
211 validate_mic: roaming::get_passive_roaming_validate_mic(net_id)?,
212 lifetime: {
213 let lt = pr_start_ans.lifetime.unwrap_or_default() as i64;
214 if lt == 0 {
215 None
216 } else {
217 Some((Utc::now() + Duration::try_seconds(lt).unwrap_or_default()).into())
218 }

Callers 1

start_pr_sessionsMethod · 0.80

Calls 12

get_rx_timestamp_chronoFunction · 0.85
rx_info_to_gw_infoFunction · 0.85
get_async_receiverFunction · 0.85
unwrapFunction · 0.85
to_stringMethod · 0.80
is_asyncMethod · 0.80
get_async_timeoutMethod · 0.80
pr_start_reqMethod · 0.80
getFunction · 0.50
to_vecMethod · 0.45
intoMethod · 0.45

Tested by

no test coverage detected