Skip to main content

HttpProxy

Struct HttpProxy 

Source
pub struct HttpProxy { /* private fields */ }

Implementations§

Source§

impl HttpProxy

Source

pub fn new( registry: Registry, sessions: Rc<RefCell<SessionManager>>, pool: Rc<RefCell<Pool>>, backends: Rc<RefCell<BackendMap>>, ) -> HttpProxy

Source

pub fn add_listener( &mut self, config: HttpListenerConfig, token: Token, ) -> Result<Token, ProxyError>

Source

pub fn get_listener(&self, token: &Token) -> Option<Rc<RefCell<HttpListener>>>

Source

pub fn remove_listener( &mut self, remove: RemoveListener, ) -> Result<(), ProxyError>

Source

pub fn inherited_socket_fate(&self, addr: &ListenerKey) -> InheritedSocketFate

What this proxy would do with a socket handed to activate_listener for addr. See crate::InheritedSocketFate.

The event loop is single-threaded, so nothing can change the listener’s active flag between this answer and the activate_listener call that acts on it.

Source

pub fn activate_listener( &self, addr: &ListenerKey, tcp_listener: Option<MioTcpListener>, ) -> Result<Token, ProxyError>

Source

pub fn listener_token(&self, address: &ListenerKey) -> Option<Token>

The slab token reserved for the listener at address, if this proxy holds one.

A listener owns exactly one slab slot for its whole AddListener -> RemoveListener lifetime, and no remove_listener implementation touches the session slab. Server therefore reads the token here BEFORE dropping the listener, so that reserved slot is released exactly once, at the end of the lifetime.

Source

pub fn give_back_listeners(&mut self) -> Vec<(ListenerKey, MioTcpListener)>

Source

pub fn give_back_listener( &mut self, address: &ListenerKey, ) -> Result<(Token, MioTcpListener), ProxyError>

Source

pub fn update_listener( &mut self, patch: UpdateHttpListenerConfig, ) -> Result<(), ProxyError>

Apply a partial-update patch to the identified HTTP listener.

Source

pub fn add_cluster(&mut self, cluster: Cluster) -> Result<(), ProxyError>

Source

pub fn remove_cluster(&mut self, cluster_id: &str) -> Result<(), ProxyError>

Source

pub fn add_http_frontend( &mut self, front: RequestHttpFrontend, ) -> Result<(), ProxyError>

Source

pub fn remove_http_frontend( &mut self, front: RequestHttpFrontend, ) -> Result<(), ProxyError>

Source

pub fn soft_stop(&mut self) -> Result<(), ProxyError>

Source

pub fn hard_stop(&mut self) -> Result<(), ProxyError>

Trait Implementations§

Source§

impl L7Proxy for HttpProxy

Source§

fn kind(&self) -> ListenerType

Source§

fn register_socket( &self, source: &mut TcpStream, token: Token, interest: Interest, ) -> Result<(), Error>

Source§

fn add_session(&self, session: Rc<RefCell<dyn ProxySession>>) -> Token

Source§

fn remove_session(&self, token: Token) -> bool

Remove the session from the session manager slab. Returns true if the session was actually there before deletion
Source§

fn clusters(&self) -> &HashMap<ClusterId, Cluster>

Source§

fn sessions(&self) -> Rc<RefCell<SessionManager>>

Access the worker’s crate::server::SessionManager for per-(cluster, source-IP) connection-limit accounting. The mux uses this to track / untrack stream-granular (cluster_id, ip) entries and consult the cluster_ip_at_limit gate before each backend connect.
Source§

impl ProxyConfiguration for HttpProxy

Source§

fn notify(&mut self, request: WorkerRequest) -> WorkerResponse

Source§

fn accept( &mut self, token: ListenToken, ) -> Result<(TcpStream, SocketAddr), AcceptError>

Accept one connection on the listener behind token, returning the socket together with the peer address accept(2) reported for it.
Source§

fn create_session( &mut self, frontend_sock: TcpStream, peer: SocketAddr, listener_token: ListenToken, wait_time: Duration, proxy: Rc<RefCell<Self>>, ) -> Result<(), AcceptError>

Build the session for a socket Self::accept returned. peer is the address accept(2) returned with it, so the session never has to ask the kernel again with getpeername(2).

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<'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 = !

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.