Home / Function/ readClientPrefaceString() — netty Function Reference

readClientPrefaceString() — netty Function Reference

Architecture documentation for the readClientPrefaceString() function in Http2ConnectionHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  52c5c05c_e3b5_8aff_b159_87aaed064f8f["readClientPrefaceString()"]
  83642a58_aebe_1c6a_ae68_9c2017752662["PrefaceDecoder"]
  52c5c05c_e3b5_8aff_b159_87aaed064f8f -->|defined in| 83642a58_aebe_1c6a_ae68_9c2017752662
  7a6947b9_edc8_6ed8_f6ad_f257a2519043["decode()"]
  7a6947b9_edc8_6ed8_f6ad_f257a2519043 -->|calls| 52c5c05c_e3b5_8aff_b159_87aaed064f8f
  style 52c5c05c_e3b5_8aff_b159_87aaed064f8f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/Http2ConnectionHandler.java lines 302–336

        private boolean readClientPrefaceString(ByteBuf in) throws Http2Exception {
            if (clientPrefaceString == null) {
                return true;
            }

            int prefaceRemaining = clientPrefaceString.readableBytes();
            int bytesRead = min(in.readableBytes(), prefaceRemaining);

            // If the input so far doesn't match the preface, break the connection.
            if (bytesRead == 0 || !ByteBufUtil.equals(in, in.readerIndex(),
                                                      clientPrefaceString, clientPrefaceString.readerIndex(),
                                                      bytesRead)) {
                int maxSearch = 1024; // picked because 512 is too little, and 2048 too much
                int http1Index =
                    ByteBufUtil.indexOf(HTTP_1_X_BUF, in.slice(in.readerIndex(), min(in.readableBytes(), maxSearch)));
                if (http1Index != -1) {
                    String chunk = in.toString(in.readerIndex(), http1Index - in.readerIndex(), CharsetUtil.US_ASCII);
                    throw connectionError(PROTOCOL_ERROR, "Unexpected HTTP/1.x request: %s", chunk);
                }
                String receivedBytes = hexDump(in, in.readerIndex(),
                                               min(in.readableBytes(), clientPrefaceString.readableBytes()));
                throw connectionError(PROTOCOL_ERROR, "HTTP/2 client preface string missing or corrupt. " +
                                                      "Hex dump for received bytes: %s", receivedBytes);
            }
            in.skipBytes(bytesRead);
            clientPrefaceString.skipBytes(bytesRead);

            if (!clientPrefaceString.isReadable()) {
                // Entire preface has been read.
                clientPrefaceString.release();
                clientPrefaceString = null;
                return true;
            }
            return false;
        }

Domain

Subdomains

Called By

Frequently Asked Questions

What does readClientPrefaceString() do?
readClientPrefaceString() is a function in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/Http2ConnectionHandler.java.
Where is readClientPrefaceString() defined?
readClientPrefaceString() is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/Http2ConnectionHandler.java at line 302.
What calls readClientPrefaceString()?
readClientPrefaceString() is called by 1 function(s): decode.

Analyze Your Own Codebase

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

Try Supermodel Free