AbstractHttp2StreamChannel Class — netty Architecture
Architecture documentation for the AbstractHttp2StreamChannel class in AbstractHttp2StreamChannel.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD bcb58015_0c85_17e2_f1b3_0c1ad3aaa388["AbstractHttp2StreamChannel"] 53b73d84_de3f_a5ff_9f0d_ff98834dbbb4["AbstractHttp2StreamChannel.java"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|defined in| 53b73d84_de3f_a5ff_9f0d_ff98834dbbb4 fb715e07_c12a_8071_8ba2_a2563036031e["windowUpdateFrameWriteComplete()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| fb715e07_c12a_8071_8ba2_a2563036031e 913eecb4_a5fd_00ee_6dbc_41735192e10a["AbstractHttp2StreamChannel()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 913eecb4_a5fd_00ee_6dbc_41735192e10a c9703b2f_6638_8afe_037a_9077f1bed51c["incrementPendingOutboundBytes()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| c9703b2f_6638_8afe_037a_9077f1bed51c 7134f1fa_478b_d2e6_89ea_148d0d477e26["decrementPendingOutboundBytes()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 7134f1fa_478b_d2e6_89ea_148d0d477e26 31e22389_48c3_fa0d_d6a8_eccb2b0b119b["trySetWritable()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 31e22389_48c3_fa0d_d6a8_eccb2b0b119b 83a9ef69_d166_c780_667b_643909762238["setWritable()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 83a9ef69_d166_c780_667b_643909762238 0e69b272_0119_282e_1d37_1a15c86716b8["setUnwritable()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 0e69b272_0119_282e_1d37_1a15c86716b8 a896dd21_356b_4301_0b7c_d2512527d029["fireChannelWritabilityChanged()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| a896dd21_356b_4301_0b7c_d2512527d029 71a0e7c0_a8ce_4118_8ca3_9f5c4258c1e1["Http2FrameStream()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 71a0e7c0_a8ce_4118_8ca3_9f5c4258c1e1 09f1c7af_1307_c63a_a3fa_d40081433ed2["closeOutbound()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 09f1c7af_1307_c63a_a3fa_d40081433ed2 743f5577_bb22_31db_6036_66e3afe5136f["streamClosed()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 743f5577_bb22_31db_6036_66e3afe5136f 085c1f5c_75e2_7e5d_b85d_6c24107b378f["ChannelMetadata()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 085c1f5c_75e2_7e5d_b85d_6c24107b378f 4bc62bc6_dff3_bda3_b698_3d2cc11f8ff5["ChannelConfig()"] bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 4bc62bc6_dff3_bda3_b698_3d2cc11f8ff5
Relationship Graph
Source Code
codec-http2/src/main/java/io/netty/handler/codec/http2/AbstractHttp2StreamChannel.java lines 65–1289
abstract class AbstractHttp2StreamChannel extends DefaultAttributeMap implements Http2StreamChannel {
static final Http2FrameStreamVisitor WRITABLE_VISITOR = new Http2FrameStreamVisitor() {
@Override
public boolean visit(Http2FrameStream stream) {
final AbstractHttp2StreamChannel childChannel = (AbstractHttp2StreamChannel)
((DefaultHttp2FrameStream) stream).attachment;
childChannel.trySetWritable();
return true;
}
};
static final Http2FrameStreamVisitor CHANNEL_INPUT_SHUTDOWN_READ_COMPLETE_VISITOR =
new UserEventStreamVisitor(ChannelInputShutdownReadComplete.INSTANCE);
static final Http2FrameStreamVisitor CHANNEL_OUTPUT_SHUTDOWN_EVENT_VISITOR =
new UserEventStreamVisitor(ChannelOutputShutdownEvent.INSTANCE);
static final Http2FrameStreamVisitor SSL_CLOSE_COMPLETION_EVENT_VISITOR =
new UserEventStreamVisitor(SslCloseCompletionEvent.SUCCESS);
private static final InternalLogger logger = InternalLoggerFactory.getInstance(AbstractHttp2StreamChannel.class);
private static final ChannelMetadata METADATA = new ChannelMetadata(false, 16);
/**
* Number of bytes to consider non-payload messages. 9 is arbitrary, but also the minimum size of an HTTP/2 frame.
* Primarily is non-zero.
*/
private static final int MIN_HTTP2_FRAME_SIZE = 9;
/**
* {@link Http2FrameStreamVisitor} that fires the user event for every active stream pipeline.
*/
private static final class UserEventStreamVisitor implements Http2FrameStreamVisitor {
private final Object event;
UserEventStreamVisitor(Object event) {
this.event = checkNotNull(event, "event");
}
@Override
public boolean visit(Http2FrameStream stream) {
final AbstractHttp2StreamChannel childChannel = (AbstractHttp2StreamChannel)
((DefaultHttp2FrameStream) stream).attachment;
childChannel.pipeline().fireUserEventTriggered(event);
return true;
}
}
/**
* Returns the flow-control size for DATA frames, and {@value MIN_HTTP2_FRAME_SIZE} for all other frames.
*/
private static final class FlowControlledFrameSizeEstimator implements MessageSizeEstimator {
static final FlowControlledFrameSizeEstimator INSTANCE = new FlowControlledFrameSizeEstimator();
private static final Handle HANDLE_INSTANCE = new Handle() {
@Override
public int size(Object msg) {
return msg instanceof Http2DataFrame ?
// Guard against overflow.
(int) min(Integer.MAX_VALUE, ((Http2DataFrame) msg).initialFlowControlledBytes() +
(long) MIN_HTTP2_FRAME_SIZE) : MIN_HTTP2_FRAME_SIZE;
}
};
@Override
public Handle newHandle() {
return HANDLE_INSTANCE;
}
}
private static final AtomicLongFieldUpdater<AbstractHttp2StreamChannel> TOTAL_PENDING_SIZE_UPDATER =
AtomicLongFieldUpdater.newUpdater(AbstractHttp2StreamChannel.class, "totalPendingSize");
private static final AtomicIntegerFieldUpdater<AbstractHttp2StreamChannel> UNWRITABLE_UPDATER =
AtomicIntegerFieldUpdater.newUpdater(AbstractHttp2StreamChannel.class, "unwritable");
private static void windowUpdateFrameWriteComplete(ChannelFuture future, Channel streamChannel) {
Source
Frequently Asked Questions
What is the AbstractHttp2StreamChannel class?
AbstractHttp2StreamChannel is a class in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/AbstractHttp2StreamChannel.java.
Where is AbstractHttp2StreamChannel defined?
AbstractHttp2StreamChannel is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/AbstractHttp2StreamChannel.java at line 65.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free