(relay_ctx: RelayContext, ufs: UplinkFrameSet)
| 144 | } |
| 145 | |
| 146 | async fn _handle_relayed(relay_ctx: RelayContext, ufs: UplinkFrameSet) -> Result<()> { |
| 147 | let mut ctx = JoinRequest { |
| 148 | uplink_frame_set: ufs, |
| 149 | relay_context: Some(relay_ctx), |
| 150 | js_client: None, |
| 151 | join_request: None, |
| 152 | device: None, |
| 153 | application: None, |
| 154 | tenant: None, |
| 155 | device_profile: None, |
| 156 | device_keys: None, |
| 157 | join_accept: None, |
| 158 | device_info: None, |
| 159 | relay_rx_info: None, |
| 160 | f_nwk_s_int_key: None, |
| 161 | s_nwk_s_int_key: None, |
| 162 | nwk_s_enc_key: None, |
| 163 | app_s_key: None, |
| 164 | js_session_key_id: vec![], |
| 165 | }; |
| 166 | |
| 167 | ctx.get_join_request_payload_relayed()?; |
| 168 | ctx.get_device_data().await?; |
| 169 | ctx.get_device_keys_or_js_client().await?; |
| 170 | ctx.set_device_info()?; |
| 171 | ctx.set_relay_rx_info()?; |
| 172 | ctx.abort_on_device_is_disabled()?; |
| 173 | ctx.abort_on_otaa_is_disabled()?; |
| 174 | ctx.abort_on_relay_only_comm()?; |
| 175 | ctx.set_random_dev_addr()?; |
| 176 | if ctx.js_client.is_some() { |
| 177 | // Using join-server |
| 178 | ctx.get_join_accept_from_js().await?; |
| 179 | } else { |
| 180 | // Using internal keys |
| 181 | ctx.validate_mic().await?; |
| 182 | ctx.validate_dev_nonce_and_get_device_keys().await?; |
| 183 | ctx.construct_join_accept_and_set_keys()?; |
| 184 | } |
| 185 | ctx.set_device_session().await?; |
| 186 | ctx.flush_device_queue().await?; |
| 187 | ctx.set_device_mode().await?; |
| 188 | ctx.update_device().await?; |
| 189 | ctx.start_downlink_join_accept_flow_relayed().await?; |
| 190 | ctx.send_join_event().await?; |
| 191 | |
| 192 | Ok(()) |
| 193 | } |
| 194 | |
| 195 | fn get_join_request_payload(&mut self) -> Result<()> { |
| 196 | trace!("Getting JoinRequestPayload"); |
nothing calls this directly
no test coverage detected