Connection

Enum Connection 

Source
pub enum Connection<'b, T, const N: usize = DEFAULT_MAX_HEADERS_COUNT>
where T: TcpConnect,
{ Transition(TransitionState), Unbound(UnboundState<'b, T, N>), Request(RequestState<'b, T, N>), Response(ResponseState<'b, T, N>), }
Expand description

A client connection that can be used to send HTTP requests and receive responses.

Variants§

§

Transition(TransitionState)

§

Unbound(UnboundState<'b, T, N>)

§

Request(RequestState<'b, T, N>)

§

Response(ResponseState<'b, T, N>)

Implementations§

Source§

impl<'b, T, const N: usize> Connection<'b, T, N>
where T: TcpConnect,

Source

pub fn new(buf: &'b mut [u8], socket: &'b T, addr: SocketAddr) -> Self

Create a new client connection.

Note that the connection does not have any built-in read/write timeouts:

  • To add a timeout on each IO operation, wrap the socket type with the edge_nal::WithTimeout wrapper.
  • To add a global request-response timeout, wrap your complete request-response processing logic with the edge_nal::with_timeout function.

Parameters:

  • buf: A buffer to use for reading and writing data.
  • socket: The TCP stack to use for the connection.
  • addr: The address of the server to connect to.
Source

pub async fn reinitialize( &mut self, addr: SocketAddr, ) -> Result<(), Error<T::Error>>

Reinitialize the connection with a new address.

Source

pub async fn initiate_request( &mut self, http11: bool, method: Method, uri: &str, headers: &[(&str, &str)], ) -> Result<(), Error<T::Error>>

Initiate an HTTP request.

Source

pub async fn initiate_ws_upgrade_request( &mut self, host: Option<&str>, origin: Option<&str>, uri: &str, version: Option<&str>, nonce: &[u8; 16], nonce_base64_buf: &mut [u8; 28], ) -> Result<(), Error<T::Error>>

A utility method to initiate a WebSocket upgrade request.

Source

pub fn is_request_initiated(&self) -> bool

Return true if a request has been initiated.

Source

pub async fn initiate_response(&mut self) -> Result<(), Error<T::Error>>

Initiate an HTTP response.

This should be called after a request has been initiated and the request body had been sent.

Source

pub fn is_response_initiated(&self) -> bool

Return true if a response has been initiated.

Source

pub fn is_ws_upgrade_accepted( &self, nonce: &[u8; 16], buf: &mut [u8; 33], ) -> Result<bool, Error<T::Error>>

Return true if the server accepted the WebSocket upgrade request.

Source

pub fn split( &mut self, ) -> (&ResponseHeaders<'b, N>, &mut Body<'b, T::Socket<'b>>)

Split the connection into its headers and body parts.

The connection must be in response mode.

Source

pub fn headers(&self) -> Result<&ResponseHeaders<'b, N>, Error<T::Error>>

Get the headers of the response.

The connection must be in response mode.

Source

pub fn raw_connection(&mut self) -> Result<&mut T::Socket<'b>, Error<T::Error>>

Get a mutable reference to the raw connection.

This can be used to send raw data over the connection.

Source

pub fn release(self) -> (T::Socket<'b>, &'b mut [u8])

Release the connection, returning the raw connection and the buffer.

Source

pub async fn complete(&mut self) -> Result<(), Error<T::Error>>

Complete the request-response cycle

If the request has not been initiated, this method will do nothing. If the response has not been initiated, it will be initiated and will be consumed.

Source

pub async fn close(self) -> Result<(), Error<T::Error>>

Source

pub fn needs_close(&self) -> bool

Return true if the connection needs to be closed (i.e. the server has requested it or the connection is in an invalid state)

Trait Implementations§

Source§

impl<T, const N: usize> ErrorType for Connection<'_, T, N>
where T: TcpConnect,

Source§

type Error = Error<<T as TcpConnect>::Error>

Error type of all the IO operations on this type.
Source§

impl<T, const N: usize> Read for Connection<'_, T, N>
where T: TcpConnect,

Source§

async fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>

Read some bytes from this source into the specified buffer, returning how many bytes were read. Read more
Source§

async fn read_exact( &mut self, buf: &mut [u8], ) -> Result<(), ReadExactError<Self::Error>>

Read the exact number of bytes required to fill buf. Read more
Source§

impl<T, const N: usize> Write for Connection<'_, T, N>
where T: TcpConnect,

Source§

async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error>

Write a buffer into this writer, returning how many bytes were written. Read more
Source§

async fn flush(&mut self) -> Result<(), Self::Error>

Flush this output stream, ensuring that all intermediately buffered contents reach their destination.
Source§

async fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error>

Write an entire buffer into this writer. Read more

Auto Trait Implementations§

§

impl<'b, T, const N: usize> Freeze for Connection<'b, T, N>
where <T as TcpConnect>::Socket<'b>: Freeze,

§

impl<'b, T, const N: usize> RefUnwindSafe for Connection<'b, T, N>

§

impl<'b, T, const N: usize = DEFAULT_MAX_HEADERS_COUNT> !Send for Connection<'b, T, N>

§

impl<'b, T, const N: usize = DEFAULT_MAX_HEADERS_COUNT> !Sync for Connection<'b, T, N>

§

impl<'b, T, const N: usize> Unpin for Connection<'b, T, N>
where <T as TcpConnect>::Socket<'b>: Unpin,

§

impl<'b, T, const N: usize = DEFAULT_MAX_HEADERS_COUNT> !UnwindSafe for Connection<'b, T, N>

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, 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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.