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

◆ ProcessServerStreamAsync()

async Task System.Net.Http.Http3Connection.ProcessServerStreamAsync ( QuicStream stream)
inlineprivate

Definition at line 324 of file Http3Connection.cs.

325 {
327 try
328 {
330 try
331 {
332 if (stream.CanWrite)
333 {
334 throw new Http3ConnectionException(Http3ErrorCode.StreamCreationError);
335 }
337 int num;
338 try
339 {
340 num = await stream.ReadAsync(buffer.AvailableMemory, CancellationToken.None).ConfigureAwait(continueOnCapturedContext: false);
341 }
343 {
344 num = 0;
345 }
346 if (num == 0)
347 {
348 return;
349 }
350 buffer.Commit(num);
351 switch (buffer.ActiveSpan[0])
352 {
353 case 0:
354 {
356 {
357 throw new Http3ConnectionException(Http3ErrorCode.StreamCreationError);
358 }
359 buffer.Discard(1);
361 buffer = default(System.Net.ArrayBuffer);
363 return;
364 }
365 case 3:
367 {
368 throw new Http3ConnectionException(Http3ErrorCode.StreamCreationError);
369 }
370 buffer.Dispose();
371 await stream.CopyToAsync(Stream.Null).ConfigureAwait(continueOnCapturedContext: false);
372 return;
373 case 2:
375 {
376 throw new Http3ConnectionException(Http3ErrorCode.StreamCreationError);
377 }
378 buffer.Dispose();
379 await stream.CopyToAsync(Stream.Null).ConfigureAwait(continueOnCapturedContext: false);
380 return;
381 case 1:
382 throw new Http3ConnectionException(Http3ErrorCode.IdError);
383 }
384 if (System.Net.NetEventSource.Log.IsEnabled())
385 {
386 long value;
387 int bytesRead;
388 while (!VariableLengthIntegerHelper.TryRead(buffer.ActiveSpan, out value, out bytesRead))
389 {
390 buffer.EnsureAvailableSpace(8);
391 num = await stream.ReadAsync(buffer.AvailableMemory, CancellationToken.None).ConfigureAwait(continueOnCapturedContext: false);
392 if (num == 0)
393 {
394 value = -1L;
395 break;
396 }
397 buffer.Commit(num);
398 }
399 System.Net.NetEventSource.Info(this, $"Ignoring server-initiated stream of unknown type {value}.", "ProcessServerStreamAsync");
400 }
401 stream.AbortWrite(259L);
402 }
403 finally
404 {
405 IAsyncDisposable asyncDisposable = configuredAsyncDisposable as IAsyncDisposable;
406 if (asyncDisposable != null)
407 {
408 await asyncDisposable.DisposeAsync();
409 }
410 }
411 }
412 catch (Exception abortException)
413 {
415 }
416 finally
417 {
418 buffer.Dispose();
419 }
420 }
static readonly Stream Null
Definition Stream.cs:488
async Task ProcessServerControlStreamAsync(QuicStream stream, System.Net.ArrayBuffer buffer)
static readonly System.Net.NetEventSource Log
static void Info(object thisOrContextObject, FormattableString formattableString=null, [CallerMemberName] string memberName=null)
static int Exchange(ref int location1, int value)

References System.Net.Http.Http3Connection._haveServerControlStream, System.Net.Http.Http3Connection._haveServerQpackDecodeStream, System.Net.Http.Http3Connection._haveServerQpackEncodeStream, System.Net.Abort, System.buffer, System.Threading.Interlocked.Exchange(), System.Net.NetEventSource.Info(), System.L, System.Net.NetEventSource.Log, System.Threading.CancellationToken.None, System.IO.Stream.Null, System.Net.Http.Http3Connection.ProcessServerControlStreamAsync(), System.stream, System.Net.Http.VariableLengthIntegerHelper.TryRead(), and System.value.

Referenced by System.Net.Http.Http3Connection.AcceptStreamsAsync().