refactor(net): move NetError into its own error module
This commit is contained in:
parent
aa9dc18efe
commit
c6d8d1bd70
|
|
@ -4,45 +4,7 @@
|
||||||
//!
|
//!
|
||||||
//! Encodes and decodes one logical protocol message per record on a QUIC stream, using a length prefix so a reader can recover record boundaries from a byte stream.
|
//! Encodes and decodes one logical protocol message per record on a QUIC stream, using a length prefix so a reader can recover record boundaries from a byte stream.
|
||||||
|
|
||||||
/// Errors produced by the framing codec and its stream I/O helpers.
|
use crate::error::NetError;
|
||||||
#[derive(Debug, thiserror::Error)]
|
|
||||||
pub enum NetError {
|
|
||||||
/// A `postcard` serialization or deserialization operation failed.
|
|
||||||
#[error("postcard codec error: {0}")]
|
|
||||||
Postcard(#[from] postcard::Error),
|
|
||||||
/// An underlying byte-stream I/O operation failed.
|
|
||||||
#[error("i/o error: {0}")]
|
|
||||||
Io(#[from] std::io::Error),
|
|
||||||
/// A declared frame length exceeded the caller-supplied maximum, indicating a malicious or corrupt peer.
|
|
||||||
#[error("frame length {len} exceeds maximum {max}")]
|
|
||||||
FrameTooLarge {
|
|
||||||
/// The frame length declared by the length prefix, in bytes.
|
|
||||||
len: u64,
|
|
||||||
/// The maximum payload length accepted by the reader, in bytes.
|
|
||||||
max: usize,
|
|
||||||
},
|
|
||||||
/// The stream ended before a complete frame (prefix or payload) had been read.
|
|
||||||
#[error("unexpected end of stream while reading a frame")]
|
|
||||||
UnexpectedEof,
|
|
||||||
/// A varint length prefix was malformed: either overlong or otherwise invalid.
|
|
||||||
#[error("malformed varint length prefix")]
|
|
||||||
MalformedVarint,
|
|
||||||
/// Writing bytes to a quinn send stream failed.
|
|
||||||
#[error("quinn write error: {0}")]
|
|
||||||
Write(#[from] quinn::WriteError),
|
|
||||||
/// Reading an exact number of bytes from a quinn recv stream failed.
|
|
||||||
#[error("quinn read error: {0}")]
|
|
||||||
Read(#[from] quinn::ReadExactError),
|
|
||||||
/// Generation of the self-signed server certificate failed.
|
|
||||||
#[error("certificate generation error: {0}")]
|
|
||||||
Rcgen(#[from] rcgen::Error),
|
|
||||||
/// Construction of the `rustls` TLS configuration failed.
|
|
||||||
#[error("rustls configuration error: {0}")]
|
|
||||||
Rustls(#[from] rustls::Error),
|
|
||||||
/// The `rustls` configuration lacked a TLS 1.3 cipher suite, which QUIC requires.
|
|
||||||
#[error("no initial cipher suite for quic: {0}")]
|
|
||||||
NoInitialCipherSuite(#[from] quinn::crypto::rustls::NoInitialCipherSuite),
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The maximum payload length, in bytes, accepted on the control stream (64 KiB), matching the mod-payload cap. Higher-bandwidth tiers such as chunk streaming define their own caps.
|
/// The maximum payload length, in bytes, accepted on the control stream (64 KiB), matching the mod-payload cap. Higher-bandwidth tiers such as chunk streaming define their own caps.
|
||||||
pub const MAX_CONTROL_FRAME_LEN: usize = 64 * 1024;
|
pub const MAX_CONTROL_FRAME_LEN: usize = 64 * 1024;
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ use rustls::client::danger::{HandshakeSignatureValid, ServerCertVerified, Server
|
||||||
use rustls::pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer, ServerName, UnixTime};
|
use rustls::pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer, ServerName, UnixTime};
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use crate::codec::NetError;
|
use crate::error::NetError;
|
||||||
|
|
||||||
/// The Application-Layer Protocol Negotiation identifier for the Synvael protocol.
|
/// The Application-Layer Protocol Negotiation identifier for the Synvael protocol.
|
||||||
pub const ALPN: &[u8] = b"synvael";
|
pub const ALPN: &[u8] = b"synvael";
|
||||||
|
|
|
||||||
45
crates/net/src/error.rs
Normal file
45
crates/net/src/error.rs
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
//! Error types for the net crate.
|
||||||
|
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
|
/// Errors produced by the framing codec, endpoint construction, and stream I/O helpers.
|
||||||
|
#[derive(Debug, Error)]
|
||||||
|
pub enum NetError {
|
||||||
|
/// A `postcard` serialization or deserialization operation failed.
|
||||||
|
#[error("postcard codec error: {0}")]
|
||||||
|
Postcard(#[from] postcard::Error),
|
||||||
|
/// An underlying byte-stream I/O operation failed.
|
||||||
|
#[error("i/o error: {0}")]
|
||||||
|
Io(#[from] std::io::Error),
|
||||||
|
/// A declared frame length exceeded the caller-supplied maximum, indicating a malicious or corrupt peer.
|
||||||
|
#[error("frame length {len} exceeds maximum {max}")]
|
||||||
|
FrameTooLarge {
|
||||||
|
/// The frame length declared by the length prefix, in bytes.
|
||||||
|
len: u64,
|
||||||
|
/// The maximum payload length accepted by the reader, in bytes.
|
||||||
|
max: usize,
|
||||||
|
},
|
||||||
|
/// The stream ended before a complete frame (prefix or payload) had been read.
|
||||||
|
#[error("unexpected end of stream while reading a frame")]
|
||||||
|
UnexpectedEof,
|
||||||
|
/// A varint length prefix was malformed: either overlong or otherwise invalid.
|
||||||
|
#[error("malformed varint length prefix")]
|
||||||
|
MalformedVarint,
|
||||||
|
/// Writing bytes to a quinn send stream failed.
|
||||||
|
#[error("quinn write error: {0}")]
|
||||||
|
Write(#[from] quinn::WriteError),
|
||||||
|
/// Reading an exact number of bytes from a quinn recv stream failed.
|
||||||
|
#[error("quinn read error: {0}")]
|
||||||
|
Read(#[from] quinn::ReadExactError),
|
||||||
|
/// Generation of the self-signed server certificate failed.
|
||||||
|
#[error("certificate generation error: {0}")]
|
||||||
|
Rcgen(#[from] rcgen::Error),
|
||||||
|
/// Construction of the `rustls` TLS configuration failed.
|
||||||
|
#[error("rustls configuration error: {0}")]
|
||||||
|
Rustls(#[from] rustls::Error),
|
||||||
|
/// The `rustls` configuration lacked a TLS 1.3 cipher suite, which QUIC requires.
|
||||||
|
#[error("no initial cipher suite for quic: {0}")]
|
||||||
|
NoInitialCipherSuite(#[from] quinn::crypto::rustls::NoInitialCipherSuite),
|
||||||
|
}
|
||||||
|
|
@ -8,5 +8,6 @@
|
||||||
|
|
||||||
pub mod codec;
|
pub mod codec;
|
||||||
pub mod endpoint;
|
pub mod endpoint;
|
||||||
|
pub mod error;
|
||||||
pub mod handshake;
|
pub mod handshake;
|
||||||
pub mod runtime;
|
pub mod runtime;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue