(
globals: &Globals,
packet: &mut [u8],
packet_qname: &[u8],
tid: u16,
)
| 183 | } |
| 184 | |
| 185 | pub async fn resolve_tcp( |
| 186 | globals: &Globals, |
| 187 | packet: &mut [u8], |
| 188 | packet_qname: &[u8], |
| 189 | tid: u16, |
| 190 | ) -> Result<Vec<u8>, Error> { |
| 191 | let mut last_error = None; |
| 192 | for upstream_addr in &globals.upstream_addrs { |
| 193 | match resolve_tcp_single( |
| 194 | *upstream_addr, |
| 195 | globals.external_addr, |
| 196 | packet, |
| 197 | packet_qname, |
| 198 | tid, |
| 199 | globals.tcp_timeout, |
| 200 | ) |
| 201 | .await |
| 202 | { |
| 203 | Ok(response) => return Ok(response), |
| 204 | Err(e) => { |
| 205 | trace!("Upstream {} TCP failed: {}", upstream_addr, e); |
| 206 | last_error = Some(e); |
| 207 | } |
| 208 | } |
| 209 | } |
| 210 | Err(last_error.unwrap_or_else(|| anyhow!("No upstream servers configured"))) |
| 211 | } |
| 212 | |
| 213 | pub async fn resolve( |
| 214 | globals: &Globals, |
no test coverage detected