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

◆ ReadChunkFromConnectionBuffer()

ReadOnlyMemory< byte > System.Net.Http.HttpConnection.ChunkedEncodingReadStream.ReadChunkFromConnectionBuffer ( int maxBytesToRead,
CancellationTokenRegistration cancellationRegistration )
inlineprivate

Definition at line 207 of file HttpConnection.cs.

208 {
209 try
210 {
212 switch (_state)
213 {
214 case ParsingState.ExpectChunkHeader:
215 {
216 _connection._allowedReadLineBytes = 16384;
218 {
219 return default(ReadOnlyMemory<byte>);
220 }
221 if (!Utf8Parser.TryParse(line, out ulong value, out int bytesConsumed, 'X'))
222 {
223 throw new IOException(System.SR.Format(System.SR.net_http_invalid_response_chunk_header_invalid, BitConverter.ToString(line.ToArray())));
224 }
226 if (bytesConsumed != line.Length)
227 {
229 }
230 if (value != 0)
231 {
232 _state = ParsingState.ExpectChunkData;
233 goto case ParsingState.ExpectChunkData;
234 }
235 _state = ParsingState.ConsumeTrailers;
236 goto case ParsingState.ConsumeTrailers;
237 }
238 case ParsingState.ExpectChunkData:
239 {
241 if (remainingBuffer.Length == 0)
242 {
243 return default(ReadOnlyMemory<byte>);
244 }
245 int num = Math.Min(maxBytesToRead, (int)Math.Min((ulong)remainingBuffer.Length, _chunkBytesRemaining));
247 _chunkBytesRemaining -= (ulong)num;
248 if (_chunkBytesRemaining == 0L)
249 {
250 _state = ParsingState.ExpectChunkTerminator;
251 }
252 return remainingBuffer.Slice(0, num);
253 }
254 case ParsingState.ExpectChunkTerminator:
255 _connection._allowedReadLineBytes = 16384;
257 {
258 return default(ReadOnlyMemory<byte>);
259 }
260 if (line.Length != 0)
261 {
263 }
264 _state = ParsingState.ExpectChunkHeader;
265 goto case ParsingState.ExpectChunkHeader;
266 case ParsingState.ConsumeTrailers:
267 while (true)
268 {
269 _connection._allowedReadLineBytes = 16384;
271 {
272 break;
273 }
274 if (line.IsEmpty)
275 {
276 cancellationRegistration.Dispose();
277 CancellationHelper.ThrowIfCancellationRequested(cancellationRegistration.Token);
278 _state = ParsingState.Done;
280 _connection = null;
281 break;
282 }
283 if (!base.IsDisposed)
284 {
286 }
287 }
288 return default(ReadOnlyMemory<byte>);
289 default:
290 if (System.Net.NetEventSource.Log.IsEnabled())
291 {
292 System.Net.NetEventSource.Error(this, $"Unexpected state: {_state}", "ReadChunkFromConnectionBuffer");
293 }
294 return default(ReadOnlyMemory<byte>);
295 }
296 }
297 catch (Exception)
298 {
300 _connection = null;
301 throw;
302 }
303 }
static bool TryParse(ReadOnlySpan< byte > source, out bool value, out int bytesConsumed, char standardFormat='\0')
static void ValidateChunkExtension(ReadOnlySpan< byte > lineAfterChunkSize)
bool TryReadNextLine(out ReadOnlySpan< byte > line)
static void ParseHeaderNameValue(HttpConnection connection, ReadOnlySpan< byte > line, HttpResponseMessage response, bool isFromTrailer)
ReadOnlyMemory< byte > RemainingBuffer
void ConsumeFromRemainingBuffer(int bytesToConsume)
static readonly System.Net.NetEventSource Log
static void Error(object thisOrContextObject, FormattableString formattableString, [CallerMemberName] string memberName=null)
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_http_invalid_response_chunk_header_invalid
Definition SR.cs:100
static string net_http_invalid_response_chunk_terminator_invalid
Definition SR.cs:104
Definition SR.cs:7
static Encoding ASCII
Definition Encoding.cs:511

References System.Net.Http.HttpConnection.ChunkedEncodingReadStream._chunkBytesRemaining, System.Net.Http.HttpContentStream._connection, System.Net.Http.HttpConnection.ChunkedEncodingReadStream._response, System.Net.Http.HttpConnection.ChunkedEncodingReadStream._state, System.Text.Encoding.ASCII, System.Net.Http.HttpConnection.CompleteResponse(), System.Net.Http.HttpConnection.ConsumeFromRemainingBuffer(), System.Net.Http.HttpConnection.Dispose(), System.Net.NetEventSource.Error(), System.SR.Format(), System.L, System.Net.NetEventSource.Log, System.Math.Min(), System.SR.net_http_invalid_response_chunk_header_invalid, System.SR.net_http_invalid_response_chunk_terminator_invalid, System.Net.Http.HttpConnection.ParseHeaderNameValue(), System.Net.Http.HttpConnection.RemainingBuffer, System.Net.Http.CancellationHelper.ThrowIfCancellationRequested(), System.BitConverter.ToString(), System.Buffers.Text.Utf8Parser.TryParse(), System.Net.Http.HttpConnection.TryReadNextLine(), System.Net.Http.HttpConnection.ChunkedEncodingReadStream.ValidateChunkExtension(), and System.value.

Referenced by System.Net.Http.HttpConnection.ChunkedEncodingReadStream.CopyToAsyncCore(), System.Net.Http.HttpConnection.ChunkedEncodingReadStream.DrainAsync(), and System.Net.Http.HttpConnection.ChunkedEncodingReadStream.ReadChunksFromConnectionBuffer().