All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.netty.handler.codec.http2.Http2FrameCodecBuilder Maven / Gradle / Ivy

There is a newer version: 5.0.0.Alpha2
Show newest version
/*
 * Copyright 2017 The Netty Project
 *
 * The Netty Project licenses this file to you under the Apache License,
 * version 2.0 (the "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at:
 *
 *   https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package io.netty.handler.codec.http2;

import static io.netty.util.internal.ObjectUtil.checkNotNull;

/**
 * Builder for the {@link Http2FrameCodec}.
 */
public class Http2FrameCodecBuilder extends
        AbstractHttp2ConnectionHandlerBuilder {

    private Http2FrameWriter frameWriter;

    /**
     * Allows overriding behavior of existing builder.
     * 

* Users of this constructor are responsible for invoking {@link #server(boolean)} method or overriding * {@link #isServer()} method to give the builder information if the {@link Http2Connection}(s) it creates are in * server or client mode. * * @see AbstractHttp2ConnectionHandlerBuilder */ protected Http2FrameCodecBuilder() { } Http2FrameCodecBuilder(boolean server) { server(server); // For backwards compatibility we should disable to timeout by default at this layer. gracefulShutdownTimeoutMillis(0); } /** * Creates a builder for an HTTP/2 client. */ public static Http2FrameCodecBuilder forClient() { return new Http2FrameCodecBuilder(false); } /** * Creates a builder for an HTTP/2 server. */ public static Http2FrameCodecBuilder forServer() { return new Http2FrameCodecBuilder(true); } // For testing only. Http2FrameCodecBuilder frameWriter(Http2FrameWriter frameWriter) { this.frameWriter = checkNotNull(frameWriter, "frameWriter"); return this; } @Override public Http2Settings initialSettings() { return super.initialSettings(); } @Override public Http2FrameCodecBuilder initialSettings(Http2Settings settings) { return super.initialSettings(settings); } @Override public long gracefulShutdownTimeoutMillis() { return super.gracefulShutdownTimeoutMillis(); } @Override public Http2FrameCodecBuilder gracefulShutdownTimeoutMillis(long gracefulShutdownTimeoutMillis) { return super.gracefulShutdownTimeoutMillis(gracefulShutdownTimeoutMillis); } @Override public boolean isServer() { return super.isServer(); } @Override public int maxReservedStreams() { return super.maxReservedStreams(); } @Override public Http2FrameCodecBuilder maxReservedStreams(int maxReservedStreams) { return super.maxReservedStreams(maxReservedStreams); } @Override public boolean isValidateHeaders() { return super.isValidateHeaders(); } @Override public Http2FrameCodecBuilder validateHeaders(boolean validateHeaders) { return super.validateHeaders(validateHeaders); } @Override public Http2FrameLogger frameLogger() { return super.frameLogger(); } @Override public Http2FrameCodecBuilder frameLogger(Http2FrameLogger frameLogger) { return super.frameLogger(frameLogger); } @Override public boolean encoderEnforceMaxConcurrentStreams() { return super.encoderEnforceMaxConcurrentStreams(); } @Override public Http2FrameCodecBuilder encoderEnforceMaxConcurrentStreams(boolean encoderEnforceMaxConcurrentStreams) { return super.encoderEnforceMaxConcurrentStreams(encoderEnforceMaxConcurrentStreams); } @Override public int encoderEnforceMaxQueuedControlFrames() { return super.encoderEnforceMaxQueuedControlFrames(); } @Override public Http2FrameCodecBuilder encoderEnforceMaxQueuedControlFrames(int maxQueuedControlFrames) { return super.encoderEnforceMaxQueuedControlFrames(maxQueuedControlFrames); } @Override public Http2HeadersEncoder.SensitivityDetector headerSensitivityDetector() { return super.headerSensitivityDetector(); } @Override public Http2FrameCodecBuilder headerSensitivityDetector( Http2HeadersEncoder.SensitivityDetector headerSensitivityDetector) { return super.headerSensitivityDetector(headerSensitivityDetector); } @Override public Http2FrameCodecBuilder encoderIgnoreMaxHeaderListSize(boolean ignoreMaxHeaderListSize) { return super.encoderIgnoreMaxHeaderListSize(ignoreMaxHeaderListSize); } @Override @Deprecated public Http2FrameCodecBuilder initialHuffmanDecodeCapacity(int initialHuffmanDecodeCapacity) { return super.initialHuffmanDecodeCapacity(initialHuffmanDecodeCapacity); } @Override public Http2FrameCodecBuilder autoAckSettingsFrame(boolean autoAckSettings) { return super.autoAckSettingsFrame(autoAckSettings); } @Override public Http2FrameCodecBuilder autoAckPingFrame(boolean autoAckPingFrame) { return super.autoAckPingFrame(autoAckPingFrame); } @Override public Http2FrameCodecBuilder decoupleCloseAndGoAway(boolean decoupleCloseAndGoAway) { return super.decoupleCloseAndGoAway(decoupleCloseAndGoAway); } @Override public Http2FrameCodecBuilder flushPreface(boolean flushPreface) { return super.flushPreface(flushPreface); } @Override public int decoderEnforceMaxConsecutiveEmptyDataFrames() { return super.decoderEnforceMaxConsecutiveEmptyDataFrames(); } @Override public Http2FrameCodecBuilder decoderEnforceMaxConsecutiveEmptyDataFrames(int maxConsecutiveEmptyFrames) { return super.decoderEnforceMaxConsecutiveEmptyDataFrames(maxConsecutiveEmptyFrames); } @Override public Http2FrameCodecBuilder decoderEnforceMaxRstFramesPerWindow( int maxRstFramesPerWindow, int secondsPerWindow) { return super.decoderEnforceMaxRstFramesPerWindow(maxRstFramesPerWindow, secondsPerWindow); } /** * Build a {@link Http2FrameCodec} object. */ @Override public Http2FrameCodec build() { Http2FrameWriter frameWriter = this.frameWriter; if (frameWriter != null) { // This is to support our tests and will never be executed by the user as frameWriter(...) // is package-private. DefaultHttp2Connection connection = new DefaultHttp2Connection(isServer(), maxReservedStreams()); Long maxHeaderListSize = initialSettings().maxHeaderListSize(); Http2FrameReader frameReader = new DefaultHttp2FrameReader(maxHeaderListSize == null ? new DefaultHttp2HeadersDecoder(isValidateHeaders()) : new DefaultHttp2HeadersDecoder(isValidateHeaders(), maxHeaderListSize)); if (frameLogger() != null) { frameWriter = new Http2OutboundFrameLogger(frameWriter, frameLogger()); frameReader = new Http2InboundFrameLogger(frameReader, frameLogger()); } Http2ConnectionEncoder encoder = new DefaultHttp2ConnectionEncoder(connection, frameWriter); if (encoderEnforceMaxConcurrentStreams()) { encoder = new StreamBufferingEncoder(encoder); } Http2ConnectionDecoder decoder = new DefaultHttp2ConnectionDecoder(connection, encoder, frameReader, promisedRequestVerifier(), isAutoAckSettingsFrame(), isAutoAckPingFrame(), isValidateHeaders()); int maxConsecutiveEmptyDataFrames = decoderEnforceMaxConsecutiveEmptyDataFrames(); if (maxConsecutiveEmptyDataFrames > 0) { decoder = new Http2EmptyDataFrameConnectionDecoder(decoder, maxConsecutiveEmptyDataFrames); } return build(decoder, encoder, initialSettings()); } return super.build(); } @Override protected Http2FrameCodec build( Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings) { Http2FrameCodec codec = new Http2FrameCodec(encoder, decoder, initialSettings, decoupleCloseAndGoAway(), flushPreface()); codec.gracefulShutdownTimeoutMillis(gracefulShutdownTimeoutMillis()); return codec; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy