Add support to client transports for requests that may result in multiple

responses. (#377)

This adds ComposeRequestMulti and other *Multi types. The main change is to
the stream transport, which is the only transport that implements
SendRequestMulti.
This commit is contained in:
Philip Homburg
2024-09-04 14:03:12 +02:00
parent 851d261d31
commit 90cc96d632
14 changed files with 1044 additions and 99 deletions
+6 -3
View File
@@ -8,7 +8,9 @@ use domain::net::client::dgram_stream;
use domain::net::client::multi_stream;
use domain::net::client::protocol::{TcpConnect, TlsConnect, UdpConnect};
use domain::net::client::redundant;
use domain::net::client::request::{RequestMessage, SendRequest};
use domain::net::client::request::{
RequestMessage, RequestMessageMulti, SendRequest,
};
use domain::net::client::stream;
use std::net::{IpAddr, SocketAddr};
use std::str::FromStr;
@@ -33,7 +35,7 @@ async fn main() {
let mut msg = msg.question();
msg.push((Name::vec_from_str("example.com").unwrap(), Rtype::AAAA))
.unwrap();
let req = RequestMessage::new(msg);
let req = RequestMessage::new(msg).unwrap();
// Destination for UDP and TCP
let server_addr = SocketAddr::new(IpAddr::from_str("::1").unwrap(), 53);
@@ -234,7 +236,8 @@ async fn main() {
}
};
let (tcp, transport) = stream::Connection::new(tcp_conn);
let (tcp, transport) =
stream::Connection::<_, RequestMessageMulti<Vec<u8>>>::new(tcp_conn);
tokio::spawn(async move {
transport.run().await;
println!("single TCP run terminated");