(join_eui: EUI64)
| 45 | } |
| 46 | |
| 47 | pub async fn get(join_eui: EUI64) -> Result<Arc<Client>> { |
| 48 | for client in CLIENTS.read().await.iter() { |
| 49 | if client.0.matches(join_eui) { |
| 50 | return Ok(client.1.clone()); |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | let conf = config::get(); |
| 55 | if conf.join_server.default.enabled { |
| 56 | debug!(join_eui = %join_eui, "Configuring default join-server client"); |
| 57 | |
| 58 | let server = if conf.join_server.default.server.is_empty() { |
| 59 | let join_eui: String = join_eui |
| 60 | .to_string() |
| 61 | .chars() |
| 62 | .rev() |
| 63 | .map(|v| v.to_string()) |
| 64 | .collect::<Vec<String>>() |
| 65 | .join("."); |
| 66 | |
| 67 | format!( |
| 68 | "https://{}{}", |
| 69 | join_eui, conf.join_server.resolve_join_eui_domain_suffix |
| 70 | ) |
| 71 | } else { |
| 72 | conf.join_server.default.server.clone() |
| 73 | }; |
| 74 | |
| 75 | let c = Client::new(ClientConfig { |
| 76 | sender_id: conf.network.net_id.to_vec(), |
| 77 | server, |
| 78 | ca_cert: conf.join_server.default.ca_cert.clone(), |
| 79 | tls_cert: conf.join_server.default.tls_cert.clone(), |
| 80 | tls_key: conf.join_server.default.tls_key.clone(), |
| 81 | async_timeout: conf.join_server.default.async_timeout, |
| 82 | request_log_sender: stream::backend_interfaces::get_log_sender().await, |
| 83 | authorization: if conf.join_server.default.authorization_header.is_empty() { |
| 84 | None |
| 85 | } else { |
| 86 | Some(conf.join_server.default.authorization_header.clone()) |
| 87 | }, |
| 88 | ..Default::default() |
| 89 | })?; |
| 90 | |
| 91 | let c = Arc::new(c); |
| 92 | let c_out = c.clone(); |
| 93 | |
| 94 | CLIENTS |
| 95 | .write() |
| 96 | .await |
| 97 | .push((EUI64Prefix::new(join_eui.to_be_bytes(), 64), c)); |
| 98 | |
| 99 | return Ok(c_out); |
| 100 | } |
| 101 | |
| 102 | Err(anyhow!( |
| 103 | "Join Server client for join_eui {} does not exist", |
| 104 | join_eui |
no test coverage detected