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

◆ TryGetApplicationProtocolsFromExtension()

static bool System.Net.Security.TlsFrameHelper.TryGetApplicationProtocolsFromExtension ( ReadOnlySpan< byte > extensionData,
out ApplicationProtocolInfo alpn )
inlinestaticprivate

Definition at line 367 of file TlsFrameHelper.cs.

368 {
369 alpn = ApplicationProtocolInfo.None;
370 if (extensionData.Length < 2)
371 {
372 return false;
373 }
374 int num = BinaryPrimitives.ReadUInt16BigEndian(extensionData);
375 ReadOnlySpan<byte> readOnlySpan = extensionData.Slice(2);
376 if (num != readOnlySpan.Length)
377 {
378 return false;
379 }
380 while (!readOnlySpan.IsEmpty)
381 {
382 byte b = readOnlySpan[0];
383 if (readOnlySpan.Length < b + 1)
384 {
385 return false;
386 }
387 ReadOnlySpan<byte> span = readOnlySpan.Slice(1, b);
388 if (b == 2)
389 {
390 if (span.SequenceEqual(SslApplicationProtocol.Http2.Protocol.Span))
391 {
392 alpn |= ApplicationProtocolInfo.Http2;
393 }
394 else
395 {
396 alpn |= ApplicationProtocolInfo.Other;
397 }
398 }
399 else if (b == SslApplicationProtocol.Http11.Protocol.Length && span.SequenceEqual(SslApplicationProtocol.Http11.Protocol.Span))
400 {
401 alpn |= ApplicationProtocolInfo.Http11;
402 }
403 else
404 {
405 alpn |= ApplicationProtocolInfo.Other;
406 }
407 readOnlySpan = readOnlySpan.Slice(b + 1);
408 }
409 return true;
410 }
static ushort ReadUInt16BigEndian(ReadOnlySpan< byte > source)
ReadOnlySpan< T > Slice(int start)

References System.Net.Security.SslApplicationProtocol.Http11, System.Net.Security.SslApplicationProtocol.Http2, System.ReadOnlySpan< T >.IsEmpty, System.ReadOnlySpan< T >.Length, System.Buffers.Binary.BinaryPrimitives.ReadUInt16BigEndian(), and System.ReadOnlySpan< T >.Slice().

Referenced by System.Net.Security.TlsFrameHelper.TryParseHelloExtensions().