(&mut self)
| 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( |
no test coverage detected