Skip to content

Commit

Permalink
Add SslApplicationProtocol.Http3
Browse files Browse the repository at this point in the history
  • Loading branch information
i3arnon committed Aug 3, 2021
1 parent a190d44 commit a012247
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/libraries/System.Net.Security/ref/System.Net.Security.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,9 @@ public readonly struct SslClientHelloInfo
{
private readonly object _dummy;
private readonly int _dummyPrimitive;
public static readonly System.Net.Security.SslApplicationProtocol Http11;
public static readonly System.Net.Security.SslApplicationProtocol Http3;
public static readonly System.Net.Security.SslApplicationProtocol Http2;
public static readonly System.Net.Security.SslApplicationProtocol Http11;
public SslApplicationProtocol(byte[] protocol) { throw null; }
public SslApplicationProtocol(string protocol) { throw null; }
public System.ReadOnlyMemory<byte> Protocol { get { throw null; } }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,13 @@ namespace System.Net.Security
public readonly struct SslApplicationProtocol : IEquatable<SslApplicationProtocol>
{
private static readonly Encoding s_utf8 = Encoding.GetEncoding(Encoding.UTF8.CodePage, EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback);
private static readonly byte[] s_http3Utf8 = new byte[] { 0x68, 0x33 }; // "h3"
private static readonly byte[] s_http2Utf8 = new byte[] { 0x68, 0x32 }; // "h2"
private static readonly byte[] s_http11Utf8 = new byte[] { 0x68, 0x74, 0x74, 0x70, 0x2f, 0x31, 0x2e, 0x31 }; // "http/1.1"

// Refer to IANA on ApplicationProtocols: https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
// h3
public static readonly SslApplicationProtocol Http3 = new SslApplicationProtocol(s_http3Utf8, copy: false);
// h2
public static readonly SslApplicationProtocol Http2 = new SslApplicationProtocol(s_http2Utf8, copy: false);
// http/1.1
Expand Down Expand Up @@ -77,6 +80,7 @@ public override string ToString()
{
return
arr is null ? string.Empty :
ReferenceEquals(arr, s_http3Utf8) ? "h3" :
ReferenceEquals(arr, s_http2Utf8) ? "h2" :
ReferenceEquals(arr, s_http11Utf8) ? "http/1.1" :
s_utf8.GetString(arr);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public class SslApplicationProtocolTests
[Fact]
public void Constants_Values_AreCorrect()
{
Assert.Equal(new SslApplicationProtocol(new byte[] { 0x68, 0x33 }), SslApplicationProtocol.Http3);
Assert.Equal(new SslApplicationProtocol(new byte[] { 0x68, 0x32 }), SslApplicationProtocol.Http2);
Assert.Equal(new SslApplicationProtocol(new byte[] { 0x68, 0x74, 0x74, 0x70, 0x2f, 0x31, 0x2e, 0x31 }), SslApplicationProtocol.Http11);
}
Expand Down Expand Up @@ -75,6 +76,7 @@ public void ToString_Rendering_Succeeds()
{
Assert.Equal("http/1.1", SslApplicationProtocol.Http11.ToString());
Assert.Equal("h2", SslApplicationProtocol.Http2.ToString());
Assert.Equal("h3", SslApplicationProtocol.Http3.ToString());
Assert.Equal("hello", new SslApplicationProtocol("hello").ToString());
Assert.Equal("0x0b 0xee", new SslApplicationProtocol(new byte[] { 0x0B, 0xEE }).ToString());
Assert.Equal(string.Empty, default(SslApplicationProtocol).ToString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public void ApplicationProtocols_Get_Set_Succeeds()
Assert.Null(_clientOptions.ApplicationProtocols);
Assert.Null(_serverOptions.ApplicationProtocols);

List<SslApplicationProtocol> applnProtos = new List<SslApplicationProtocol> { SslApplicationProtocol.Http2, SslApplicationProtocol.Http11 };
List<SslApplicationProtocol> applnProtos = new List<SslApplicationProtocol> { SslApplicationProtocol.Http3, SslApplicationProtocol.Http2, SslApplicationProtocol.Http11 };
_clientOptions.ApplicationProtocols = applnProtos;
_serverOptions.ApplicationProtocols = applnProtos;

Expand Down

0 comments on commit a012247

Please sign in to comment.