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

Method send_uplink_event

chirpstack/src/uplink/data.rs:898–984  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

896 }
897
898 async fn send_uplink_event(&mut self) -> Result<()> {
899 trace!("Sending uplink event");
900
901 let ts: DateTime<Utc> =
902 helpers::get_rx_timestamp(&self.uplink_frame_set.rx_info_set).into();
903 let app = self.application.as_ref().unwrap();
904 let dp = self.device_profile.as_ref().unwrap();
905 let dev = self.device.as_ref().unwrap();
906 let ds = dev.get_device_session()?;
907 let mac = if let lrwn::Payload::MACPayload(pl) = &self.phy_payload.payload {
908 pl
909 } else {
910 return Err(anyhow!("Expected MacPayload"));
911 };
912
913 let mut pl = integration_pb::UplinkEvent {
914 deduplication_id: self.uplink_frame_set.uplink_set_id.to_string(),
915 time: Some(ts.into()),
916 device_info: self.device_info.clone(),
917 relay_rx_info: self.relay_rx_info.clone(),
918 dev_addr: mac.fhdr.devaddr.to_string(),
919 adr: mac.fhdr.f_ctrl.adr,
920 dr: self.uplink_frame_set.dr as u32,
921 f_cnt: self.f_cnt_up_full,
922 f_port: mac.f_port.unwrap_or(0) as u32,
923 confirmed: self.phy_payload.mhdr.f_type == lrwn::FType::ConfirmedDataUp,
924 data: match &mac.frm_payload {
925 Some(lrwn::FRMPayload::Raw(b)) => b.clone(),
926 _ => Vec::new(),
927 },
928 object: None,
929 rx_info: self.uplink_frame_set.rx_info_set.clone(),
930 tx_info: Some(self.uplink_frame_set.tx_info.clone()),
931 join_server_context: if self._is_end_to_end_encrypted() {
932 Some(common::JoinServerContext {
933 session_key_id: hex::encode(&ds.js_session_key_id),
934 app_s_key: ds.app_s_key.clone(),
935 })
936 } else {
937 None
938 },
939 region_config_id: self.uplink_frame_set.region_config_id.clone(),
940 };
941
942 if !self._is_end_to_end_encrypted() {
943 pl.object = match codec::binary_to_struct(
944 dp.payload_codec_runtime,
945 ts,
946 mac.f_port.unwrap_or(0),
947 &dev.variables,
948 &dp.payload_codec_script,
949 &pl.data,
950 )
951 .await
952 {
953 Ok(v) => v,
954 Err(e) => {
955 integration::log_event(

Callers 2

_handleMethod · 0.80
_handle_relayedMethod · 0.80

Calls 12

get_rx_timestampFunction · 0.85
binary_to_structFunction · 0.85
unwrapMethod · 0.80
as_refMethod · 0.80
get_device_sessionMethod · 0.80
to_stringMethod · 0.80
iterMethod · 0.80
encodeFunction · 0.50
log_eventFunction · 0.50
uplink_eventFunction · 0.50
intoMethod · 0.45

Tested by

no test coverage detected