Home / Class/ DefaultHttp3Headers Class — netty Architecture

DefaultHttp3Headers Class — netty Architecture

Architecture documentation for the DefaultHttp3Headers class in DefaultHttp3Headers.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be["DefaultHttp3Headers"]
  471ace52_56d1_efc9_f810_e6548706aceb["DefaultHttp3Headers.java"]
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be -->|defined in| 471ace52_56d1_efc9_f810_e6548706aceb
  48f6b0aa_2594_92e1_67c8_c84592aa7397["DefaultHttp3Headers()"]
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be -->|method| 48f6b0aa_2594_92e1_67c8_c84592aa7397
  6149bbb1_7c62_1e32_6547_5943aaa57c5a["Http3Headers()"]
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be -->|method| 6149bbb1_7c62_1e32_6547_5943aaa57c5a
  f0e95fd6_5fbe_2fc2_34ff_d73daa609e40["equals()"]
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be -->|method| f0e95fd6_5fbe_2fc2_34ff_d73daa609e40
  55b22d40_d885_21c7_8189_fb0954f26051["hashCode()"]
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be -->|method| 55b22d40_d885_21c7_8189_fb0954f26051
  840e6859_0dff_80db_1eb1_bcd6e875dba3["CharSequence()"]
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be -->|method| 840e6859_0dff_80db_1eb1_bcd6e875dba3
  3f630cd3_950e_3d5d_58b1_05bbc0018d0a["contains()"]
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be -->|method| 3f630cd3_950e_3d5d_58b1_05bbc0018d0a
  d0d45aa9_0777_e38a_8d21_971a9066900f["newHeaderEntry()"]
  9ea6846f_c0ae_4f16_d33a_3284ee60f4be -->|method| d0d45aa9_0777_e38a_8d21_971a9066900f

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3Headers.java lines 29–226

public final class DefaultHttp3Headers
        extends DefaultHeaders<CharSequence, CharSequence, Http3Headers> implements Http3Headers {
    private static final ByteProcessor HTTP3_NAME_VALIDATOR_PROCESSOR = new ByteProcessor() {
        @Override
        public boolean process(byte value) {
            return !isUpperCase(value);
        }
    };
    static final NameValidator<CharSequence> HTTP3_NAME_VALIDATOR = new NameValidator<CharSequence>() {
        @Override
        public void validateName(@Nullable CharSequence name) {
            if (name == null || name.length() == 0) {
                throw new Http3HeadersValidationException(String.format("empty headers are not allowed [%s]", name));
            }
            if (name instanceof AsciiString) {
                final int index;
                try {
                    index = ((AsciiString) name).forEachByte(HTTP3_NAME_VALIDATOR_PROCESSOR);
                } catch (Http3HeadersValidationException e) {
                    throw e;
                } catch (Throwable t) {
                    throw new Http3HeadersValidationException(
                            String.format("unexpected error. invalid header name [%s]", name), t);
                }

                if (index != -1) {
                    throw new Http3HeadersValidationException(String.format("invalid header name [%s]", name));
                }
            } else {
                for (int i = 0; i < name.length(); ++i) {
                    if (isUpperCase(name.charAt(i))) {
                        throw new Http3HeadersValidationException(String.format("invalid header name [%s]", name));
                    }
                }
            }
        }
    };

    private HeaderEntry<CharSequence, CharSequence> firstNonPseudo = head;

    /**
     * Create a new instance.
     * <p>
     * Header names will be validated according to
     * <a href="https://tools.ietf.org/html/rfc7540">rfc7540</a>.
     */
    public DefaultHttp3Headers() {
        this(true);
    }

    /**
     * Create a new instance.
     * @param validate {@code true} to validate header names according to
     * <a href="https://tools.ietf.org/html/rfc7540">rfc7540</a>. {@code false} to not validate header names.
     */
    @SuppressWarnings("unchecked")
    public DefaultHttp3Headers(boolean validate) {
        // Case sensitive compare is used because it is cheaper, and header validation can be used to catch invalid
        // headers.
        super(CASE_SENSITIVE_HASHER,
              CharSequenceValueConverter.INSTANCE,
              validate ? HTTP3_NAME_VALIDATOR : NameValidator.NOT_NULL);
    }

    /**
     * Create a new instance.
     * @param validate {@code true} to validate header names according to
     * <a href="https://tools.ietf.org/html/rfc7540">rfc7540</a>. {@code false} to not validate header names.
     * @param arraySizeHint A hint as to how large the hash data structure should be.
     * The next positive power of two will be used. An upper bound may be enforced.
     */
    @SuppressWarnings("unchecked")
    public DefaultHttp3Headers(boolean validate, int arraySizeHint) {
        // Case sensitive compare is used because it is cheaper, and header validation can be used to catch invalid
        // headers.
        super(CASE_SENSITIVE_HASHER,
              CharSequenceValueConverter.INSTANCE,
              validate ? HTTP3_NAME_VALIDATOR : NameValidator.NOT_NULL,
              arraySizeHint);
    }

Frequently Asked Questions

What is the DefaultHttp3Headers class?
DefaultHttp3Headers is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3Headers.java.
Where is DefaultHttp3Headers defined?
DefaultHttp3Headers is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3Headers.java at line 29.

Analyze Your Own Codebase

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

Try Supermodel Free