mod.rs

Overview

This file implements a network transport layer using the QUIC protocol via the quinn library. It defines the QuinnTransport struct that conforms to the NetTransport trait, enabling asynchronous connection establishment and listener creation over QUIC. The implementation includes connection management (QuinnConnection), incoming request handling (QuinnIncomingRequest), and listener interfaces (QuinnListener). It also provides stream pooling for efficient bi-directional communication streams and manages message framing with a length-prefix protocol to ensure message integrity over QUIC unidirectional streams.


Detailed Component Descriptions

QuinnTransport

transport_config() -> Arc<quinn::TransportConfig>


QuinnListener


QuinnIncomingRequest


QuinnConnection


StreamPool


Utility Functions

write_buffer_to_stream(bytes: &[u8], stream: &mut quinn::SendStream) -> anyhow::Result<()>

read_message_from_stream(stream: &mut quinn::RecvStream) -> anyhow::Result<Vec<u8>>


Implementation Details and Algorithms


Interaction with Other System Components


Visual Diagram of Structure

classDiagram
class QuinnTransport {
+new()
+create_listener()
+connect()
}
class QuinnListener {
-endpoint: quinn::Endpoint
+accept()
}
class QuinnIncomingRequest {
-local_addr: SocketAddr
-incoming: quinn::Incoming
+remote_addr()
+accept()
}
class QuinnConnection {
-local_addr: SocketAddr
-inner: quinn::Connection
-stream_pool: Arc<StreamPool>
+from_connection()
+local_addr()
+remote_addr()
+local_identity()
+remote_identity()
+remote_certificate()
+alpn_negotiated()
+send()
+recv()
+close()
+watch_close()
}
class StreamPool {
-send: Mutex<Option<quinn::SendStream>>
-recv: Mutex<Option<quinn::RecvStream>>
+new()
+acquire_send()
+acquire_recv()
}
QuinnTransport --> QuinnListener : creates
QuinnTransport --> QuinnConnection : creates
QuinnListener --> QuinnIncomingRequest : accepts
QuinnIncomingRequest --> QuinnConnection : accepts
QuinnConnection --> StreamPool : uses

This diagram shows the major structs and their main methods along with the relationships between them, illustrating the flow from transport creation, listener acceptance, incoming request handling, and connection usage with stream pooling.