Struct Http

Source
pub struct Http<Front: SocketHandler, L: ListenerHandler + L7ListenerHandler> {
    pub backend: Option<Rc<RefCell<Backend>>>,
    pub backend_readiness: Readiness,
    pub backend_socket: Option<TcpStream>,
    pub backend_token: Option<Token>,
    pub container_backend_timeout: TimeoutContainer,
    pub container_frontend_timeout: TimeoutContainer,
    pub frontend_readiness: Readiness,
    pub frontend_socket: Front,
    pub request_stream: Kawa<Checkout>,
    pub response_stream: ResponseStream,
    pub context: HttpContext,
    /* private fields */
}
Expand description

Http will be contained in State which itself is contained by Session

Fields§

§backend: Option<Rc<RefCell<Backend>>>§backend_readiness: Readiness§backend_socket: Option<TcpStream>§backend_token: Option<Token>§container_backend_timeout: TimeoutContainer§container_frontend_timeout: TimeoutContainer§frontend_readiness: Readiness§frontend_socket: Front§request_stream: Kawa<Checkout>§response_stream: ResponseStream§context: HttpContext

The HTTP context was separated from the State for borrowing reasons. Calling a kawa parser mutably borrows the State through request_stream or response_stream, so Http can’t be borrowed again to be used in callbacks. HttContext is an independant subsection of Http that can be mutably borrowed for parser callbacks.

Implementations§

Source§

impl<Front: SocketHandler, L: ListenerHandler + L7ListenerHandler> Http<Front, L>

Source

pub fn new( answers: Rc<RefCell<HttpAnswers>>, configured_backend_timeout: Duration, configured_connect_timeout: Duration, configured_frontend_timeout: Duration, container_frontend_timeout: TimeoutContainer, frontend_socket: Front, frontend_token: Token, listener: Rc<RefCell<L>>, pool: Weak<RefCell<Pool>>, protocol: Protocol, public_address: SocketAddr, request_id: Ulid, session_address: Option<SocketAddr>, sticky_name: String, ) -> Result<Http<Front, L>, AcceptError>

Instantiate a new HTTP SessionState with:

  • frontend_interest: READABLE | HUP | ERROR
  • frontend_event: EMPTY
  • backend_interest: EMPTY
  • backend_event: EMPTY

Remember to set the events from the previous State!

Source

pub fn reset(&mut self)

Reset the connection in case of keep-alive to be ready for the next request

Source

pub fn readable(&mut self, metrics: &mut SessionMetrics) -> StateResult

Source

pub fn writable(&mut self, metrics: &mut SessionMetrics) -> StateResult

Source

pub fn backend_writable( &mut self, metrics: &mut SessionMetrics, ) -> SessionResult

Source

pub fn backend_readable( &mut self, metrics: &mut SessionMetrics, ) -> SessionResult

Source§

impl<Front: SocketHandler, L: ListenerHandler + L7ListenerHandler> Http<Front, L>

Source

pub fn get_session_address(&self) -> Option<SocketAddr>

Source

pub fn get_backend_address(&self) -> Option<SocketAddr>

Source

pub fn websocket_context(&self) -> WebSocketContext

Format the context of the websocket into a loggable String

Source

pub fn log_request( &self, metrics: &SessionMetrics, error: bool, message: Option<&str>, )

Source

pub fn log_request_success(&self, metrics: &SessionMetrics)

Source

pub fn log_default_answer_success(&self, metrics: &SessionMetrics)

Source

pub fn log_request_error(&self, metrics: &mut SessionMetrics, message: &str)

Source

pub fn set_answer(&mut self, answer: DefaultAnswer)

Source

pub fn test_backend_socket(&self) -> bool

Source

pub fn is_valid_backend_socket(&self) -> bool

Source

pub fn set_backend_socket( &mut self, socket: TcpStream, backend: Option<Rc<RefCell<Backend>>>, )

Source

pub fn set_cluster_id(&mut self, cluster_id: String)

Source

pub fn set_backend_id(&mut self, backend_id: String)

Source

pub fn set_backend_token(&mut self, token: Token)

Source

pub fn clear_backend_token(&mut self)

Source

pub fn set_backend_timeout(&mut self, dur: Duration)

Source

pub fn front_socket(&self) -> &TcpStream

Source

pub fn extract_route( &self, ) -> Result<(&str, &str, &Method), RetrieveClusterError>

Source

pub fn get_route(&self) -> String

Source

pub fn backend_from_request( &mut self, cluster_id: &str, frontend_should_stick: bool, proxy: Rc<RefCell<dyn L7Proxy>>, metrics: &mut SessionMetrics, ) -> Result<TcpStream, BackendConnectionError>

Source

pub fn backend_hup(&mut self, metrics: &mut SessionMetrics) -> StateResult

Source

pub fn timeout_status(&self) -> TimeoutStatus

Trait Implementations§

Source§

impl<Front: SocketHandler, L: ListenerHandler + L7ListenerHandler> SessionState for Http<Front, L>

Source§

fn ready( &mut self, session: Rc<RefCell<dyn ProxySession>>, proxy: Rc<RefCell<dyn L7Proxy>>, metrics: &mut SessionMetrics, ) -> SessionResult

if a session received an event or can still execute, the event loop will call this method. Its result indicates if it can still execute or if the session can be closed
Source§

fn update_readiness(&mut self, token: Token, events: Ready)

if the event loop got an event for a token associated with the session, it will call this method
Source§

fn close( &mut self, proxy: Rc<RefCell<dyn L7Proxy>>, metrics: &mut SessionMetrics, )

close the state
Source§

fn timeout(&mut self, token: Token, metrics: &mut SessionMetrics) -> StateResult

if a timeout associated with the session triggers, the event loop will call this method with the timeout’s token
Source§

fn cancel_timeouts(&mut self)

cancel frontend timeout (and backend timeout if present)
Source§

fn print_state(&self, context: &str)

display the session’s internal state (for debugging purpose), Read more
Source§

fn shutting_down(&mut self) -> bool

tell the session it has to shut down if possible Read more

Auto Trait Implementations§

§

impl<Front, L> !Freeze for Http<Front, L>

§

impl<Front, L> !RefUnwindSafe for Http<Front, L>

§

impl<Front, L> !Send for Http<Front, L>

§

impl<Front, L> !Sync for Http<Front, L>

§

impl<Front, L> Unpin for Http<Front, L>
where Front: Unpin,

§

impl<Front, L> !UnwindSafe for Http<Front, L>

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> ErasedDestructor for T
where T: 'static,