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
+1 -1
View File
@@ -84,7 +84,7 @@ async fn test_transport_error() {
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();
let mut request = cached.send_request(req.clone());
let reply = request.get_response().await;
+7 -2
View File
@@ -11,6 +11,7 @@ use domain::net::client::dgram;
use domain::net::client::dgram_stream;
use domain::net::client::multi_stream;
use domain::net::client::redundant;
use domain::net::client::request::RequestMessageMulti;
use domain::net::client::stream;
use std::fs::File;
use std::net::IpAddr;
@@ -43,7 +44,8 @@ fn single() {
let step_value = Arc::new(CurrStepValue::new());
let conn = Connection::new(stelline.clone(), step_value.clone());
let (octstr, transport) = stream::Connection::new(conn);
let (octstr, transport) =
stream::Connection::<_, RequestMessageMulti<Vec<u8>>>::new(conn);
tokio::spawn(async move {
transport.run().await;
});
@@ -138,7 +140,10 @@ fn tcp() {
}
};
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");