Allow to set Http2HeaderEncoder.SensitivityDetector in the Http2ConnectionHandler

Motivation:

Some times the user wants to set a Http2HeaderEncoder.SensitivityDetector when building a Http2ConnectionHandler.

Modifications:

Allow to set Http2HeaderEncoder.SensitivityDetector via builder.

Result:

More flexible building of Http2ConnectionHandler possible.
This commit is contained in:
Norman Maurer 2015-11-24 04:14:21 +01:00
parent 512efdc4a9
commit b688bbb5df
3 changed files with 23 additions and 4 deletions

View File

@ -78,6 +78,7 @@ public class DefaultHttp2FrameReader implements Http2FrameReader, Http2FrameSize
/** /**
* Create a new instance. * Create a new instance.
* @param validateHeaders {@code true} to validate headers. {@code false} to not validate headers. * @param validateHeaders {@code true} to validate headers. {@code false} to not validate headers.
* @see {@link DefaultHttp2HeadersDecoder(boolean)}
*/ */
public DefaultHttp2FrameReader(boolean validateHeaders) { public DefaultHttp2FrameReader(boolean validateHeaders) {
this(new DefaultHttp2HeadersDecoder(validateHeaders)); this(new DefaultHttp2HeadersDecoder(validateHeaders));

View File

@ -84,6 +84,10 @@ public class DefaultHttp2FrameWriter implements Http2FrameWriter, Http2FrameSize
this(new DefaultHttp2HeadersEncoder()); this(new DefaultHttp2HeadersEncoder());
} }
public DefaultHttp2FrameWriter(Http2HeadersEncoder.SensitivityDetector headersSensativityDetector) {
this(new DefaultHttp2HeadersEncoder(Http2CodecUtil.DEFAULT_HEADER_TABLE_SIZE, headersSensativityDetector));
}
public DefaultHttp2FrameWriter(Http2HeadersEncoder headersEncoder) { public DefaultHttp2FrameWriter(Http2HeadersEncoder headersEncoder) {
this.headersEncoder = headersEncoder; this.headersEncoder = headersEncoder;
maxFrameSize = DEFAULT_MAX_FRAME_SIZE; maxFrameSize = DEFAULT_MAX_FRAME_SIZE;

View File

@ -89,6 +89,8 @@ public class Http2ConnectionHandler extends ByteToMessageDecoder implements Http
private Http2Settings initialSettings = new Http2Settings(); private Http2Settings initialSettings = new Http2Settings();
private Http2FrameListener frameListener; private Http2FrameListener frameListener;
private Http2FrameLogger frameLogger; private Http2FrameLogger frameLogger;
private Http2HeadersEncoder.SensitivityDetector headersSensativityDetector =
Http2HeadersEncoder.NEVER_SENSITIVE;
private boolean validateHeaders = true; private boolean validateHeaders = true;
private boolean server = true; private boolean server = true;
private boolean encoderEnforceMaxConcurrentStreams; private boolean encoderEnforceMaxConcurrentStreams;
@ -166,6 +168,14 @@ public class Http2ConnectionHandler extends ByteToMessageDecoder implements Http
return thisB(); return thisB();
} }
/**
* Set the {@link Http2HeadersEncoder.SensitivityDetector} that will be used.
*/
public B headersSensativityDetector(Http2HeadersEncoder.SensitivityDetector headersSensativityDetector) {
this.headersSensativityDetector = checkNotNull(headersSensativityDetector, "headersSensativityDetector");
return thisB();
}
/** /**
* Create a new {@link Http2Connection} and build a new instance. * Create a new {@link Http2Connection} and build a new instance.
*/ */
@ -181,7 +191,7 @@ public class Http2ConnectionHandler extends ByteToMessageDecoder implements Http
*/ */
public final T build(Http2Connection connection) { public final T build(Http2Connection connection) {
Http2FrameReader reader = new DefaultHttp2FrameReader(validateHeaders); Http2FrameReader reader = new DefaultHttp2FrameReader(validateHeaders);
Http2FrameWriter writer = new DefaultHttp2FrameWriter(); Http2FrameWriter writer = new DefaultHttp2FrameWriter(headersSensativityDetector);
if (frameLogger != null) { if (frameLogger != null) {
reader = new Http2InboundFrameLogger(reader, frameLogger); reader = new Http2InboundFrameLogger(reader, frameLogger);
writer = new Http2OutboundFrameLogger(writer, frameLogger); writer = new Http2OutboundFrameLogger(writer, frameLogger);
@ -205,9 +215,13 @@ public class Http2ConnectionHandler extends ByteToMessageDecoder implements Http
* Build a new instance with an existing {@link Http2ConnectionDecoder} and {@link Http2ConnectionEncoder}. * Build a new instance with an existing {@link Http2ConnectionDecoder} and {@link Http2ConnectionEncoder}.
* <p> * <p>
* Methods that will be ignored due to objects already being created: * Methods that will be ignored due to objects already being created:
* <ul><li>{@link #server(boolean)}</li><li> * <ul>
* {@link #frameLogger(Http2FrameLogger)}</li><li>{@link #encoderEnforceMaxConcurrentStreams(boolean)}</li><li> * <li>{@link #server(boolean)}</li>
* {@link #encoderEnforceMaxConcurrentStreams(boolean)} (int)}</li></ul> * <li>{@link #frameLogger(Http2FrameLogger)}</li>
* <li>{@link #encoderEnforceMaxConcurrentStreams(boolean)}</li>
* <li>{@link #encoderEnforceMaxConcurrentStreams(boolean)} (int)}</li>
* <li>{@link #headersSensativityDetector(Http2HeadersEncoder.SensitivityDetector)}</li>
* </ul>
*/ */
public final T build(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder) { public final T build(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder) {
final T handler; final T handler;