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

◆ ReadAsync< TAdapter >()

async ValueTask< int > System.Net.Security.NegotiateStream.ReadAsync< TAdapter > ( TAdapter adapter,
Memory< byte > buffer,
[CallerMemberName] string callerName = null )
inlineprivate
Type Constraints
TAdapter :IReadWriteAdapter 

Definition at line 496 of file NegotiateStream.cs.

496 : IReadWriteAdapter
497 {
498 if (Interlocked.Exchange(ref _readInProgress, 1) == 1)
499 {
500 throw new NotSupportedException(System.SR.Format(System.SR.net_io_invalidnestedcall, callerName, "read"));
501 }
502 try
503 {
504 if (_readBufferCount != 0)
505 {
506 int num = Math.Min(_readBufferCount, buffer.Length);
507 if (num != 0)
508 {
509 _readBuffer.AsMemory(_readBufferOffset, num).CopyTo(buffer);
510 _readBufferOffset += num;
511 _readBufferCount -= num;
512 }
513 return num;
514 }
515 int num2;
516 do
517 {
518 if (await ReadAllAsync(adapter, _readHeader, allowZeroRead: true).ConfigureAwait(continueOnCapturedContext: false) == 0)
519 {
520 return 0;
521 }
522 num2 = BitConverter.ToInt32(_readHeader, 0);
523 if (num2 <= 4 || num2 > 65536)
524 {
526 }
527 _readBufferCount = num2;
529 if (_readBuffer.Length < num2)
530 {
531 _readBuffer = new byte[num2];
532 }
533 num2 = await ReadAllAsync(adapter, new Memory<byte>(_readBuffer, 0, num2), allowZeroRead: false).ConfigureAwait(continueOnCapturedContext: false);
535 }
536 while (num2 == 0 && buffer.Length != 0);
537 if (num2 > buffer.Length)
538 {
539 num2 = buffer.Length;
540 }
541 _readBuffer.AsMemory(_readBufferOffset, num2).CopyTo(buffer);
542 _readBufferOffset += num2;
543 _readBufferCount -= num2;
544 return num2;
545 }
546 catch (Exception ex) when (!(ex is IOException) && !(ex is OperationCanceledException))
547 {
548 throw new IOException(System.SR.net_io_read, ex);
549 }
550 finally
551 {
552 _readInProgress = 0;
553 }
554 static async ValueTask<int> ReadAllAsync(TAdapter adapter, Memory<byte> buffer, bool allowZeroRead)
555 {
556 int read = 0;
557 do
558 {
559 int num3 = await adapter.ReadAsync(buffer).ConfigureAwait(continueOnCapturedContext: false);
560 if (num3 == 0)
561 {
562 if (read == 0 && allowZeroRead)
563 {
564 break;
565 }
566 throw new IOException(System.SR.net_io_eof);
567 }
568 buffer = buffer.Slice(num3);
569 read += num3;
570 }
571 while (!buffer.IsEmpty);
572 return read;
573 }
574 }
int DecryptData(byte[] buffer, int offset, int count, out int newOffset)
static string net_frame_read_size
Definition SR.cs:86
static string net_io_invalidnestedcall
Definition SR.cs:24
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_io_eof
Definition SR.cs:40
static string net_io_read
Definition SR.cs:36
Definition SR.cs:7
static int Exchange(ref int location1, int value)
ConfiguredValueTaskAwaitable ConfigureAwait(bool continueOnCapturedContext)
Definition ValueTask.cs:312

References System.Net.Security.NegotiateStream._readBuffer, System.Net.Security.NegotiateStream._readBufferCount, System.Net.Security.NegotiateStream._readBufferOffset, System.Net.Security.NegotiateStream._readHeader, System.Net.Security.NegotiateStream._readInProgress, System.buffer, System.Threading.Tasks.ValueTask< TResult >.ConfigureAwait(), System.Net.Security.NegotiateStream.DecryptData(), System.Threading.Interlocked.Exchange(), System.SR.Format(), System.Math.Min(), System.SR.net_frame_read_size, System.SR.net_io_eof, System.SR.net_io_invalidnestedcall, System.SR.net_io_read, and System.BitConverter.ToInt32().