This PR refactors the stream logic to allow send and shutdown to be called before start, so that these operations can be batched up and then triggered all at once when finally started. It also has the effect of allowing StreamShutdown to be called on a stream that isn't yet started or failed to be started (flow control blocked).
Generally, this relaxes the logic required for the app to synchronize things when calling the stream.
Updates the server side retry token logic to always validate the token if present. This is required because the client validates the server eventually sends the correct transport parameter in return; and we only do that if we validate the token.
This PR refactors how MsQuic does connection partitioning. It removes any logic specific to if RSS is enabled or disabled. Instead, it just has the design of keeping the connection on the primary path's receive core. So, if something changes in the system to cause the primary path's core to change, or the primary path itself changes and has a different core, then the connection will be migrated to the new core (and associated worker). To improve lookup performance, new connection IDs will be generated as well (retiring the old ones) and sent to the peer to use.
This PR updates the YAML files to do a couple of things:
1. Mimic 'drop' artifact structure in 'logs' so it's clear what 'drop' was being tested.
2. Only upload 'logs' if the test results indicate a failure.
This PR adds the initial VS project file to build the core code as a kernel mode library. Minor refactoring was required to get everything to compile (no linking yet since it's only a static lib).
Completely refactors the Azure Pipelines CI to have separate build and test stages. This decouples the building from the testing. We can now easily build all architectures and TLS configurations we want, but only test those that are necessary.