Home / Function/ write() — netty Function Reference

write() — netty Function Reference

Architecture documentation for the write() function in HttpToHttp2ConnectionHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  7372f9aa_ae7e_50a4_48ab_f253231ab58a["write()"]
  4447759a_2f71_7328_e5e4_3e3629ebf2c1["HttpToHttp2ConnectionHandler"]
  7372f9aa_ae7e_50a4_48ab_f253231ab58a -->|defined in| 4447759a_2f71_7328_e5e4_3e3629ebf2c1
  06d6ae40_b984_beda_b815_22f978264d9c["getStreamId()"]
  7372f9aa_ae7e_50a4_48ab_f253231ab58a -->|calls| 06d6ae40_b984_beda_b815_22f978264d9c
  11c74977_305d_4e4a_d861_36d3c5d33abb["writeHeaders()"]
  7372f9aa_ae7e_50a4_48ab_f253231ab58a -->|calls| 11c74977_305d_4e4a_d861_36d3c5d33abb
  style 7372f9aa_ae7e_50a4_48ab_f253231ab58a fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/HttpToHttp2ConnectionHandler.java lines 86–152

    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {

        if (!(msg instanceof HttpMessage || msg instanceof HttpContent)) {
            ctx.write(msg, promise);
            return;
        }

        boolean release = true;
        SimpleChannelPromiseAggregator promiseAggregator =
                new SimpleChannelPromiseAggregator(promise, ctx.channel(), ctx.executor());
        try {
            Http2ConnectionEncoder encoder = encoder();
            boolean endStream = false;
            if (msg instanceof HttpMessage) {
                final HttpMessage httpMsg = (HttpMessage) msg;

                // Provide the user the opportunity to specify the streamId
                currentStreamId = getStreamId(httpMsg.headers());

                // Add HttpScheme if it's defined in constructor and header does not contain it.
                if (httpScheme != null &&
                        !httpMsg.headers().contains(HttpConversionUtil.ExtensionHeaderNames.SCHEME.text())) {
                    httpMsg.headers().set(HttpConversionUtil.ExtensionHeaderNames.SCHEME.text(), httpScheme.name());
                }

                // Convert and write the headers.
                Http2Headers http2Headers = HttpConversionUtil.toHttp2Headers(httpMsg, validateHeaders);
                endStream = msg instanceof FullHttpMessage && !((FullHttpMessage) msg).content().isReadable();
                writeHeaders(ctx, encoder, currentStreamId, httpMsg.headers(), http2Headers,
                        endStream, promiseAggregator);
            }

            if (!endStream && msg instanceof HttpContent) {
                boolean isLastContent = false;
                HttpHeaders trailers = EmptyHttpHeaders.INSTANCE;
                Http2Headers http2Trailers = EmptyHttp2Headers.INSTANCE;
                if (msg instanceof LastHttpContent) {
                    isLastContent = true;

                    // Convert any trailing headers.
                    final LastHttpContent lastContent = (LastHttpContent) msg;
                    trailers = lastContent.trailingHeaders();
                    http2Trailers = HttpConversionUtil.toHttp2Headers(trailers, validateHeaders);
                }

                // Write the data
                final ByteBuf content = ((HttpContent) msg).content();
                endStream = isLastContent && trailers.isEmpty();
                encoder.writeData(ctx, currentStreamId, content, 0, endStream, promiseAggregator.newPromise());
                release = false;

                if (!trailers.isEmpty()) {
                    // Write trailing headers.
                    writeHeaders(ctx, encoder, currentStreamId, trailers, http2Trailers, true, promiseAggregator);
                }
            }
        } catch (Throwable t) {
            onError(ctx, true, t);
            promiseAggregator.setFailure(t);
        } finally {
            if (release) {
                ReferenceCountUtil.release(msg);
            }
            promiseAggregator.doneAllocatingPromises();
        }
    }

Domain

Subdomains

Frequently Asked Questions

What does write() do?
write() is a function in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/HttpToHttp2ConnectionHandler.java.
Where is write() defined?
write() is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/HttpToHttp2ConnectionHandler.java at line 86.
What does write() call?
write() calls 2 function(s): getStreamId, writeHeaders.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free