Skip to content

Commit e5843f9

Browse files
authored
h2: allow configuring FrameFractory (#525)
1 parent 8ca12a3 commit e5843f9

File tree

5 files changed

+77
-8
lines changed

5 files changed

+77
-8
lines changed

httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientH2StreamMultiplexerFactory.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.hc.core5.http.protocol.HttpProcessor;
3737
import org.apache.hc.core5.http2.config.H2Config;
3838
import org.apache.hc.core5.http2.frame.DefaultFrameFactory;
39+
import org.apache.hc.core5.http2.frame.FrameFactory;
3940
import org.apache.hc.core5.reactor.ProtocolIOSession;
4041
import org.apache.hc.core5.util.Args;
4142

@@ -53,25 +54,38 @@ public final class ClientH2StreamMultiplexerFactory {
5354
private final H2Config h2Config;
5455
private final CharCodingConfig charCodingConfig;
5556
private final H2StreamListener streamListener;
57+
private final FrameFactory frameFactory;
5658

5759
public ClientH2StreamMultiplexerFactory(
5860
final HttpProcessor httpProcessor,
5961
final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
6062
final H2Config h2Config,
6163
final CharCodingConfig charCodingConfig,
62-
final H2StreamListener streamListener) {
64+
final H2StreamListener streamListener,
65+
final FrameFactory frameFactory) {
6366
this.httpProcessor = Args.notNull(httpProcessor, "HTTP processor");
6467
this.pushHandlerFactory = pushHandlerFactory;
6568
this.h2Config = h2Config != null ? h2Config : H2Config.DEFAULT;
6669
this.charCodingConfig = charCodingConfig != null ? charCodingConfig : CharCodingConfig.DEFAULT;
6770
this.streamListener = streamListener;
71+
this.frameFactory = frameFactory != null ? frameFactory : DefaultFrameFactory.INSTANCE;
72+
}
73+
74+
public ClientH2StreamMultiplexerFactory(
75+
final HttpProcessor httpProcessor,
76+
final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
77+
final H2Config h2Config,
78+
final CharCodingConfig charCodingConfig,
79+
final H2StreamListener streamListener
80+
) {
81+
this(httpProcessor, pushHandlerFactory, h2Config, charCodingConfig, streamListener, null);
6882
}
6983

7084
public ClientH2StreamMultiplexerFactory(
7185
final HttpProcessor httpProcessor,
7286
final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
7387
final H2StreamListener streamListener) {
74-
this(httpProcessor, pushHandlerFactory, null, null, streamListener);
88+
this(httpProcessor, pushHandlerFactory, null, null, streamListener, null);
7589
}
7690

7791
public ClientH2StreamMultiplexerFactory(
@@ -81,7 +95,7 @@ public ClientH2StreamMultiplexerFactory(
8195
}
8296

8397
public ClientH2StreamMultiplexer create(final ProtocolIOSession ioSession) {
84-
return new ClientH2StreamMultiplexer(ioSession, DefaultFrameFactory.INSTANCE, httpProcessor,
98+
return new ClientH2StreamMultiplexer(ioSession, frameFactory, httpProcessor,
8599
pushHandlerFactory, h2Config, charCodingConfig, streamListener);
86100
}
87101

httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerH2StreamMultiplexerFactory.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.hc.core5.http.protocol.HttpProcessor;
3737
import org.apache.hc.core5.http2.config.H2Config;
3838
import org.apache.hc.core5.http2.frame.DefaultFrameFactory;
39+
import org.apache.hc.core5.http2.frame.FrameFactory;
3940
import org.apache.hc.core5.reactor.ProtocolIOSession;
4041
import org.apache.hc.core5.util.Args;
4142

@@ -53,24 +54,36 @@ public final class ServerH2StreamMultiplexerFactory {
5354
private final H2Config h2Config;
5455
private final CharCodingConfig charCodingConfig;
5556
private final H2StreamListener streamListener;
57+
private final FrameFactory frameFactory;
5658

5759
public ServerH2StreamMultiplexerFactory(
5860
final HttpProcessor httpProcessor,
5961
final HandlerFactory<AsyncServerExchangeHandler> exchangeHandlerFactory,
6062
final H2Config h2Config,
6163
final CharCodingConfig charCodingConfig,
62-
final H2StreamListener streamListener) {
64+
final H2StreamListener streamListener,
65+
final FrameFactory frameFactory) {
6366
this.httpProcessor = Args.notNull(httpProcessor, "HTTP processor");
6467
this.exchangeHandlerFactory = Args.notNull(exchangeHandlerFactory, "Exchange handler factory");
6568
this.h2Config = h2Config != null ? h2Config : H2Config.DEFAULT;
6669
this.charCodingConfig = charCodingConfig != null ? charCodingConfig : CharCodingConfig.DEFAULT;
6770
this.streamListener = streamListener;
71+
this.frameFactory = frameFactory != null ? frameFactory : DefaultFrameFactory.INSTANCE;
72+
}
73+
74+
public ServerH2StreamMultiplexerFactory(
75+
final HttpProcessor httpProcessor,
76+
final HandlerFactory<AsyncServerExchangeHandler> exchangeHandlerFactory,
77+
final H2Config h2Config,
78+
final CharCodingConfig charCodingConfig,
79+
final H2StreamListener streamListener) {
80+
this(httpProcessor, exchangeHandlerFactory, h2Config, charCodingConfig, streamListener, null);
6881
}
6982

7083
public ServerH2StreamMultiplexer create(final ProtocolIOSession ioSession) {
7184
return new ServerH2StreamMultiplexer(
7285
ioSession,
73-
DefaultFrameFactory.INSTANCE,
86+
frameFactory,
7487
httpProcessor,
7588
exchangeHandlerFactory,
7689
charCodingConfig,

httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2MultiplexingRequesterBootstrap.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.apache.hc.core5.http.protocol.HttpProcessor;
4141
import org.apache.hc.core5.http.protocol.UriPatternType;
4242
import org.apache.hc.core5.http2.config.H2Config;
43+
import org.apache.hc.core5.http2.frame.FrameFactory;
4344
import org.apache.hc.core5.http2.impl.H2Processors;
4445
import org.apache.hc.core5.http2.impl.nio.ClientH2PrefaceHandler;
4546
import org.apache.hc.core5.http2.impl.nio.ClientH2StreamMultiplexerFactory;
@@ -71,6 +72,7 @@ public class H2MultiplexingRequesterBootstrap {
7172
private Callback<Exception> exceptionCallback;
7273
private IOSessionListener sessionListener;
7374
private H2StreamListener streamListener;
75+
private FrameFactory frameFactory;
7476

7577
private IOReactorMetricsListener threadPoolListener;
7678

@@ -188,6 +190,17 @@ public final H2MultiplexingRequesterBootstrap setStreamListener(final H2StreamLi
188190
return this;
189191
}
190192

193+
/**
194+
* Sets {@link FrameFactory} instance.
195+
*
196+
* @since 5.4
197+
* @return this instance.
198+
*/
199+
public final H2MultiplexingRequesterBootstrap setStreamListener(final FrameFactory frameFactory) {
200+
this.frameFactory = frameFactory;
201+
return this;
202+
}
203+
191204
/**
192205
* Sets {@link UriPatternType} for handler registration.
193206
*
@@ -249,7 +262,8 @@ public H2MultiplexingRequester create() {
249262
new DefaultAsyncPushConsumerFactory(requestRouter),
250263
h2Config != null ? h2Config : H2Config.DEFAULT,
251264
charCodingConfig != null ? charCodingConfig : CharCodingConfig.DEFAULT,
252-
streamListener);
265+
streamListener,
266+
frameFactory);
253267
return new H2MultiplexingRequester(
254268
ioReactorConfig,
255269
(ioSession, attachment) ->

httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.apache.hc.core5.http.protocol.UriPatternType;
5151
import org.apache.hc.core5.http2.HttpVersionPolicy;
5252
import org.apache.hc.core5.http2.config.H2Config;
53+
import org.apache.hc.core5.http2.frame.FrameFactory;
5354
import org.apache.hc.core5.http2.impl.H2Processors;
5455
import org.apache.hc.core5.http2.impl.nio.ClientH2StreamMultiplexerFactory;
5556
import org.apache.hc.core5.http2.impl.nio.ClientHttpProtocolNegotiationStarter;
@@ -101,6 +102,7 @@ public class H2RequesterBootstrap {
101102
private Http1StreamListener http1StreamListener;
102103
private ConnPoolListener<HttpHost> connPoolListener;
103104
private IOReactorMetricsListener threadPoolListener;
105+
private FrameFactory frameFactory;
104106

105107

106108
private H2RequesterBootstrap() {
@@ -303,6 +305,17 @@ public final H2RequesterBootstrap setUriPatternType(final UriPatternType uriPatt
303305
return this;
304306
}
305307

308+
/**
309+
* Sets {@link FrameFactory} instance.
310+
*
311+
* @since 5.4
312+
* @return this instance.
313+
*/
314+
public final H2RequesterBootstrap setFrameFactory(final FrameFactory frameFactory) {
315+
this.frameFactory = frameFactory;
316+
return this;
317+
}
318+
306319
/**
307320
* Registers the given {@link AsyncPushConsumer} {@link Supplier} as a default handler for URIs
308321
* matching the given pattern.
@@ -376,7 +389,8 @@ public H2AsyncRequester create() {
376389
new DefaultAsyncPushConsumerFactory(requestRouter),
377390
h2Config != null ? h2Config : H2Config.DEFAULT,
378391
charCodingConfig != null ? charCodingConfig : CharCodingConfig.DEFAULT,
379-
streamListener);
392+
streamListener,
393+
frameFactory);
380394

381395
final TlsStrategy actualTlsStrategy = tlsStrategy != null ? tlsStrategy : new H2ClientTlsStrategy();
382396

httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.apache.hc.core5.http.protocol.UriPatternType;
6363
import org.apache.hc.core5.http2.HttpVersionPolicy;
6464
import org.apache.hc.core5.http2.config.H2Config;
65+
import org.apache.hc.core5.http2.frame.FrameFactory;
6566
import org.apache.hc.core5.http2.impl.H2Processors;
6667
import org.apache.hc.core5.http2.impl.nio.H2StreamListener;
6768
import org.apache.hc.core5.http2.impl.nio.ServerH2StreamMultiplexerFactory;
@@ -104,6 +105,7 @@ public class H2ServerBootstrap {
104105
private H2StreamListener h2StreamListener;
105106
private Http1StreamListener http1StreamListener;
106107
private IOReactorMetricsListener threadPoolListener;
108+
private FrameFactory frameFactory;
107109

108110
private H2ServerBootstrap() {
109111
this.routeEntries = new ArrayList<>();
@@ -252,6 +254,17 @@ public final H2ServerBootstrap setStreamListener(final H2StreamListener h2Stream
252254
return this;
253255
}
254256

257+
/**
258+
* Sets {@link FrameFactory} instance.
259+
*
260+
* @since 5.4
261+
* @return this instance.
262+
*/
263+
public final H2ServerBootstrap setFrameFactory(final FrameFactory frameFactory) {
264+
this.frameFactory = frameFactory;
265+
return this;
266+
}
267+
255268
/**
256269
* Sets {@link Http1StreamListener} instance.
257270
*
@@ -511,7 +524,8 @@ public HttpAsyncServer create() {
511524
handlerFactory,
512525
h2Config != null ? h2Config : H2Config.DEFAULT,
513526
charCodingConfig != null ? charCodingConfig : CharCodingConfig.DEFAULT,
514-
h2StreamListener);
527+
h2StreamListener,
528+
frameFactory);
515529

516530
final TlsStrategy actualTlsStrategy = tlsStrategy != null ? tlsStrategy : new H2ServerTlsStrategy();
517531

0 commit comments

Comments
 (0)