[][src]Trait envoy_sdk::extension::filter::http::HttpFilter

pub trait HttpFilter {
    fn on_request_headers(
        &mut self,
        _num_headers: usize,
        _ops: &dyn RequestHeadersOps
    ) -> Result<FilterHeadersStatus> { ... }
fn on_request_body(
        &mut self,
        _body_size: usize,
        _end_of_stream: bool,
        _ops: &dyn RequestBodyOps
    ) -> Result<FilterDataStatus> { ... }
fn on_request_trailers(
        &mut self,
        _num_trailers: usize,
        _ops: &dyn RequestTrailersOps
    ) -> Result<FilterTrailersStatus> { ... }
fn on_response_headers(
        &mut self,
        _num_headers: usize,
        _ops: &dyn ResponseHeadersOps
    ) -> Result<FilterHeadersStatus> { ... }
fn on_response_body(
        &mut self,
        _body_size: usize,
        _end_of_stream: bool,
        _ops: &dyn ResponseBodyOps
    ) -> Result<FilterDataStatus> { ... }
fn on_response_trailers(
        &mut self,
        _num_trailers: usize,
        _ops: &dyn ResponseTrailersOps
    ) -> Result<FilterTrailersStatus> { ... }
fn on_exchange_complete(&mut self) -> Result<()> { ... }
fn on_http_call_response(
        &mut self,
        _request_id: HttpClientRequestHandle,
        _num_headers: usize,
        _body_size: usize,
        _num_trailers: usize,
        _filter_ops: &dyn Ops,
        _http_client_ops: &dyn HttpClientResponseOps
    ) -> Result<()> { ... } }

An interface of the Envoy HTTP Filter extension.

HTTP Filter operates on a single HTTP stream, i.e. request/response pair.

When Envoy accepts a new connection, a dedicated HTTP Filter instance is created for it.

HTTP Filter in Envoy is a stateful object.

NOTE: This trait MUST NOT panic. If a filter invocation cannot proceed normally, it should return Result::Err(x). In that case, Envoy SDK will be able to terminate only the affected HTTP request by sending a response with the HTTP Status code 500 (Internal Server Error). For comparison, if the extension chooses to panic, this will, at best, affect all ongoing HTTP requests handled by that extension, and, at worst, will crash Envoy entirely (as of July 2020).

Provided methods

fn on_request_headers(
    &mut self,
    _num_headers: usize,
    _ops: &dyn RequestHeadersOps
) -> Result<FilterHeadersStatus>

fn on_request_body(
    &mut self,
    _body_size: usize,
    _end_of_stream: bool,
    _ops: &dyn RequestBodyOps
) -> Result<FilterDataStatus>

fn on_request_trailers(
    &mut self,
    _num_trailers: usize,
    _ops: &dyn RequestTrailersOps
) -> Result<FilterTrailersStatus>

fn on_response_headers(
    &mut self,
    _num_headers: usize,
    _ops: &dyn ResponseHeadersOps
) -> Result<FilterHeadersStatus>

fn on_response_body(
    &mut self,
    _body_size: usize,
    _end_of_stream: bool,
    _ops: &dyn ResponseBodyOps
) -> Result<FilterDataStatus>

fn on_response_trailers(
    &mut self,
    _num_trailers: usize,
    _ops: &dyn ResponseTrailersOps
) -> Result<FilterTrailersStatus>

fn on_exchange_complete(&mut self) -> Result<()>

Called when HTTP stream is complete.

This moment happens before Access Loggers get called.

fn on_http_call_response(
    &mut self,
    _request_id: HttpClientRequestHandle,
    _num_headers: usize,
    _body_size: usize,
    _num_trailers: usize,
    _filter_ops: &dyn Ops,
    _http_client_ops: &dyn HttpClientResponseOps
) -> Result<()>

Called when the async HTTP request made through Envoy HTTP Client API is complete.

Arguments

  • request_id - opaque identifier of the request that is now complete.
  • num_headers - number of headers in the response.
  • body_size - size of the response body.
  • num_trailers - number of tarilers in the response.
  • filter_ops - a trait object through which HTTP Filter can access data of the HTTP stream it proxies.
  • http_client_ops - a trait object through which Network Filter can access data of the response received by HttpClient, including headers, body and trailers.
Loading content...

Implementors

Loading content...