pub struct HttpSession {
pub write_timeout: Option<Duration>,
/* private fields */
}Expand description
HTTP/2 server session
Fields§
§write_timeout: Option<Duration>The write timeout which will be applied to writing response body. The timeout is reset on every write. This is not a timeout on the overall duration of the response.
Implementations§
Source§impl HttpSession
impl HttpSession
Sourcepub async fn from_h2_conn(
conn: &mut Connection<Box<dyn IO>, Bytes>,
digest: Arc<Digest>,
) -> Result<Option<HttpSession>, Box<Error>>
pub async fn from_h2_conn( conn: &mut Connection<Box<dyn IO>, Bytes>, digest: Arc<Digest>, ) -> Result<Option<HttpSession>, Box<Error>>
Create a new HttpSession from the HTTP/2 connection.
This function returns a new HTTP/2 session when the provided HTTP/2 connection, conn,
establishes a new HTTP/2 stream to this server.
A Digest from the IO stream is also stored in the resulting session, since the
session doesn’t have access to the underlying stream (and the stream itself isn’t
accessible from the h2::server::Connection).
Note: in order to handle all existing and new HTTP/2 sessions, the server must call this function in a loop until the client decides to close the connection.
None will be returned when the connection is closing so that the loop can exit.
Sourcepub fn req_header(&self) -> &RequestHeader
pub fn req_header(&self) -> &RequestHeader
The request sent from the client
Different from its HTTP/1.X counterpart, this function never panics as the request is already read when established a new HTTP/2 stream.
Sourcepub fn req_header_mut(&mut self) -> &mut RequestHeader
pub fn req_header_mut(&mut self) -> &mut RequestHeader
A mutable reference to request sent from the client
Different from its HTTP/1.X counterpart, this function never panics as the request is already read when established a new HTTP/2 stream.
Sourcepub async fn read_body_bytes(&mut self) -> Result<Option<Bytes>, Box<Error>>
pub async fn read_body_bytes(&mut self) -> Result<Option<Bytes>, Box<Error>>
Read request body bytes. None when there is no more body to read.
Sourcepub async fn drain_request_body(&mut self) -> Result<(), Box<Error>>
pub async fn drain_request_body(&mut self) -> Result<(), Box<Error>>
Drain the request body. Ok(()) when there is no (more) body to read.
Sourcepub fn set_write_timeout(&mut self, timeout: Option<Duration>)
pub fn set_write_timeout(&mut self, timeout: Option<Duration>)
Sets the downstream write timeout. This will trigger if we’re unable
to write to the stream after timeout.
Sourcepub fn set_total_drain_timeout(&mut self, timeout: Option<Duration>)
pub fn set_total_drain_timeout(&mut self, timeout: Option<Duration>)
Sets the total drain timeout. This timeout will be used while draining
the request body.
Sourcepub fn write_response_header(
&mut self,
header: Box<ResponseHeader>,
end: bool,
) -> Result<(), Box<Error>>
pub fn write_response_header( &mut self, header: Box<ResponseHeader>, end: bool, ) -> Result<(), Box<Error>>
Write the response header to the client.
§the end flag
end marks the end of this session.
If the end flag is set, no more header or body can be sent to the client.
Sourcepub async fn write_body(
&mut self,
data: Bytes,
end: bool,
) -> Result<(), Box<Error>>
pub async fn write_body( &mut self, data: Bytes, end: bool, ) -> Result<(), Box<Error>>
Write response body to the client. See Self::write_response_header for how to use end.
Sourcepub fn write_trailers(&mut self, trailers: HeaderMap) -> Result<(), Box<Error>>
pub fn write_trailers(&mut self, trailers: HeaderMap) -> Result<(), Box<Error>>
Write response trailers to the client, this also closes the stream.
Sourcepub fn write_response_header_ref(
&mut self,
header: &ResponseHeader,
end: bool,
) -> Result<(), Box<Error>>
pub fn write_response_header_ref( &mut self, header: &ResponseHeader, end: bool, ) -> Result<(), Box<Error>>
Similar to Self::write_response_header, this function takes a reference instead
Sourcepub fn finish(&mut self) -> Result<(), Box<Error>>
pub fn finish(&mut self) -> Result<(), Box<Error>>
Mark the session end. If no end flag is already set before this call, this call will
signal the client. Otherwise this call does nothing.
Dropping this object without sending end will cause an error to the client, which will cause
the client to treat this session as bad or incomplete.
pub async fn response_duplex_vec( &mut self, tasks: Vec<HttpTask>, ) -> Result<bool, Box<Error>>
Sourcepub fn request_summary(&self) -> String
pub fn request_summary(&self) -> String
Return a string $METHOD $PATH, Host: $HOST. Mostly for logging and debug purpose
Sourcepub fn response_written(&self) -> Option<&ResponseHeader>
pub fn response_written(&self) -> Option<&ResponseHeader>
Return the written response header. None if it is not written yet.
Sourcepub fn shutdown(&mut self)
pub fn shutdown(&mut self)
Give up the stream abruptly.
This will send a INTERNAL_ERROR stream error to the client
pub fn pseudo_raw_h1_request_header(&self) -> Bytes
Sourcepub fn is_body_done(&self) -> bool
pub fn is_body_done(&self) -> bool
Whether there is no more body to read
Sourcepub fn is_body_empty(&self) -> bool
pub fn is_body_empty(&self) -> bool
Whether there is any body to read. true means there no body in request.
pub fn retry_buffer_truncated(&self) -> bool
pub fn enable_retry_buffering(&mut self)
pub fn get_retry_buffer(&self) -> Option<Bytes>
Sourcepub fn idle(&mut self) -> Idle<'_> ⓘ
pub fn idle(&mut self) -> Idle<'_> ⓘ
async fn idle() -> Result<Reason, Error>;
This async fn will be pending forever until the client closes the stream/connection
This function is used for watching client status so that the server is able to cancel
its internal tasks as the client waiting for the tasks goes away
Sourcepub async fn read_body_or_idle(
&mut self,
no_body_expected: bool,
) -> Result<Option<Bytes>, Box<Error>>
pub async fn read_body_or_idle( &mut self, no_body_expected: bool, ) -> Result<Option<Bytes>, Box<Error>>
Similar to read_body_bytes() but will be pending after Ok(None) is returned,
until the client closes the connection
Sourcepub fn body_bytes_sent(&self) -> usize
pub fn body_bytes_sent(&self) -> usize
Return how many response body bytes (application, not wire) already sent downstream
Sourcepub fn body_bytes_read(&self) -> usize
pub fn body_bytes_read(&self) -> usize
Return how many request body bytes (application, not wire) already read from downstream
Sourcepub fn digest_mut(&mut self) -> Option<&mut Digest>
pub fn digest_mut(&mut self) -> Option<&mut Digest>
Return a mutable Digest reference for the connection.
Sourcepub fn server_addr(&self) -> Option<&SocketAddr>
pub fn server_addr(&self) -> Option<&SocketAddr>
Return the server (local) address recorded in the connection digest.
Sourcepub fn client_addr(&self) -> Option<&SocketAddr>
pub fn client_addr(&self) -> Option<&SocketAddr>
Return the client (peer) address recorded in the connection digest.
Auto Trait Implementations§
impl !Freeze for HttpSession
impl !RefUnwindSafe for HttpSession
impl Send for HttpSession
impl Sync for HttpSession
impl Unpin for HttpSession
impl !UnwindSafe for HttpSession
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.