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

Method _handle_relayed

chirpstack/src/downlink/tx_ack.rs:135–182  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

133 }
134
135 async fn _handle_relayed(&mut self) -> Result<()> {
136 self.get_phy_payload_relayed()?;
137 self.get_device_data().await?; // the device-data of the relay
138
139 if self.is_error() {
140 // We log the tx ack error under the relay as this is the device to which the downlink
141 // is sent.
142 self.log_tx_ack_error().await?;
143 } else {
144 // First handle the relay frame-counter increment.
145 self.increment_a_f_cnt_down()?;
146 self.save_device_session().await?;
147
148 // Get data of relayed device.
149 self.get_device_data_relayed().await?;
150
151 // Handle end-device frame-counter increment + queue item.
152 if self.is_application_payload_relayed() {
153 self.get_device_queue_item().await?;
154 if self.is_unconfirmed_downlink_relayed() {
155 self.delete_device_queue_item().await?;
156 }
157
158 if self.is_confirmed_downlink_relayed() {
159 self.set_device_queue_item_pending().await?;
160 self.set_device_session_conf_f_cnt_relayed()?;
161 }
162
163 self.increment_a_f_cnt_down_relayed()?;
164 self.save_device_session_relayed().await?;
165
166 // Log tx ack event.
167 self.get_device_data_relayed().await?;
168 self.send_tx_ack_event_relayed().await?;
169 } else if self.is_mac_only_downlink_relayed() {
170 self.increment_n_f_cnt_down_relayed()?;
171 self.save_device_session_relayed().await?;
172 }
173
174 // Log downlink frame and meta-data.
175 // This will log the downlink under the relay as this is the device to which the
176 // downlink is sent.
177 self.log_downlink_frame().await?;
178 self.log_downlink_meta().await?;
179 }
180
181 Ok(())
182 }
183
184 async fn get_downlink_frame(&mut self) -> Result<()> {
185 trace!("Get downlink-frame from Redis");

Callers 1

_handleMethod · 0.45

Tested by

no test coverage detected