-
Notifications
You must be signed in to change notification settings - Fork 5.3k
[QUIC] - Initial managed implementation in C# #43948
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Note regarding the This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change. |
|
Tagging subscribers to this area: @dotnet/ncl |
|
Tagging @karelz and @geoffkizer. Please tag anyone else who may find this PR of interest |
|
This may be candidate for https://github.com/dotnet/runtimelab if it feels too green. |
|
Per discussion, let's get this into runtimelabs first. @rzikm Can you post this PR to https://github.com/dotnet/runtimelab/tree/feature/ManagedQuic? |
Fix compilation for OSX and FreeBSD Fix System.Net.Quic.Unit.Tests compilation
c7b9321 to
59a26d6
Compare
|
rebased and created separate PR to runtimelabs. I couldn't reuse this PR so I had to create new one. Closing this one. |
This PR adds initial version of almost C#-only QUIC implementation as an alternative to MsQuic based implementation. The work originated as my Master Thesis.
Supported QUIC Protocol Features
This implementation is highly in WIP state. The features are at the draft-27 version. The goal was to obtain a minimal working
implementation able to reliably transmit data between client and server. This can be used to evaluate the viability of purely C# implementation for production releases. Most transport-unrelated features are
left unimplemented.
Currently implemented:
Unsupported QUIC Protocol Features
A list of highlights of unimplemented protocol features follows:
OpenSSL integration
To function correctly, the implementation requires a custom branch of OpenSSL from Akamai
https://github.com/akamai/openssl/tree/OpenSSL_1_1_1g-quic. The implementation tries to detect that
a QUIC-supporting OpenSSL is present in the path. If not, then a mock implementation is used instead.
The mock implementation can be used for trying the implementation locally, but interoperation with other
QUIC implementations is, of course, possible only with the OpenSSL-based TLS. If you want to make sure your
implementation runs with OpenSSL, define the
DOTNETQUIC_OPENSSLenvironment variable. This willcause the implementation to throw if proper OpenSSL version cannot be loaded.
Tracing and qvis
The implementation can produce traces that can be consumed by https://qvis.edm.uhasselt.be
visualizer. To collect traces, define
DOTNETQUIC_TRACEenvironment variable to something nonempty. The traces will besaved in the working directory in a file named [timestamp]-[server|client].qvis.
Disabling encryption
Regardless of TLS used, you can circumvent encryption by defining the
DOTNETQUIC_NOENCRYPTenvironment variable to something nonempty.