Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dynamic_modules: add mut to &FilterConfig on filter creation #38349

Merged
merged 2 commits into from
Feb 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions source/extensions/dynamic_modules/sdk/rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ pub static NEW_HTTP_FILTER_CONFIG_FUNCTION: OnceLock<
/// imlementation is recommended to implement the [`Drop`] trait to handle the necessary cleanup.
pub trait HttpFilterConfig<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> {
/// This is called when a HTTP filter chain is created for a new stream.
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
panic!("not implemented");
}
}
Expand Down Expand Up @@ -1047,14 +1047,14 @@ unsafe extern "C" fn envoy_dynamic_module_on_http_filter_new(
let filter_config = {
let raw = filter_config_ptr
as *mut *mut dyn HttpFilterConfig<EnvoyHttpFilterConfigImpl, EnvoyHttpFilterImpl>;
&**raw
&mut **raw
};
envoy_dynamic_module_on_http_filter_new_impl(&mut envoy_filter_config, filter_config)
}

fn envoy_dynamic_module_on_http_filter_new_impl(
envoy_filter_config: &mut EnvoyHttpFilterConfigImpl,
filter_config: &dyn HttpFilterConfig<EnvoyHttpFilterConfigImpl, EnvoyHttpFilterImpl>,
filter_config: &mut dyn HttpFilterConfig<EnvoyHttpFilterConfigImpl, EnvoyHttpFilterImpl>,
) -> abi::envoy_dynamic_module_type_http_filter_module_ptr {
let filter = filter_config.new_http_filter(envoy_filter_config);
wrap_into_c_void_ptr!(filter)
Expand Down
12 changes: 6 additions & 6 deletions source/extensions/dynamic_modules/sdk/rust/src/lib_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ fn test_envoy_dynamic_module_on_http_filter_new_destroy() {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for TestHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(TestHttpFilter)
}
}
Expand All @@ -95,12 +95,12 @@ fn test_envoy_dynamic_module_on_http_filter_new_destroy() {
}
}

let filter_config = TestHttpFilterConfig;
let mut filter_config = TestHttpFilterConfig;
let result = envoy_dynamic_module_on_http_filter_new_impl(
&mut EnvoyHttpFilterConfigImpl {
raw_ptr: std::ptr::null_mut(),
},
&filter_config,
&mut filter_config,
);
assert!(!result.is_null());

Expand All @@ -118,7 +118,7 @@ fn test_envoy_dynamic_module_on_http_filter_callbacks() {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for TestHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(TestHttpFilter)
}
}
Expand Down Expand Up @@ -185,12 +185,12 @@ fn test_envoy_dynamic_module_on_http_filter_callbacks() {
}
}

let filter_config = TestHttpFilterConfig;
let mut filter_config = TestHttpFilterConfig;
let filter = envoy_dynamic_module_on_http_filter_new_impl(
&mut EnvoyHttpFilterConfigImpl {
raw_ptr: std::ptr::null_mut(),
},
&filter_config,
&mut filter_config,
);

unsafe {
Expand Down
8 changes: 4 additions & 4 deletions test/extensions/dynamic_modules/test_data/rust/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ struct HeaderCallbacksFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for HeaderCallbacksFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(HeaderCallbacksFilter {})
}
}
Expand Down Expand Up @@ -239,7 +239,7 @@ struct SendResponseFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for SendResponseFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(SendResponseFilter {})
}
}
Expand Down Expand Up @@ -274,7 +274,7 @@ struct DynamicMetadataCallbacksFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for DynamicMetadataCallbacksFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(DynamicMetadataCallbacksFilter {})
}
}
Expand Down Expand Up @@ -365,7 +365,7 @@ struct BodyCallbacksFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for BodyCallbacksFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(BodyCallbacksFilter::default())
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ struct PassthroughHttpFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for PassthroughHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(PassthroughHttpFilter {})
}
}
Expand All @@ -48,7 +48,7 @@ struct HeadersHttpFilterConfig {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for HeadersHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
let headers_to_add: Vec<(String, String)> = self
.headers_to_add
.split(',')
Expand Down Expand Up @@ -165,7 +165,7 @@ struct BodyCallbacksFilterConfig {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for BodyCallbacksFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(BodyCallbacksFilter {
immediate_end_of_stream: self.immediate_end_of_stream,
seen_request_body: false,
Expand Down Expand Up @@ -258,7 +258,7 @@ struct SendResponseHttpFilterConfig {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for SendResponseHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(SendResponseHttpFilter {
on_request_headers: self.on_request_headers,
})
Expand Down
2 changes: 1 addition & 1 deletion test/extensions/dynamic_modules/test_data/rust/no_op.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ struct NopHttpFilterConfig {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for NopHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(NopHttpFilter {
on_request_headers_called: false,
on_request_body_called: false,
Expand Down