/// Supply a response header to a request. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn send_headers(&self, headers: &[Header]) -> Res<()> { self.handler.borrow_mut().send_headers( self.stream_id(),
headers,
&mutself.conn.borrow_mut(),
)
}
/// Supply response data to a request. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn send_data(&self, buf: &[u8]) -> Res<usize> { self.handler
.borrow_mut()
.send_data(self.stream_id(), buf, &mutself.conn.borrow_mut())
}
/// Bytes sendable on stream at the QUIC layer. /// /// Note that this does not yet account for HTTP3 frame headers. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn available(&self) -> Res<usize> { let stream_id = self.stream_id(); let n = self.conn.borrow_mut().stream_avail_send_space(stream_id)?;
Ok(n)
}
/// Close sending side. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn stream_close_send(&self) -> Res<()> { self.handler
.borrow_mut()
.stream_close_send(self.stream_id(), &mutself.conn.borrow_mut())
}
/// Request a peer to stop sending a stream. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn stream_stop_sending(&self, app_error: AppError) -> Res<()> {
qdebug!(
[self], "stop sending stream_id:{} error:{}.", self.stream_info.stream_id(),
app_error
); self.handler.borrow_mut().stream_stop_sending( self.stream_info.stream_id(),
app_error,
&mutself.conn.borrow_mut(),
)
}
/// Reset sending side of a stream. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn stream_reset_send(&self, app_error: AppError) -> Res<()> {
qdebug!(
[self], "reset send stream_id:{} error:{}.", self.stream_info.stream_id(),
app_error
); self.handler.borrow_mut().stream_reset_send( self.stream_info.stream_id(),
app_error,
&mutself.conn.borrow_mut(),
)
}
/// Reset a stream/request. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore pubfn cancel_fetch(&self, app_error: AppError) -> Res<()> {
qdebug!([self], "reset error:{}.", app_error); self.handler.borrow_mut().cancel_fetch( self.stream_info.stream_id(),
app_error,
&mutself.conn.borrow_mut(),
)
}
}
/// Supply a response header to a request. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn send_headers(&self, headers: &[Header]) -> Res<()> { self.stream_handler.send_headers(headers)
}
/// Supply response data to a request. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn send_data(&self, data: &[u8]) -> Res<usize> {
qdebug!([self], "Set new response."); self.stream_handler.send_data(data)
}
/// Close sending side. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn stream_close_send(&self) -> Res<()> {
qdebug!([self], "Set new response."); self.stream_handler.stream_close_send()
}
}
impl Deref for Http3OrWebTransportStream { type Target = StreamHandler; #[must_use] fn deref(&self) -> &Self::Target {
&self.stream_handler
}
}
/// Respond to a `WebTransport` session request. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn response(&self, accept: &WebTransportSessionAcceptAction) -> Res<()> {
qdebug!([self], "Set a response for a WebTransport session."); self.stream_handler
.handler
.borrow_mut()
.webtransport_session_accept(
&mutself.stream_handler.conn.borrow_mut(), self.stream_handler.stream_info.stream_id(),
accept,
)
}
/// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. /// Also return an error if the stream was closed on the transport layer, /// but that information is not yet consumed on the http/3 layer. pubfn close_session(&self, error: u32, message: &str) -> Res<()> { self.stream_handler
.handler
.borrow_mut()
.webtransport_close_session(
&mutself.stream_handler.conn.borrow_mut(), self.stream_handler.stream_info.stream_id(),
error,
message,
)
}
/// Close sending side. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. pubfn create_stream(&self, stream_type: StreamType) -> Res<Http3OrWebTransportStream> { let session_id = self.stream_handler.stream_id(); let id = self
.stream_handler
.handler
.borrow_mut()
.webtransport_create_stream(
&mutself.stream_handler.conn.borrow_mut(),
session_id,
stream_type,
)?;
/// Send `WebTransport` datagram. /// /// # Errors /// /// It may return `InvalidStreamId` if a stream does not exist anymore. /// The function returns `TooMuchData` if the supply buffer is bigger than /// the allowed remote datagram size. pubfn send_datagram(&self, buf: &[u8], id: impl Into<DatagramTracking>) -> Res<()> { let session_id = self.stream_handler.stream_id(); self.stream_handler
.handler
.borrow_mut()
.webtransport_send_datagram(
&mutself.stream_handler.conn.borrow_mut(),
session_id,
buf,
id,
)
}
/// Returns the current max size of a datagram that can fit into a packet. /// The value will change over time depending on the encoded size of the /// packet number, ack frames, etc. /// /// # Errors /// /// The function returns `NotAvailable` if datagrams are not enabled. /// /// # Panics /// /// This cannot panic. The max varint length is 8. pubfn max_datagram_size(&self) -> Res<u64> { let max_size = self.stream_handler.conn.borrow().max_datagram_size()?;
Ok(max_size
- u64::try_from(Encoder::varint_len( self.stream_handler.stream_id().as_u64(),
))
.unwrap())
}
}
impl Deref for WebTransportRequest { type Target = StreamHandler; #[must_use] fn deref(&self) -> &Self::Target {
&self.stream_handler
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.