59 public HPackDecoder(
int maxDynamicTableSize = 4096,
int maxHeadersLength = 65536)
60 : this(maxDynamicTableSize, maxHeadersLength, new
DynamicTable(maxDynamicTableSize))
88 Parse(data, ref currentIndex, handler);
90 case State.HeaderFieldIndex:
93 case State.HeaderNameIndex:
96 case State.HeaderNameLength:
99 case State.HeaderNameLengthContinue:
102 case State.HeaderName:
105 case State.HeaderValueLength:
108 case State.HeaderValueLengthContinue:
111 case State.HeaderValue:
114 case State.DynamicTableSizeUpdate:
121 while (currentIndex < data.
Length);
144 if (currentIndex >= data.
Length)
148 byte b = data[currentIndex++];
207 if (currentIndex >= data.
Length)
211 byte b = data[currentIndex++];
231 if (currentIndex >= data.
Length)
235 byte b = data[currentIndex++];
396 handler.
OnHeader(dynamicHeader.Name, dynamicHeader.Value);
449 int Decode(ref
byte[] dst)
471 while (currentIndex < data.
Length)
486 return (b & 0x80) != 0;
static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count)
static byte Min(byte val1, byte val2)
static byte Max(byte val1, byte val2)
void Insert(ReadOnlySpan< byte > name, ReadOnlySpan< byte > value)
static ref readonly HeaderField Get(int index)
void OnIndexedHeaderField(int index, IHttpHeadersHandler handler)
void DecodeInternal(ReadOnlySpan< byte > data, IHttpHeadersHandler handler)
readonly int _maxHeadersLength
readonly int _maxDynamicTableSize
readonly DynamicTable _dynamicTable
bool TryDecodeInteger(ReadOnlySpan< byte > data, ref int currentIndex, out int result)
@ HeaderValueLengthContinue
@ HeaderNameLengthContinue
ref readonly HeaderField GetDynamicHeader(int index)
IntegerDecoder _integerDecoder
void ParseHeaderValueLength(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
void Decode(ReadOnlySpan< byte > data, bool endHeaders, IHttpHeadersHandler handler)
void EnsureStringCapacity(ref byte[] dst)
void ParseHeaderFieldIndex(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
HPackDecoder(int maxDynamicTableSize, int maxHeadersLength, DynamicTable dynamicTable)
HPackDecoder(int maxDynamicTableSize=4096, int maxHeadersLength=65536)
void OnString(State nextState)
byte[] _headerValueOctets
void ParseHeaderNameLength(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
void ParseLiteralHeaderField(ReadOnlySpan< byte > data, ref int currentIndex, byte b, byte mask, byte indexPrefix, bool index, IHttpHeadersHandler handler)
static bool IsHuffmanEncoded(byte b)
void OnIndexedHeaderName(int index)
void OnStringLength(int length, State nextState)
void ParseDynamicTableSizeUpdate(ReadOnlySpan< byte > data, ref int currentIndex)
void ParseHeaderNameLengthContinue(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
int int? length _headerValueRange
void ProcessHeaderValue(ReadOnlySpan< byte > data, IHttpHeadersHandler handler)
void ParseHeaderValue(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
void SetDynamicHeaderTableSize(int size)
void Parse(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
int int? length _headerNameRange
void ParseHeaderName(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
void ParseHeaderValueLengthContinue(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
void CheckIncompleteHeaderBlock(bool endHeaders)
void ParseHeaderNameIndex(ReadOnlySpan< byte > data, ref int currentIndex, IHttpHeadersHandler handler)
static int Decode(ReadOnlySpan< byte > src, ref byte[] dstArray)
static int LeadingZeroCount(uint value)
static string net_http_hpack_late_dynamic_table_size_update
static string net_http_hpack_invalid_index
static string net_http_invalid_header_name
static string net_http_hpack_huffman_decode_failed
static string Format(string resourceFormat, object p1)
static string net_http_headers_exceeded_length
static string net_http_hpack_incomplete_header_block
static string net_http_hpack_large_table_size_update
static string net_http_hpack_unexpected_end
void OnStaticIndexedHeader(int index)
void OnHeader(ReadOnlySpan< byte > name, ReadOnlySpan< byte > value)
bool BeginTryDecode(byte b, int prefixLength, out int result)
bool TryDecode(byte b, out int result)
void CopyTo(Span< T > destination)
ReadOnlySpan< T > Slice(int start)