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

◆ TryParseHelloExtensions()

static bool System.Net.Security.TlsFrameHelper.TryParseHelloExtensions ( ReadOnlySpan< byte > extensions,
ref TlsFrameInfo info,
ProcessingOptions options,
HelloExtensionCallback callback )
inlinestaticprivate

Definition at line 254 of file TlsFrameHelper.cs.

255 {
256 bool result = true;
257 while (extensions.Length >= 4)
258 {
260 extensions = SkipBytes(extensions, 2);
261 ushort num = BinaryPrimitives.ReadUInt16BigEndian(extensions);
262 extensions = SkipBytes(extensions, 2);
263 if (extensions.Length < num)
264 {
265 result = false;
266 break;
267 }
268 ReadOnlySpan<byte> readOnlySpan = extensions.Slice(0, num);
269 if (extensionType == ExtensionType.ServerName && (options == ProcessingOptions.All || (options & ProcessingOptions.ServerName) == ProcessingOptions.ServerName))
270 {
271 if (!TryGetSniFromServerNameList(readOnlySpan, out var sni))
272 {
273 return false;
274 }
275 info.TargetName = sni;
276 }
277 else if (extensionType == ExtensionType.SupportedVersions && (options == ProcessingOptions.All || (options & ProcessingOptions.Versions) == ProcessingOptions.Versions))
278 {
279 if (!TryGetSupportedVersionsFromExtension(readOnlySpan, out var protocols))
280 {
281 return false;
282 }
283 info.SupportedVersions |= protocols;
284 }
285 else if (extensionType == ExtensionType.ApplicationProtocols && (options == ProcessingOptions.All || (options & ProcessingOptions.ApplicationProtocol) == ProcessingOptions.ApplicationProtocol))
286 {
287 if (!TryGetApplicationProtocolsFromExtension(readOnlySpan, out var alpn))
288 {
289 return false;
290 }
291 info.ApplicationProtocols |= alpn;
292 }
293 callback?.Invoke(ref info, extensionType, readOnlySpan);
294 extensions = extensions.Slice(num);
295 }
296 return result;
297 }
static ushort ReadUInt16BigEndian(ReadOnlySpan< byte > source)
static bool TryGetSniFromServerNameList(ReadOnlySpan< byte > serverNameListExtension, out string sni)
static bool TryGetApplicationProtocolsFromExtension(ReadOnlySpan< byte > extensionData, out ApplicationProtocolInfo alpn)
static bool TryGetSupportedVersionsFromExtension(ReadOnlySpan< byte > extensionData, out SslProtocols protocols)
static ReadOnlySpan< byte > SkipBytes(ReadOnlySpan< byte > bytes, int numberOfBytesToSkip)
ReadOnlySpan< T > Slice(int start)

References System.info, System.ReadOnlySpan< T >.Length, System.options, System.Buffers.Binary.BinaryPrimitives.ReadUInt16BigEndian(), System.Net.Security.TlsFrameHelper.SkipBytes(), System.ReadOnlySpan< T >.Slice(), System.Net.Security.TlsFrameHelper.TryGetApplicationProtocolsFromExtension(), System.Net.Security.TlsFrameHelper.TryGetSniFromServerNameList(), and System.Net.Security.TlsFrameHelper.TryGetSupportedVersionsFromExtension().

Referenced by System.Net.Security.TlsFrameHelper.TryParseClientHello(), and System.Net.Security.TlsFrameHelper.TryParseServerHello().