Skip to main content

Server

Struct Server 

Source
pub struct Server {}

Implementations§

Source§

impl Server

Source

pub fn process_request( stream: impl Read + Write + Unpin, peer_addr: SocketAddr, ) -> Vec<u8> ⓘ

Source

pub fn bad_request_response(message: String) -> Vec<u8> ⓘ

Source

pub fn payload_too_large_response(message: String) -> Vec<u8> ⓘ

Builds a 413 Payload Too Large raw response for a request whose declared Content-Length exceeds RWS_CONFIG_MAX_BODY_SIZE_IN_BYTES. The connection is always closed after this is sent (see Server::process) — the client’s unread body bytes are still queued on the socket, so keep-alive framing can’t be trusted.

Source

pub fn header_fields_too_large_response() -> Vec<u8> ⓘ

Builds a 431 Request Header Fields Too Large raw response for a request head longer than [framing::MAX_HEAD_SIZE]. The connection is closed after it: the rest of the oversized head is still unread.

Source

pub fn request_timeout_response() -> Vec<u8> ⓘ

Builds a 408 Request Timeout raw response for a client that started a request head but didn’t finish it within REQUEST_HEAD_TIMEOUT. The connection is closed after it.

Source

pub fn continue_response() -> Vec<u8> ⓘ

Builds the 100 Continue interim response (RFC 9110 §15.2.1) — no headers, no body, just the status line. Sent immediately after parsing a request with Expect: 100-continue, before reading its body, so the client (which is waiting for this before it uploads the body) doesn’t stall or time out. See Server::process for where this is sent from.

Source

pub fn expectation_failed_response(message: String) -> Vec<u8> ⓘ

Builds a 417 Expectation Failed raw response for an Expect header value other than 100-continue (RFC 9110 §10.1.1) — the only expectation this server understands. Sent instead of reading the request body, since the expectation can’t be met either way.

Source

pub fn process( stream: impl Read + Write + Unpin, connection: ConnectionInfo, app: impl Application, ) -> Result<(), String>

Source

pub fn setup() -> Result<(TcpListener, ThreadPool), String>

Reads configuration (IP, port, thread count, TLS paths) from the layered config system and returns a bound TcpListener and a sized ThreadPool. Call once at startup.

Source

pub fn run( listener: TcpListener, pool: ThreadPool, app: impl Application + Send + 'static + Clone, )

Accepts TCP connections in a loop and dispatches each to the thread pool.

When built with the http1 feature, Ctrl+C and SIGTERM stop the accept loop gracefully: SERVER_READY is cleared and the pool drains all in-flight connections before returning.

For TLS/HTTP2/HTTP3 use Server::run_tls.

Source§

impl Server

Source

pub async fn run_tls( listener: TcpListener, pool: ThreadPool, app: impl Application + Send + 'static + Clone, )

Source

pub async fn run_plain( listener: TcpListener, app: impl Application + Send + 'static + Clone, )

Plain-HTTP accept loop of the async builds (used by run_tls when no certificate is configured): one tokio task per connection via http1_async::serve, so idle or slow clients can’t exhaust a thread pool. An accept error (e.g. out of file descriptors) backs off briefly and keeps serving instead of ending the loop.

Source

pub async fn run_redirect()

Binds a plain-HTTP listener on the port in RWS_CONFIG_HTTP_REDIRECT_PORT and sends 301 Moved Permanently to the HTTPS equivalent of every incoming URL. Returns immediately if TLS is not configured or the redirect port is not set.

Source§

impl Server

Source

pub async fn run_quic(app: impl Application + Send + 'static + Clone)

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more