summaryrefslogtreecommitdiffstats
path: root/third_party/rust/neqo-transport/src/connection/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/neqo-transport/src/connection/state.rs')
-rw-r--r--third_party/rust/neqo-transport/src/connection/state.rs39
1 files changed, 19 insertions, 20 deletions
diff --git a/third_party/rust/neqo-transport/src/connection/state.rs b/third_party/rust/neqo-transport/src/connection/state.rs
index cc2f6e30d2..e76f937938 100644
--- a/third_party/rust/neqo-transport/src/connection/state.rs
+++ b/third_party/rust/neqo-transport/src/connection/state.rs
@@ -21,7 +21,7 @@ use crate::{
packet::PacketBuilder,
path::PathRef,
recovery::RecoveryToken,
- ConnectionError, Error,
+ CloseReason, Error,
};
#[derive(Clone, Debug, PartialEq, Eq)]
@@ -42,14 +42,14 @@ pub enum State {
Connected,
Confirmed,
Closing {
- error: ConnectionError,
+ error: CloseReason,
timeout: Instant,
},
Draining {
- error: ConnectionError,
+ error: CloseReason,
timeout: Instant,
},
- Closed(ConnectionError),
+ Closed(CloseReason),
}
impl State {
@@ -67,7 +67,7 @@ impl State {
}
#[must_use]
- pub fn error(&self) -> Option<&ConnectionError> {
+ pub fn error(&self) -> Option<&CloseReason> {
if let Self::Closing { error, .. } | Self::Draining { error, .. } | Self::Closed(error) =
self
{
@@ -116,7 +116,7 @@ impl Ord for State {
#[derive(Debug, Clone)]
pub struct ClosingFrame {
path: PathRef,
- error: ConnectionError,
+ error: CloseReason,
frame_type: FrameType,
reason_phrase: Vec<u8>,
}
@@ -124,7 +124,7 @@ pub struct ClosingFrame {
impl ClosingFrame {
fn new(
path: PathRef,
- error: ConnectionError,
+ error: CloseReason,
frame_type: FrameType,
message: impl AsRef<str>,
) -> Self {
@@ -142,12 +142,12 @@ impl ClosingFrame {
}
pub fn sanitize(&self) -> Option<Self> {
- if let ConnectionError::Application(_) = self.error {
+ if let CloseReason::Application(_) = self.error {
// The default CONNECTION_CLOSE frame that is sent when an application
// error code needs to be sent in an Initial or Handshake packet.
Some(Self {
path: Rc::clone(&self.path),
- error: ConnectionError::Transport(Error::ApplicationError),
+ error: CloseReason::Transport(Error::ApplicationError),
frame_type: 0,
reason_phrase: Vec::new(),
})
@@ -156,19 +156,22 @@ impl ClosingFrame {
}
}
+ /// Length of a closing frame with a truncated `reason_length`. Allow 8 bytes for the reason
+ /// phrase to ensure that if it needs to be truncated there is still at least a few bytes of
+ /// the value.
+ pub const MIN_LENGTH: usize = 1 + 8 + 8 + 2 + 8;
+
pub fn write_frame(&self, builder: &mut PacketBuilder) {
- // Allow 8 bytes for the reason phrase to ensure that if it needs to be
- // truncated there is still at least a few bytes of the value.
- if builder.remaining() < 1 + 8 + 8 + 2 + 8 {
+ if builder.remaining() < ClosingFrame::MIN_LENGTH {
return;
}
match &self.error {
- ConnectionError::Transport(e) => {
+ CloseReason::Transport(e) => {
builder.encode_varint(FRAME_TYPE_CONNECTION_CLOSE_TRANSPORT);
builder.encode_varint(e.code());
builder.encode_varint(self.frame_type);
}
- ConnectionError::Application(code) => {
+ CloseReason::Application(code) => {
builder.encode_varint(FRAME_TYPE_CONNECTION_CLOSE_APPLICATION);
builder.encode_varint(*code);
}
@@ -209,10 +212,6 @@ pub enum StateSignaling {
impl StateSignaling {
pub fn handshake_done(&mut self) {
if !matches!(self, Self::Idle) {
- debug_assert!(
- false,
- "StateSignaling must be in Idle state but is in {self:?} state.",
- );
return;
}
*self = Self::HandshakeDone;
@@ -231,7 +230,7 @@ impl StateSignaling {
pub fn close(
&mut self,
path: PathRef,
- error: ConnectionError,
+ error: CloseReason,
frame_type: FrameType,
message: impl AsRef<str>,
) {
@@ -243,7 +242,7 @@ impl StateSignaling {
pub fn drain(
&mut self,
path: PathRef,
- error: ConnectionError,
+ error: CloseReason,
frame_type: FrameType,
message: impl AsRef<str>,
) {