Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Decode()

static int System.Net.Http.HPack.Huffman.Decode ( ReadOnlySpan< byte > src,
ref byte[] dstArray )
inlinestatic

Definition at line 118 of file Huffman.cs.

119 {
120 Span<byte> span = dstArray;
121 ushort[] array = s_decodingTree;
122 int num = 0;
123 uint num2 = 0u;
124 int num3 = 0;
125 int num4 = 0;
126 int num5 = 0;
127 while (num4 < src.Length)
128 {
129 num2 <<= 8;
130 num2 |= src[num4++];
131 num3 += 8;
132 do
133 {
134 int num6 = (byte)(num2 >> num3 - 8);
135 int num7 = array[(num << 8) + num6];
136 if (num7 < 32768)
137 {
138 if (num5 == span.Length)
139 {
140 Array.Resize(ref dstArray, span.Length * 2);
141 span = dstArray;
142 }
143 span[num5++] = (byte)num7;
144 num = 0;
145 num3 -= num7 >> 8;
146 }
147 else
148 {
149 num = (num7 & 0x7F00) >> 8;
150 if (num == 0)
151 {
152 throw new HuffmanDecodingException(System.SR.net_http_hpack_huffman_decode_failed);
153 }
154 num3 -= 8;
155 }
156 }
157 while (num3 >= 8);
158 }
159 while (num3 > 0)
160 {
161 if (num == 0)
162 {
163 uint num8 = uint.MaxValue >> 32 - num3;
164 if ((num2 & num8) == num8)
165 {
166 break;
167 }
168 }
169 int num6 = (byte)(num2 << 8 - num3);
170 int num9 = array[(num << 8) + num6];
171 if (num9 < 32768)
172 {
173 num3 -= num9 >> 8;
174 if (num3 < 0)
175 {
176 throw new HuffmanDecodingException(System.SR.net_http_hpack_huffman_decode_failed);
177 }
178 if (num5 == span.Length)
179 {
180 Array.Resize(ref dstArray, span.Length * 2);
181 span = dstArray;
182 }
183 span[num5++] = (byte)num9;
184 num = 0;
185 continue;
186 }
187 throw new HuffmanDecodingException(System.SR.net_http_hpack_huffman_decode_failed);
188 }
189 if (num != 0)
190 {
191 throw new HuffmanDecodingException(System.SR.net_http_hpack_huffman_decode_failed);
192 }
193 return num5;
194 }
static readonly ushort[] s_decodingTree
Definition Huffman.cs:35
static string net_http_hpack_huffman_decode_failed
Definition SR.cs:160
Definition SR.cs:7

References System.array, System.ReadOnlySpan< T >.Length, System.Span< T >.Length, System.SR.net_http_hpack_huffman_decode_failed, and System.Net.Http.HPack.Huffman.s_decodingTree.

Referenced by System.Net.Http.HPack.HPackDecoder.OnString(), and System.Net.Http.QPack.QPackDecoder.OnString().