@@ -35,6 +35,7 @@ public enum TrustChainVerification {
3535 public final String dnsPreresolveHostnames ;
3636 public final List <String > dnsFallbackNameservers ;
3737 public final Boolean dnsFilterUnroutableFamilies ;
38+ public final Boolean enableHttp3 ;
3839 public final Boolean enableHappyEyeballs ;
3940 public final Boolean enableInterfaceBinding ;
4041 public final Integer h2ConnectionKeepaliveIdleIntervalMilliseconds ;
@@ -69,6 +70,7 @@ public enum TrustChainVerification {
6970 * @param dnsPreresolveHostnames hostnames to preresolve on Envoy Client construction.
7071 * @param dnsFallbackNameservers addresses to use as DNS name server fallback.
7172 * @param dnsFilterUnroutableFamilies whether to filter unroutable IP families or not.
73+ * @param enableHttp3 whether to enable experimental support for HTTP/3 (QUIC).
7274 * @param enableHappyEyeballs whether to enable RFC 6555 handling for IPv4/IPv6.
7375 * @param enableInterfaceBinding whether to allow interface binding.
7476 * @param h2ConnectionKeepaliveIdleIntervalMilliseconds rate in milliseconds seconds to send h2
@@ -92,7 +94,7 @@ public EnvoyConfiguration(
9294 int connectTimeoutSeconds , int dnsRefreshSeconds , int dnsFailureRefreshSecondsBase ,
9395 int dnsFailureRefreshSecondsMax , int dnsQueryTimeoutSeconds , int dnsMinRefreshSeconds ,
9496 String dnsPreresolveHostnames , List <String > dnsFallbackNameservers ,
95- Boolean dnsFilterUnroutableFamilies , boolean enableHappyEyeballs ,
97+ Boolean dnsFilterUnroutableFamilies , boolean enableHttp3 , boolean enableHappyEyeballs ,
9698 boolean enableInterfaceBinding , int h2ConnectionKeepaliveIdleIntervalMilliseconds ,
9799 int h2ConnectionKeepaliveTimeoutSeconds , List <String > h2RawDomains , int maxConnectionsPerHost ,
98100 int statsFlushSeconds , int streamIdleTimeoutSeconds , int perTryIdleTimeoutSeconds ,
@@ -112,6 +114,7 @@ public EnvoyConfiguration(
112114 this .dnsPreresolveHostnames = dnsPreresolveHostnames ;
113115 this .dnsFallbackNameservers = dnsFallbackNameservers ;
114116 this .dnsFilterUnroutableFamilies = dnsFilterUnroutableFamilies ;
117+ this .enableHttp3 = enableHttp3 ;
115118 this .enableHappyEyeballs = enableHappyEyeballs ;
116119 this .enableInterfaceBinding = enableInterfaceBinding ;
117120 this .h2ConnectionKeepaliveIdleIntervalMilliseconds =
@@ -135,32 +138,37 @@ public EnvoyConfiguration(
135138 * Resolves the provided configuration template using properties on this
136139 * configuration.
137140 *
138- * @param templateYAML the template configuration to resolve.
139- * @param platformFilterTemplateYAML helper template to build platform http filters.
140- * @param nativeFilterTemplateYAML helper template to build native http filters.
141+ * @param configTemplate the template configuration to resolve.
142+ * @param platformFilterTemplate helper template to build platform http filters.
143+ * @param nativeFilterTemplate helper template to build native http filters.
144+ * @param altProtocolCacheFilterInsert helper insert to include the alt protocol cache filter.
141145 * @return String, the resolved template.
142146 * @throws ConfigurationException, when the template provided is not fully
143147 * resolved.
144148 */
145- String resolveTemplate (final String templateYAML , final String platformFilterTemplateYAML ,
146- final String nativeFilterTemplateYAML ) {
149+ String resolveTemplate (final String configTemplate , final String platformFilterTemplate ,
150+ final String nativeFilterTemplate ,
151+ final String altProtocolCacheFilterInsert ) {
147152 final StringBuilder customFiltersBuilder = new StringBuilder ();
148153
149154 for (EnvoyHTTPFilterFactory filterFactory : httpPlatformFilterFactories ) {
150- String filterConfig = platformFilterTemplateYAML .replace ("{{ platform_filter_name }}" ,
151- filterFactory .getFilterName ());
155+ String filterConfig = platformFilterTemplate .replace ("{{ platform_filter_name }}" ,
156+ filterFactory .getFilterName ());
152157 customFiltersBuilder .append (filterConfig );
153158 }
154159
155160 for (EnvoyNativeFilterConfig filter : nativeFilterChain ) {
156- String filterConfig =
157- nativeFilterTemplateYAML .replace ("{{ native_filter_name }}" , filter .name )
158- .replace ("{{ native_filter_typed_config }}" , filter .typedConfig );
161+ String filterConfig = nativeFilterTemplate .replace ("{{ native_filter_name }}" , filter .name )
162+ .replace ("{{ native_filter_typed_config }}" , filter .typedConfig );
159163 customFiltersBuilder .append (filterConfig );
160164 }
161165
166+ if (enableHttp3 ) {
167+ customFiltersBuilder .append (altProtocolCacheFilterInsert );
168+ }
169+
162170 String processedTemplate =
163- templateYAML .replace ("#{custom_filters}" , customFiltersBuilder .toString ());
171+ configTemplate .replace ("#{custom_filters}" , customFiltersBuilder .toString ());
164172
165173 String dnsFallbackNameserversAsString = "[]" ;
166174 if (!dnsFallbackNameservers .isEmpty ()) {
0 commit comments