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

◆ OnByte()

void System.Net.Http.QPack.QPackDecoder.OnByte ( byte b,
IHttpHeadersHandler handler )
inlineprivate

Definition at line 108 of file QPackDecoder.cs.

109 {
110 int result;
111 switch (_state)
112 {
113 case State.RequiredInsertCount:
114 if (_integerDecoder.BeginTryDecode(b, 8, out result))
115 {
116 OnRequiredInsertCount(result);
117 }
118 else
119 {
120 _state = State.RequiredInsertCountContinue;
121 }
122 break;
123 case State.RequiredInsertCountContinue:
124 if (_integerDecoder.TryDecode(b, out result))
125 {
126 OnRequiredInsertCount(result);
127 }
128 break;
129 case State.Base:
130 {
131 int num = -129 & b;
132 if (_integerDecoder.BeginTryDecode(b, 7, out result))
133 {
134 OnBase(result);
135 }
136 else
137 {
138 _state = State.BaseContinue;
139 }
140 break;
141 }
142 case State.BaseContinue:
143 if (_integerDecoder.TryDecode(b, out result))
144 {
145 OnBase(result);
146 }
147 break;
148 case State.CompressedHeaders:
150 {
151 case 24:
152 {
153 int num = 0x3F & b;
154 if ((b & 0x40) != 64)
155 {
157 }
158 if (_integerDecoder.BeginTryDecode((byte)num, 6, out result))
159 {
160 OnIndexedHeaderField(result, handler);
161 }
162 else
163 {
164 _state = State.HeaderFieldIndex;
165 }
166 break;
167 }
168 case 25:
169 {
170 if ((0x10 & b) != 16)
171 {
173 }
174 int num = b & 0xF;
175 if (_integerDecoder.BeginTryDecode((byte)num, 4, out result))
176 {
177 OnIndexedHeaderName(result);
178 }
179 else
180 {
181 _state = State.HeaderNameIndex;
182 }
183 break;
184 }
185 case 26:
186 {
187 _huffman = (b & 8) != 0;
188 int num = b & 7;
189 if (_integerDecoder.BeginTryDecode((byte)num, 3, out result))
190 {
191 if (result == 0)
192 {
193 throw new QPackDecodingException(System.SR.Format(System.SR.net_http_invalid_header_name, ""));
194 }
195 OnStringLength(result, State.HeaderName);
196 }
197 else
198 {
199 _state = State.HeaderNameLength;
200 }
201 break;
202 }
203 case 27:
204 {
205 int num = -241 & b;
206 if (_integerDecoder.BeginTryDecode((byte)num, 4, out result))
207 {
208 OnPostBaseIndex(result, handler);
209 }
210 else
211 {
212 _state = State.PostBaseIndex;
213 }
214 break;
215 }
216 default:
217 {
218 int num = b & 7;
219 if (_integerDecoder.BeginTryDecode((byte)num, 3, out result))
220 {
222 }
223 else
224 {
225 _state = State.HeaderNameIndexPostBase;
226 }
227 break;
228 }
229 }
230 break;
231 case State.HeaderNameLength:
232 if (_integerDecoder.TryDecode(b, out result))
233 {
234 if (result == 0)
235 {
236 throw new QPackDecodingException(System.SR.Format(System.SR.net_http_invalid_header_name, ""));
237 }
238 OnStringLength(result, State.HeaderName);
239 }
240 break;
241 case State.HeaderName:
244 {
245 OnString(State.HeaderValueLength);
246 }
247 break;
248 case State.HeaderNameIndex:
249 if (_integerDecoder.TryDecode(b, out result))
250 {
251 OnIndexedHeaderName(result);
252 }
253 break;
254 case State.HeaderNameIndexPostBase:
255 if (_integerDecoder.TryDecode(b, out result))
256 {
258 }
259 break;
260 case State.HeaderValueLength:
261 _huffman = (b & 0x80) != 0;
262 if (_integerDecoder.BeginTryDecode((byte)(b & 0xFFFFFF7Fu), 7, out result))
263 {
264 OnStringLength(result, State.HeaderValue);
265 if (result == 0)
266 {
267 ProcessHeaderValue(handler);
268 }
269 }
270 else
271 {
272 _state = State.HeaderValueLengthContinue;
273 }
274 break;
275 case State.HeaderValueLengthContinue:
276 if (_integerDecoder.TryDecode(b, out result))
277 {
278 OnStringLength(result, State.HeaderValue);
279 if (result == 0)
280 {
281 ProcessHeaderValue(handler);
282 }
283 }
284 break;
285 case State.HeaderValue:
288 {
289 ProcessHeaderValue(handler);
290 }
291 break;
292 case State.HeaderFieldIndex:
293 if (_integerDecoder.TryDecode(b, out result))
294 {
295 OnIndexedHeaderField(result, handler);
296 }
297 break;
298 case State.PostBaseIndex:
299 if (_integerDecoder.TryDecode(b, out result))
300 {
301 OnPostBaseIndex(result, handler);
302 }
303 break;
304 case State.HeaderNameLengthContinue:
305 case State.DynamicTableSizeUpdate:
306 case State.LiteralHeaderFieldWithNameReference:
307 break;
308 }
309 }
void OnPostBaseIndex(int intResult, IHttpHeadersHandler handler)
void OnIndexedHeaderField(int index, IHttpHeadersHandler handler)
void ProcessHeaderValue(IHttpHeadersHandler handler)
void OnIndexedHeaderNamePostBase(int index)
void OnRequiredInsertCount(int requiredInsertCount)
void OnStringLength(int length, State nextState)
static int LeadingZeroCount(uint value)
static string net_http_invalid_header_name
Definition SR.cs:180
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
Definition SR.cs:7
bool BeginTryDecode(byte b, int prefixLength, out int result)
bool TryDecode(byte b, out int result)

References System.Net.Http.QPack.QPackDecoder._huffman, System.Net.Http.QPack.QPackDecoder._integerDecoder, System.Net.Http.QPack.QPackDecoder._state, System.Net.Http.QPack.QPackDecoder._stringIndex, System.Net.Http.QPack.QPackDecoder._stringLength, System.Net.Http.QPack.QPackDecoder._stringOctets, System.Net.Http.HPack.IntegerDecoder.BeginTryDecode(), System.SR.Format(), System.Numerics.BitOperations.LeadingZeroCount(), System.SR.net_http_invalid_header_name, System.Net.Http.QPack.QPackDecoder.OnBase(), System.Net.Http.QPack.QPackDecoder.OnIndexedHeaderField(), System.Net.Http.QPack.QPackDecoder.OnIndexedHeaderName(), System.Net.Http.QPack.QPackDecoder.OnIndexedHeaderNamePostBase(), System.Net.Http.QPack.QPackDecoder.OnPostBaseIndex(), System.Net.Http.QPack.QPackDecoder.OnRequiredInsertCount(), System.Net.Http.QPack.QPackDecoder.OnString(), System.Net.Http.QPack.QPackDecoder.OnStringLength(), System.Net.Http.QPack.QPackDecoder.ProcessHeaderValue(), System.Net.Http.QPack.QPackDecoder.ThrowDynamicTableNotSupported(), and System.Net.Http.HPack.IntegerDecoder.TryDecode().

Referenced by System.Net.Http.QPack.QPackDecoder.Decode().