Package io.grpc.netty

Class GrpcHttp2HeadersUtils.GrpcHttp2InboundHeaders

java.lang.Object
io.grpc.netty.AbstractHttp2Headers
io.grpc.netty.GrpcHttp2HeadersUtils.GrpcHttp2InboundHeaders
All Implemented Interfaces:
io.netty.handler.codec.Headers<CharSequence,CharSequence,io.netty.handler.codec.http2.Http2Headers>, io.netty.handler.codec.http2.Http2Headers, Iterable<Map.Entry<CharSequence,CharSequence>>
Direct Known Subclasses:
GrpcHttp2HeadersUtils.GrpcHttp2RequestHeaders, GrpcHttp2HeadersUtils.GrpcHttp2ResponseHeaders
Enclosing class:
GrpcHttp2HeadersUtils

abstract static class GrpcHttp2HeadersUtils.GrpcHttp2InboundHeaders extends AbstractHttp2Headers
A Http2Headers implementation optimized for inbound/received headers.

Header names and values are stored in simple arrays, which makes insert run in O(1) and retrievial a O(n). Header name equality is not determined by the equals implementation of CharSequence type, but by comparing two names byte to byte.

All CharSequence input parameters and return values are required to be of type AsciiString.

  • Field Details

    • binaryHeaderSuffix

      private static final io.netty.util.AsciiString binaryHeaderSuffix
    • namesAndValues

      private byte[][] namesAndValues
    • values

      private io.netty.util.AsciiString[] values
    • namesAndValuesIdx

      private int namesAndValuesIdx
  • Constructor Details

    • GrpcHttp2InboundHeaders

      GrpcHttp2InboundHeaders(int numHeadersGuess)
  • Method Details

    • add

      protected io.netty.handler.codec.http2.Http2Headers add(io.netty.util.AsciiString name, io.netty.util.AsciiString value)
    • addHeader

      private void addHeader(io.netty.util.AsciiString value, byte[] nameBytes, byte[] valueBytes)
    • get

      protected CharSequence get(io.netty.util.AsciiString name)
    • contains

      public boolean contains(CharSequence name)
      Specified by:
      contains in interface io.netty.handler.codec.Headers<CharSequence,CharSequence,io.netty.handler.codec.http2.Http2Headers>
      Overrides:
      contains in class AbstractHttp2Headers
    • status

      public CharSequence status()
      Specified by:
      status in interface io.netty.handler.codec.http2.Http2Headers
      Overrides:
      status in class AbstractHttp2Headers
    • getAll

      public List<CharSequence> getAll(CharSequence csName)
      Specified by:
      getAll in interface io.netty.handler.codec.Headers<CharSequence,CharSequence,io.netty.handler.codec.http2.Http2Headers>
      Overrides:
      getAll in class AbstractHttp2Headers
    • remove

      @CanIgnoreReturnValue public boolean remove(CharSequence csName)
      Specified by:
      remove in interface io.netty.handler.codec.Headers<CharSequence,CharSequence,io.netty.handler.codec.http2.Http2Headers>
      Overrides:
      remove in class AbstractHttp2Headers
    • set

      public io.netty.handler.codec.http2.Http2Headers set(CharSequence name, CharSequence value)
      Specified by:
      set in interface io.netty.handler.codec.Headers<CharSequence,CharSequence,io.netty.handler.codec.http2.Http2Headers>
      Overrides:
      set in class AbstractHttp2Headers
    • setLong

      public io.netty.handler.codec.http2.Http2Headers setLong(CharSequence name, long value)
      Specified by:
      setLong in interface io.netty.handler.codec.Headers<CharSequence,CharSequence,io.netty.handler.codec.http2.Http2Headers>
      Overrides:
      setLong in class AbstractHttp2Headers
    • namesAndValues

      byte[][] namesAndValues()
      Returns the header names and values as bytes. An even numbered index contains the byte[] representation of a header name (in insertion order), and the subsequent odd index number contains the corresponding header value.

      The values of binary headers (with a -bin suffix), are already base64 decoded.

      The array may contain several null values at the end. A null value an index means that all higher numbered indices also contain null values.

    • numHeaders

      protected int numHeaders()
      Returns the number of none-null headers in namesAndValues().
    • equals

      protected static boolean equals(io.netty.util.AsciiString str0, byte[] str1)
    • equals

      protected static boolean equals(io.netty.util.AsciiString str0, io.netty.util.AsciiString str1)
    • equals

      protected static boolean equals(byte[] bytes0, int offset0, int length0, byte[] bytes1, int offset1, int length1)
    • bytes

      protected static byte[] bytes(io.netty.util.AsciiString str)
    • requireAsciiString

      protected static io.netty.util.AsciiString requireAsciiString(CharSequence cs)
    • isPseudoHeader

      protected static boolean isPseudoHeader(io.netty.util.AsciiString str)
    • validateName

      protected io.netty.util.AsciiString validateName(io.netty.util.AsciiString str)
    • expandHeadersAndValues

      private void expandHeadersAndValues()
    • size

      public int size()
      Specified by:
      size in interface io.netty.handler.codec.Headers<CharSequence,CharSequence,io.netty.handler.codec.http2.Http2Headers>
      Overrides:
      size in class AbstractHttp2Headers
    • iterator

      Specified by:
      iterator in interface io.netty.handler.codec.Headers<CharSequence,CharSequence,io.netty.handler.codec.http2.Http2Headers>
      Specified by:
      iterator in interface io.netty.handler.codec.http2.Http2Headers
      Specified by:
      iterator in interface Iterable<Map.Entry<CharSequence,CharSequence>>
      Overrides:
      iterator in class AbstractHttp2Headers
    • appendNameAndValue

      protected static void appendNameAndValue(StringBuilder builder, CharSequence name, CharSequence value, boolean prependSeparator)
    • namesAndValuesToImmutableList

      private List<Map.Entry<CharSequence,CharSequence>> namesAndValuesToImmutableList()
    • namesAndValuesToString

      protected final String namesAndValuesToString()