Showing preview only (3,696K chars total). Download the full file or copy to clipboard to get everything.
Repository: dotnet/yarp
Branch: main
Commit: 6458e08b647a
Files: 1031
Total size: 3.3 MB
Directory structure:
gitextract_y4symcy7/
├── .azuredevops/
│ └── dependabot.yml
├── .config/
│ ├── CredScanSuppressions.json
│ └── tsaoptions.json
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.md
│ │ ├── feedback.md
│ │ └── idea.md
│ ├── policies/
│ │ └── resourceManagement.yml
│ └── workflows/
│ ├── docker_build.yml
│ ├── markdownlint-problem-matcher.json
│ ├── markdownlint.yml
│ └── markdownlintignore
├── .gitignore
├── .markdownlint.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Build.targets
├── LICENSE.txt
├── NuGet.config
├── README.md
├── SECURITY.md
├── TFMs.props
├── THIRD-PARTY-NOTICES.TXT
├── YARP.slnx
├── activate.ps1
├── activate.sh
├── azure-pipelines-nonprod.yml
├── azure-pipelines-pr.yml
├── azure-pipelines.yml
├── build.cmd
├── build.sh
├── docs/
│ ├── DailyBuilds.md
│ ├── README.md
│ ├── designs/
│ │ ├── README.md
│ │ ├── config.md
│ │ ├── route-extensibility.md
│ │ └── yarp-tunneling.md
│ ├── operations/
│ │ ├── BackportingToPreview.md
│ │ ├── Branching.md
│ │ ├── DependencyFlow.md
│ │ ├── README.md
│ │ └── Release.md
│ └── roadmap.md
├── dotnet-yarp-release.yml
├── eng/
│ ├── Build.props
│ ├── CodeAnalysis.src.globalconfig
│ ├── CodeAnalysis.test.globalconfig
│ ├── PoliCheckExclusions.xml
│ ├── Publishing.props
│ ├── Signing.props
│ ├── Version.Details.xml
│ ├── Versions.props
│ ├── common/
│ │ ├── BuildConfiguration/
│ │ │ └── build-configuration.json
│ │ ├── CIBuild.cmd
│ │ ├── PSScriptAnalyzerSettings.psd1
│ │ ├── README.md
│ │ ├── SetupNugetSources.ps1
│ │ ├── SetupNugetSources.sh
│ │ ├── build.cmd
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ ├── cibuild.sh
│ │ ├── core-templates/
│ │ │ ├── job/
│ │ │ │ ├── job.yml
│ │ │ │ ├── onelocbuild.yml
│ │ │ │ ├── publish-build-assets.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1.yml
│ │ │ ├── jobs/
│ │ │ │ ├── codeql-build.yml
│ │ │ │ ├── jobs.yml
│ │ │ │ └── source-build.yml
│ │ │ ├── post-build/
│ │ │ │ ├── common-variables.yml
│ │ │ │ ├── post-build.yml
│ │ │ │ └── setup-maestro-vars.yml
│ │ │ ├── steps/
│ │ │ │ ├── cleanup-microbuild.yml
│ │ │ │ ├── component-governance.yml
│ │ │ │ ├── enable-internal-runtimes.yml
│ │ │ │ ├── enable-internal-sources.yml
│ │ │ │ ├── generate-sbom.yml
│ │ │ │ ├── get-delegation-sas.yml
│ │ │ │ ├── get-federated-access-token.yml
│ │ │ │ ├── install-microbuild-impl.yml
│ │ │ │ ├── install-microbuild.yml
│ │ │ │ ├── publish-build-artifacts.yml
│ │ │ │ ├── publish-logs.yml
│ │ │ │ ├── publish-pipeline-artifacts.yml
│ │ │ │ ├── retain-build.yml
│ │ │ │ ├── send-to-helix.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1-publish.yml
│ │ │ └── variables/
│ │ │ └── pool-providers.yml
│ │ ├── cross/
│ │ │ ├── armel/
│ │ │ │ └── tizen/
│ │ │ │ └── tizen.patch
│ │ │ ├── build-android-rootfs.sh
│ │ │ ├── build-rootfs.sh
│ │ │ ├── install-debs.py
│ │ │ ├── riscv64/
│ │ │ │ └── tizen/
│ │ │ │ └── tizen.patch
│ │ │ ├── tizen-build-rootfs.sh
│ │ │ ├── tizen-fetch.sh
│ │ │ └── toolchain.cmake
│ │ ├── darc-init.ps1
│ │ ├── darc-init.sh
│ │ ├── dotnet-install.cmd
│ │ ├── dotnet-install.ps1
│ │ ├── dotnet-install.sh
│ │ ├── dotnet.cmd
│ │ ├── dotnet.ps1
│ │ ├── dotnet.sh
│ │ ├── enable-cross-org-publishing.ps1
│ │ ├── generate-locproject.ps1
│ │ ├── generate-sbom-prep.ps1
│ │ ├── generate-sbom-prep.sh
│ │ ├── helixpublish.proj
│ │ ├── init-tools-native.cmd
│ │ ├── init-tools-native.ps1
│ │ ├── init-tools-native.sh
│ │ ├── internal/
│ │ │ ├── Directory.Build.props
│ │ │ ├── NuGet.config
│ │ │ └── Tools.csproj
│ │ ├── internal-feed-operations.ps1
│ │ ├── internal-feed-operations.sh
│ │ ├── loc/
│ │ │ └── P22DotNetHtmlLocalization.lss
│ │ ├── msbuild.ps1
│ │ ├── msbuild.sh
│ │ ├── native/
│ │ │ ├── CommonLibrary.psm1
│ │ │ ├── common-library.sh
│ │ │ ├── init-compiler.sh
│ │ │ ├── init-distro-rid.sh
│ │ │ ├── init-os-and-arch.sh
│ │ │ ├── install-cmake-test.sh
│ │ │ ├── install-cmake.sh
│ │ │ ├── install-dependencies.sh
│ │ │ └── install-tool.ps1
│ │ ├── pipeline-logging-functions.ps1
│ │ ├── pipeline-logging-functions.sh
│ │ ├── post-build/
│ │ │ ├── check-channel-consistency.ps1
│ │ │ ├── nuget-validation.ps1
│ │ │ ├── nuget-verification.ps1
│ │ │ ├── publish-using-darc.ps1
│ │ │ ├── redact-logs.ps1
│ │ │ ├── sourcelink-validation.ps1
│ │ │ └── symbols-validation.ps1
│ │ ├── retain-build.ps1
│ │ ├── sdk-task.ps1
│ │ ├── sdk-task.sh
│ │ ├── sdl/
│ │ │ ├── NuGet.config
│ │ │ ├── configure-sdl-tool.ps1
│ │ │ ├── execute-all-sdl-tools.ps1
│ │ │ ├── extract-artifact-archives.ps1
│ │ │ ├── extract-artifact-packages.ps1
│ │ │ ├── init-sdl.ps1
│ │ │ ├── packages.config
│ │ │ ├── run-sdl.ps1
│ │ │ ├── sdl.ps1
│ │ │ └── trim-assets-version.ps1
│ │ ├── template-guidance.md
│ │ ├── templates/
│ │ │ ├── job/
│ │ │ │ ├── job.yml
│ │ │ │ ├── onelocbuild.yml
│ │ │ │ ├── publish-build-assets.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1.yml
│ │ │ ├── jobs/
│ │ │ │ ├── codeql-build.yml
│ │ │ │ ├── jobs.yml
│ │ │ │ └── source-build.yml
│ │ │ ├── post-build/
│ │ │ │ ├── common-variables.yml
│ │ │ │ ├── post-build.yml
│ │ │ │ └── setup-maestro-vars.yml
│ │ │ ├── steps/
│ │ │ │ ├── component-governance.yml
│ │ │ │ ├── enable-internal-runtimes.yml
│ │ │ │ ├── enable-internal-sources.yml
│ │ │ │ ├── generate-sbom.yml
│ │ │ │ ├── get-delegation-sas.yml
│ │ │ │ ├── get-federated-access-token.yml
│ │ │ │ ├── publish-build-artifacts.yml
│ │ │ │ ├── publish-logs.yml
│ │ │ │ ├── publish-pipeline-artifacts.yml
│ │ │ │ ├── retain-build.yml
│ │ │ │ ├── send-to-helix.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ ├── source-index-stage1-publish.yml
│ │ │ │ └── vmr-sync.yml
│ │ │ ├── variables/
│ │ │ │ └── pool-providers.yml
│ │ │ └── vmr-build-pr.yml
│ │ ├── templates-official/
│ │ │ ├── job/
│ │ │ │ ├── job.yml
│ │ │ │ ├── onelocbuild.yml
│ │ │ │ ├── publish-build-assets.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1.yml
│ │ │ ├── jobs/
│ │ │ │ ├── codeql-build.yml
│ │ │ │ ├── jobs.yml
│ │ │ │ └── source-build.yml
│ │ │ ├── post-build/
│ │ │ │ ├── common-variables.yml
│ │ │ │ ├── post-build.yml
│ │ │ │ └── setup-maestro-vars.yml
│ │ │ ├── steps/
│ │ │ │ ├── component-governance.yml
│ │ │ │ ├── enable-internal-runtimes.yml
│ │ │ │ ├── enable-internal-sources.yml
│ │ │ │ ├── generate-sbom.yml
│ │ │ │ ├── get-delegation-sas.yml
│ │ │ │ ├── get-federated-access-token.yml
│ │ │ │ ├── publish-build-artifacts.yml
│ │ │ │ ├── publish-logs.yml
│ │ │ │ ├── publish-pipeline-artifacts.yml
│ │ │ │ ├── retain-build.yml
│ │ │ │ ├── send-to-helix.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1-publish.yml
│ │ │ └── variables/
│ │ │ ├── pool-providers.yml
│ │ │ └── sdl-variables.yml
│ │ ├── tools.ps1
│ │ ├── tools.sh
│ │ ├── vmr-sync.ps1
│ │ └── vmr-sync.sh
│ ├── sdl-tsa-vars.config
│ └── yarpapppack/
│ ├── Common.projitems
│ ├── yarpapppack-linux-arm64.csproj
│ └── yarpapppack-linux-x64.csproj
├── es-metadata.yml
├── global.json
├── pack.cmd
├── pack.sh
├── restore.cmd
├── restore.sh
├── samples/
│ ├── BasicYarpSample/
│ │ ├── BasicYarpSample.csproj
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ └── appsettings.json
│ ├── Directory.Build.props
│ ├── KubernetesIngress.Sample/
│ │ ├── Combined/
│ │ │ ├── Dockerfile
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── README.md
│ │ │ ├── Yarp.Kubernetes.IngressController.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── ingress-controller.yaml
│ │ ├── Ingress/
│ │ │ ├── Dockerfile
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── README.md
│ │ │ ├── Yarp.Kubernetes.Ingress.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── ingress.yaml
│ │ ├── Monitor/
│ │ │ ├── Dockerfile
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── README.md
│ │ │ ├── Yarp.Kubernetes.Monitor.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── ingress-monitor.yaml
│ │ ├── README.md
│ │ └── backend/
│ │ ├── Dockerfile
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ ├── backend.csproj
│ │ ├── backend.yaml
│ │ └── ingress-sample.yaml
│ ├── Prometheus/
│ │ ├── HttpLoadApp/
│ │ │ ├── HttpLoadApp.csproj
│ │ │ └── Program.cs
│ │ ├── README.md
│ │ ├── ReverseProxy.Metrics-Prometheus.Sample/
│ │ │ ├── Program.cs
│ │ │ ├── PrometheusDnsMetrics.cs
│ │ │ ├── PrometheusForwarderMetrics.cs
│ │ │ ├── PrometheusKestrelMetrics.cs
│ │ │ ├── PrometheusOutboundHttpMetrics.cs
│ │ │ ├── PrometheusServiceExtensions.cs
│ │ │ ├── PrometheusSocketMetrics.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── ReverseProxy.Metrics.Prometheus.Sample.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ ├── prometheus.yml
│ │ ├── run10destinations.cmd
│ │ └── run10destinations.sh
│ ├── README.md
│ ├── ReverseProxy.Auth.Sample/
│ │ ├── Controllers/
│ │ │ └── AccountController.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Auth.Sample.csproj
│ │ ├── TokenService.cs
│ │ ├── Views/
│ │ │ └── Account/
│ │ │ ├── AccessDenied.cshtml
│ │ │ ├── LoggedOut.cshtml
│ │ │ └── Login.cshtml
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.Code.Sample/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Code.Sample.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.Config.Sample/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Config.Sample.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.ConfigFilter.Sample/
│ │ ├── CustomConfigFilter.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.ConfigFilter.Sample.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.Direct.Sample/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Direct.Sample.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.HttpSysDelegation.Sample/
│ │ ├── README.md
│ │ ├── ReverseProxy/
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── ReverseProxy.HttpSysDelegation.Sample.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ └── SampleHttpSysServer/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── SampleHttpSysServer.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.LetsEncrypt.Sample/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.LetsEncrypt.Sample.csproj
│ │ └── appsettings.json
│ ├── ReverseProxy.Metrics.Sample/
│ │ ├── ForwarderMetricsConsumer.cs
│ │ ├── ForwarderTelemetryConsumer.cs
│ │ ├── HttpClientTelemetryConsumer.cs
│ │ ├── PerRequestMetrics.cs
│ │ ├── PerRequestYarpMetricCollectionMiddleware.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Metrics.Sample.csproj
│ │ ├── WebSocketsTelemetryConsumer.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.Transforms.Sample/
│ │ ├── MyTransformFactory.cs
│ │ ├── MyTransformProvider.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── ReverseProxy.Transforms.Sample.csproj
│ │ ├── TokenService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ └── SampleServer/
│ ├── Controllers/
│ │ ├── HealthController.cs
│ │ ├── HttpController.cs
│ │ └── WebSocketsController.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── README.md
│ ├── SampleServer.csproj
│ ├── appsettings.Development.json
│ ├── appsettings.json
│ └── wwwroot/
│ └── index.html
├── src/
│ ├── Application/
│ │ ├── Extensions.cs
│ │ ├── Program.cs
│ │ └── Yarp.Application.csproj
│ ├── Common/
│ │ └── Package.targets
│ ├── Directory.Build.props
│ ├── Kubernetes.Controller/
│ │ ├── Caching/
│ │ │ ├── Endpoints.cs
│ │ │ ├── ICache.cs
│ │ │ ├── IngressCache.cs
│ │ │ ├── IngressClassData.cs
│ │ │ ├── IngressData.cs
│ │ │ ├── NamespaceCache.cs
│ │ │ └── ServiceData.cs
│ │ ├── Certificates/
│ │ │ ├── CertificateHelper.cs
│ │ │ ├── ICertificateHelper.cs
│ │ │ ├── IServerCertificateSelector.cs
│ │ │ └── ServerCertificateSelector.cs
│ │ ├── Client/
│ │ │ ├── GroupApiVersionKind.cs
│ │ │ ├── IIngressResourceStatusUpdater.cs
│ │ │ ├── IResourceInformer.cs
│ │ │ ├── IResourceInformerRegistration.cs
│ │ │ ├── KubernetesClientOptions.cs
│ │ │ ├── ResourceInformer.cs
│ │ │ ├── ResourceSelector.cs
│ │ │ ├── V1EndpointsResourceInformer.cs
│ │ │ ├── V1IngressClassResourceInformer.cs
│ │ │ ├── V1IngressResourceInformer.cs
│ │ │ ├── V1IngressResourceStatusUpdater.cs
│ │ │ ├── V1SecretResourceInformer.cs
│ │ │ └── V1ServiceResourceInformer.cs
│ │ ├── ConfigProvider/
│ │ │ ├── IUpdateConfig.cs
│ │ │ └── KubernetesConfigProvider.cs
│ │ ├── Converters/
│ │ │ ├── ClusterTransfer.cs
│ │ │ ├── YarpConfigContext.cs
│ │ │ ├── YarpIngressContext.cs
│ │ │ ├── YarpIngressOptions.cs
│ │ │ └── YarpParser.cs
│ │ ├── Hosting/
│ │ │ ├── BackgroundHostedService.cs
│ │ │ ├── HostedServiceAdapter.cs
│ │ │ └── ServiceCollectionHostedServiceAdapterExtensions.cs
│ │ ├── Management/
│ │ │ ├── KubernetesCoreExtensions.cs
│ │ │ ├── KubernetesReverseProxyServiceCollectionExtensions.cs
│ │ │ └── KubernetesReverseProxyWebHostBuilderExtensions.cs
│ │ ├── NamespacedName.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Protocol/
│ │ │ ├── DispatchActionResult.cs
│ │ │ ├── DispatchConfigProvider.cs
│ │ │ ├── DispatchController.cs
│ │ │ ├── Dispatcher.cs
│ │ │ ├── IDispatchTarget.cs
│ │ │ ├── IDispatcher.cs
│ │ │ ├── Message.cs
│ │ │ ├── MessageConfigProviderExtensions.cs
│ │ │ ├── Receiver.cs
│ │ │ └── ReceiverOptions.cs
│ │ ├── Queues/
│ │ │ ├── IWorkQueue.cs
│ │ │ ├── ProcessingRateLimitedQueue.cs
│ │ │ └── WorkQueue.cs
│ │ ├── Rate/
│ │ │ ├── Limit.cs
│ │ │ ├── Limiter.cs
│ │ │ └── Reservation.cs
│ │ ├── Services/
│ │ │ ├── IReconciler.cs
│ │ │ ├── IngressController.cs
│ │ │ ├── QueueItem.cs
│ │ │ ├── ReconcileData.cs
│ │ │ └── Reconciler.cs
│ │ ├── Yarp.Kubernetes.Controller.csproj
│ │ └── YarpOptions.cs
│ ├── ReverseProxy/
│ │ ├── Configuration/
│ │ │ ├── ActiveHealthCheckConfig.cs
│ │ │ ├── AuthorizationConstants.cs
│ │ │ ├── ClusterConfig.cs
│ │ │ ├── ClusterValidators/
│ │ │ │ ├── DestinationValidator.cs
│ │ │ │ ├── HealthCheckValidator.cs
│ │ │ │ ├── IClusterValidator.cs
│ │ │ │ ├── LoadBalancingValidator.cs
│ │ │ │ ├── ProxyHttpClientValidator.cs
│ │ │ │ ├── ProxyHttpRequestValidator.cs
│ │ │ │ └── SessionAffinityValidator.cs
│ │ │ ├── ConfigProvider/
│ │ │ │ ├── ConfigurationConfigProvider.cs
│ │ │ │ ├── ConfigurationReadingExtensions.cs
│ │ │ │ └── ConfigurationSnapshot.cs
│ │ │ ├── ConfigValidator.cs
│ │ │ ├── CorsConstants.cs
│ │ │ ├── DestinationConfig.cs
│ │ │ ├── HeaderMatchMode.cs
│ │ │ ├── HealthCheckConfig.cs
│ │ │ ├── HttpClientConfig.cs
│ │ │ ├── IConfigChangeListener.cs
│ │ │ ├── IConfigValidator.cs
│ │ │ ├── IProxyConfig.cs
│ │ │ ├── IProxyConfigFilter.cs
│ │ │ ├── IProxyConfigProvider.cs
│ │ │ ├── IYarpOutputCachePolicyProvider.cs
│ │ │ ├── IYarpRateLimiterPolicyProvider.cs
│ │ │ ├── InMemoryConfigProvider.cs
│ │ │ ├── InMemoryConfigProviderExtensions.cs
│ │ │ ├── PassiveHealthCheckConfig.cs
│ │ │ ├── QueryParameterMatchMode.cs
│ │ │ ├── RateLimitingConstants.cs
│ │ │ ├── RouteConfig.cs
│ │ │ ├── RouteHeader.cs
│ │ │ ├── RouteMatch.cs
│ │ │ ├── RouteQueryParameter.cs
│ │ │ ├── RouteValidators/
│ │ │ │ ├── AuthorizationPolicyValidator.cs
│ │ │ │ ├── CorsPolicyValidator.cs
│ │ │ │ ├── HeadersValidator.cs
│ │ │ │ ├── HostValidator.cs
│ │ │ │ ├── IRouteValidator.cs
│ │ │ │ ├── MethodsValidator.cs
│ │ │ │ ├── OutputCachePolicyValidator.cs
│ │ │ │ ├── PathValidator.cs
│ │ │ │ ├── QueryParametersValidator.cs
│ │ │ │ ├── RateLimitPolicyValidator.cs
│ │ │ │ └── TimeoutPolicyValidator.cs
│ │ │ ├── SessionAffinityConfig.cs
│ │ │ ├── SessionAffinityCookieConfig.cs
│ │ │ ├── TimeoutPolicyConstants.cs
│ │ │ └── WebProxyConfig.cs
│ │ ├── ConfigurationSchema.json
│ │ ├── Delegation/
│ │ │ ├── AppBuilderDelegationExtensions.cs
│ │ │ ├── DelegationExtensions.cs
│ │ │ ├── DummyHttpSysDelegator.cs
│ │ │ ├── HttpSysDelegator.cs
│ │ │ ├── HttpSysDelegatorMiddleware.cs
│ │ │ └── IHttpSysDelegator.cs
│ │ ├── Forwarder/
│ │ │ ├── CallbackHttpClientFactory.cs
│ │ │ ├── DirectForwardingHttpClientProvider.cs
│ │ │ ├── EmptyHttpContent.cs
│ │ │ ├── ForwarderError.cs
│ │ │ ├── ForwarderErrorFeature.cs
│ │ │ ├── ForwarderHttpClientContext.cs
│ │ │ ├── ForwarderHttpClientFactory.cs
│ │ │ ├── ForwarderMiddleware.cs
│ │ │ ├── ForwarderRequestConfig.cs
│ │ │ ├── ForwarderStage.cs
│ │ │ ├── ForwarderTelemetry.cs
│ │ │ ├── HttpForwarder.cs
│ │ │ ├── HttpTransformer.cs
│ │ │ ├── IForwarderErrorFeature.cs
│ │ │ ├── IForwarderHttpClientFactory.cs
│ │ │ ├── IHttpForwarder.cs
│ │ │ ├── IHttpForwarderExtensions.cs
│ │ │ ├── ProtocolHelper.cs
│ │ │ ├── RequestTransformer.cs
│ │ │ ├── RequestUtilities.cs
│ │ │ ├── ReverseProxyPropagator.cs
│ │ │ ├── StreamCopier.cs
│ │ │ ├── StreamCopyHttpContent.cs
│ │ │ └── StreamCopyResult.cs
│ │ ├── Health/
│ │ │ ├── ActiveHealthCheckMonitor.Log.cs
│ │ │ ├── ActiveHealthCheckMonitor.cs
│ │ │ ├── ActiveHealthCheckMonitorOptions.cs
│ │ │ ├── AppBuilderHealthExtensions.cs
│ │ │ ├── ClusterDestinationsUpdater.cs
│ │ │ ├── ConsecutiveFailuresHealthPolicy.cs
│ │ │ ├── ConsecutiveFailuresHealthPolicyOptions.cs
│ │ │ ├── DefaultProbingRequestFactory.cs
│ │ │ ├── DestinationHealthUpdater.cs
│ │ │ ├── DestinationProbingResult.cs
│ │ │ ├── EntityActionScheduler.cs
│ │ │ ├── HealthCheckConstants.cs
│ │ │ ├── HealthyAndUnknownDestinationsPolicy.cs
│ │ │ ├── HealthyOrPanicDestinationsPolicy.cs
│ │ │ ├── IActiveHealthCheckMonitor.cs
│ │ │ ├── IActiveHealthCheckPolicy.cs
│ │ │ ├── IAvailableDestinationsPolicy.cs
│ │ │ ├── IClusterDestinationsUpdater.cs
│ │ │ ├── IDestinationHealthUpdater.cs
│ │ │ ├── IPassiveHealthCheckPolicy.cs
│ │ │ ├── IProbingRequestFactory.cs
│ │ │ ├── NewActiveDestinationHealth.cs
│ │ │ ├── PassiveHealthCheckMiddleware.cs
│ │ │ ├── TransportFailureRateHealthPolicy.cs
│ │ │ └── TransportFailureRateHealthPolicyOptions.cs
│ │ ├── Limits/
│ │ │ └── LimitsMiddleware.cs
│ │ ├── LoadBalancing/
│ │ │ ├── AppBuilderLoadBalancingExtensions.cs
│ │ │ ├── FirstLoadBalancingPolicy.cs
│ │ │ ├── ILoadBalancingPolicy.cs
│ │ │ ├── LeastRequestsLoadBalancingPolicy.cs
│ │ │ ├── LoadBalancingMiddleware.cs
│ │ │ ├── LoadBalancingPolicies.cs
│ │ │ ├── PowerOfTwoChoicesLoadBalancingPolicy.cs
│ │ │ ├── RandomLoadBalancingPolicy.cs
│ │ │ └── RoundRobinLoadBalancingPolicy.cs
│ │ ├── Management/
│ │ │ ├── IProxyStateLookup.cs
│ │ │ ├── IReverseProxyBuilder.cs
│ │ │ ├── IReverseProxyBuilderExtensions.cs
│ │ │ ├── ProxyConfigManager.cs
│ │ │ ├── ReverseProxyBuilder.cs
│ │ │ └── ReverseProxyServiceCollectionExtensions.cs
│ │ ├── Model/
│ │ │ ├── ClusterDestinationsState.cs
│ │ │ ├── ClusterModel.cs
│ │ │ ├── ClusterState.cs
│ │ │ ├── DestinationHealth.cs
│ │ │ ├── DestinationHealthState.cs
│ │ │ ├── DestinationModel.cs
│ │ │ ├── DestinationState.cs
│ │ │ ├── HttpContextFeaturesExtensions.cs
│ │ │ ├── IClusterChangeListener.cs
│ │ │ ├── IReverseProxyApplicationBuilder.cs
│ │ │ ├── IReverseProxyFeature.cs
│ │ │ ├── ProxyPipelineInitializerMiddleware.cs
│ │ │ ├── README.md
│ │ │ ├── ReverseProxyApplicationBuilder.cs
│ │ │ ├── ReverseProxyFeature.cs
│ │ │ ├── RouteModel.cs
│ │ │ └── RouteState.cs
│ │ ├── README.md
│ │ ├── Routing/
│ │ │ ├── DirectForwardingIEndpointRouteBuilderExtensions.cs
│ │ │ ├── HeaderMatcher.cs
│ │ │ ├── HeaderMatcherPolicy.cs
│ │ │ ├── HeaderMetadata.cs
│ │ │ ├── IHeaderMetadata.cs
│ │ │ ├── IQueryParameterMetadata.cs
│ │ │ ├── ProxyEndpointFactory.cs
│ │ │ ├── QueryParameterMatcher.cs
│ │ │ ├── QueryParameterMatcherPolicy.cs
│ │ │ ├── QueryParameterMetadata.cs
│ │ │ ├── ReverseProxyConventionBuilder.cs
│ │ │ └── ReverseProxyIEndpointRouteBuilderExtensions.cs
│ │ ├── ServiceDiscovery/
│ │ │ ├── DnsDestinationResolver.cs
│ │ │ ├── DnsDestinationResolverOptions.cs
│ │ │ ├── IDestinationResolver.cs
│ │ │ ├── NoOpDestinationResolver.cs
│ │ │ └── ResolvedDestinationCollection.cs
│ │ ├── SessionAffinity/
│ │ │ ├── AffinitizeTransform.cs
│ │ │ ├── AffinitizeTransformProvider.cs
│ │ │ ├── AffinityHelpers.cs
│ │ │ ├── AffinityResult.cs
│ │ │ ├── AffinityStatus.cs
│ │ │ ├── AppBuilderSessionAffinityExtensions.cs
│ │ │ ├── ArrCookieSessionAffinityPolicy.cs
│ │ │ ├── BaseEncryptedSessionAffinityPolicy.cs
│ │ │ ├── BaseHashCookieSessionAffinityPolicy.cs
│ │ │ ├── CookieSessionAffinityPolicy.cs
│ │ │ ├── CustomHeaderSessionAffinityPolicy.cs
│ │ │ ├── HashCookieSessionAffinityPolicy.cs
│ │ │ ├── IAffinityFailurePolicy.cs
│ │ │ ├── ISessionAffinityPolicy.cs
│ │ │ ├── Log.cs
│ │ │ ├── RedistributeAffinityFailurePolicy.cs
│ │ │ ├── Return503ErrorAffinityFailurePolicy.cs
│ │ │ ├── SessionAffinityConstants.cs
│ │ │ └── SessionAffinityMiddleware.cs
│ │ ├── Transforms/
│ │ │ ├── Builder/
│ │ │ │ ├── ActionTransformProvider.cs
│ │ │ │ ├── ITransformBuilder.cs
│ │ │ │ ├── ITransformFactory.cs
│ │ │ │ ├── ITransformProvider.cs
│ │ │ │ ├── StructuredTransformer.cs
│ │ │ │ ├── TransformBuilder.cs
│ │ │ │ ├── TransformBuilderContext.cs
│ │ │ │ ├── TransformClusterValidationContext.cs
│ │ │ │ ├── TransformHelpers.cs
│ │ │ │ └── TransformRouteValidationContext.cs
│ │ │ ├── ForwardedTransformActions.cs
│ │ │ ├── ForwardedTransformExtensions.cs
│ │ │ ├── ForwardedTransformFactory.cs
│ │ │ ├── HttpMethodChangeTransform.cs
│ │ │ ├── HttpMethodTransformExtensions.cs
│ │ │ ├── HttpMethodTransformFactory.cs
│ │ │ ├── NodeFormat.cs
│ │ │ ├── PathRouteValuesTransform.cs
│ │ │ ├── PathStringTransform.cs
│ │ │ ├── PathTransformExtensions.cs
│ │ │ ├── PathTransformFactory.cs
│ │ │ ├── QueryParameterFromRouteTransform.cs
│ │ │ ├── QueryParameterFromStaticTransform.cs
│ │ │ ├── QueryParameterRemoveTransform.cs
│ │ │ ├── QueryParameterTransform.cs
│ │ │ ├── QueryTransformContext.cs
│ │ │ ├── QueryTransformExtensions.cs
│ │ │ ├── QueryTransformFactory.cs
│ │ │ ├── RequestFuncTransform.cs
│ │ │ ├── RequestHeaderClientCertTransform.cs
│ │ │ ├── RequestHeaderForwardedTransform.cs
│ │ │ ├── RequestHeaderOriginalHostTransform.cs
│ │ │ ├── RequestHeaderRemoveTransform.cs
│ │ │ ├── RequestHeaderRouteValueTransform.cs
│ │ │ ├── RequestHeaderTransform.cs
│ │ │ ├── RequestHeaderValueTransform.cs
│ │ │ ├── RequestHeaderXForwardedForTransform.cs
│ │ │ ├── RequestHeaderXForwardedHostTransform.cs
│ │ │ ├── RequestHeaderXForwardedPrefixTransform.cs
│ │ │ ├── RequestHeaderXForwardedProtoTransform.cs
│ │ │ ├── RequestHeadersAllowedTransform.cs
│ │ │ ├── RequestHeadersTransformExtensions.cs
│ │ │ ├── RequestHeadersTransformFactory.cs
│ │ │ ├── RequestTransform.cs
│ │ │ ├── RequestTransformContext.cs
│ │ │ ├── ResponseCondition.cs
│ │ │ ├── ResponseFuncTransform.cs
│ │ │ ├── ResponseHeaderRemoveTransform.cs
│ │ │ ├── ResponseHeaderValueTransform.cs
│ │ │ ├── ResponseHeadersAllowedTransform.cs
│ │ │ ├── ResponseTrailerRemoveTransform.cs
│ │ │ ├── ResponseTrailerValueTransform.cs
│ │ │ ├── ResponseTrailersAllowedTransform.cs
│ │ │ ├── ResponseTrailersFuncTransform.cs
│ │ │ ├── ResponseTrailersTransform.cs
│ │ │ ├── ResponseTrailersTransformContext.cs
│ │ │ ├── ResponseTransform.cs
│ │ │ ├── ResponseTransformContext.cs
│ │ │ ├── ResponseTransformExtensions.cs
│ │ │ ├── ResponseTransformFactory.cs
│ │ │ ├── RouteConfigTransformExtensions.cs
│ │ │ └── TransformBuilderContextFuncExtensions.cs
│ │ ├── Utilities/
│ │ │ ├── ActivityCancellationTokenSource.cs
│ │ │ ├── AtomicCounter.cs
│ │ │ ├── CaseInsensitiveEqualHelper.cs
│ │ │ ├── CaseSensitiveEqualHelper.cs
│ │ │ ├── CollectionEqualityHelper.cs
│ │ │ ├── ConcurrentDictionaryExtensions.cs
│ │ │ ├── DelegatingStream.cs
│ │ │ ├── EventIds.cs
│ │ │ ├── IClock.cs
│ │ │ ├── IRandomFactory.cs
│ │ │ ├── NullRandomFactory.cs
│ │ │ ├── Observability.cs
│ │ │ ├── ParsedMetadataEntry.cs
│ │ │ ├── RandomFactory.cs
│ │ │ ├── ServiceLookupHelper.cs
│ │ │ ├── SkipLocalsInit.cs
│ │ │ ├── TaskUtilities.cs
│ │ │ ├── TlsFrameHelper.cs
│ │ │ ├── ValueStopwatch.cs
│ │ │ └── ValueStringBuilder.cs
│ │ ├── WebSocketsTelemetry/
│ │ │ ├── HttpConnectFeatureWrapper.cs
│ │ │ ├── HttpUpgradeFeatureWrapper.cs
│ │ │ ├── WebSocketCloseReason.cs
│ │ │ ├── WebSocketsParser.cs
│ │ │ ├── WebSocketsTelemetry.cs
│ │ │ ├── WebSocketsTelemetryExtensions.cs
│ │ │ ├── WebSocketsTelemetryMiddleware.cs
│ │ │ └── WebSocketsTelemetryStream.cs
│ │ └── Yarp.ReverseProxy.csproj
│ └── TelemetryConsumption/
│ ├── EventListenerService.cs
│ ├── Forwarder/
│ │ ├── ForwarderEventListenerService.cs
│ │ ├── ForwarderMetrics.cs
│ │ ├── ForwarderStage.cs
│ │ └── IForwarderTelemetryConsumer.cs
│ ├── Http/
│ │ ├── HttpEventListenerService.cs
│ │ ├── HttpMetrics.cs
│ │ └── IHttpTelemetryConsumer.cs
│ ├── IMetricsConsumer.cs
│ ├── Kestrel/
│ │ ├── IKestrelTelemetryConsumer.cs
│ │ ├── KestrelEventListenerService.cs
│ │ └── KestrelMetrics.cs
│ ├── MetricsOptions.cs
│ ├── NameResolution/
│ │ ├── INameResolutionTelemetryConsumer.cs
│ │ ├── NameResolutionEventListenerService.cs
│ │ └── NameResolutionMetrics.cs
│ ├── NetSecurity/
│ │ ├── INetSecurityTelemetryConsumer.cs
│ │ ├── NetSecurityEventListenerService.cs
│ │ └── NetSecurityMetrics.cs
│ ├── README.md
│ ├── Sockets/
│ │ ├── ISocketsTelemetryConsumer.cs
│ │ ├── SocketsEventListenerService.cs
│ │ └── SocketsMetrics.cs
│ ├── TelemetryConsumptionExtensions.cs
│ ├── WebSockets/
│ │ ├── IWebSocketsTelemetryConsumer.cs
│ │ ├── WebSocketCloseReason.cs
│ │ └── WebSocketsEventListenerService.cs
│ └── Yarp.Telemetry.Consumption.csproj
├── startvs.cmd
├── test/
│ ├── Directory.Build.props
│ ├── Kubernetes.Tests/
│ │ ├── Certificates/
│ │ │ ├── CertificateHelperTests.cs
│ │ │ ├── cert.der
│ │ │ ├── cert.pem
│ │ │ ├── key.der
│ │ │ └── key.pem
│ │ ├── Client/
│ │ │ ├── ResourceInformerTests.cs
│ │ │ ├── SyncResourceInformer.cs
│ │ │ ├── V1DeploymentResourceInformer.cs
│ │ │ └── V1PodResourceInformer.cs
│ │ ├── Hosting/
│ │ │ ├── BackgroundHostedServiceTests.cs
│ │ │ └── Fakes/
│ │ │ ├── FakeBackgroundHostedService.cs
│ │ │ ├── FakeServer.cs
│ │ │ ├── TestLatch.cs
│ │ │ └── TestLatches.cs
│ │ ├── IngressCacheTests.cs
│ │ ├── IngressControllerTests.cs
│ │ ├── IngressConversionTests.cs
│ │ ├── KubeResourceGenerator.cs
│ │ ├── Management/
│ │ │ └── KubernetesCoreExtensionsTests.cs
│ │ ├── NamespacedNameTests.cs
│ │ ├── Queues/
│ │ │ └── WorkQueueTests.cs
│ │ ├── Rate/
│ │ │ ├── LimitTests.cs
│ │ │ ├── LimiterTests.cs
│ │ │ └── ReservationTests.cs
│ │ ├── ReconcilerTests.cs
│ │ ├── TestCluster/
│ │ │ ├── Controllers/
│ │ │ │ ├── ResourceApiController.cs
│ │ │ │ └── ResourceApiGroupController.cs
│ │ │ ├── ITestCluster.cs
│ │ │ ├── ITestClusterHost.cs
│ │ │ ├── Models/
│ │ │ │ ├── ListParameters.cs
│ │ │ │ ├── ListResult.cs
│ │ │ │ └── ResourceObject.cs
│ │ │ ├── TestCluster.cs
│ │ │ ├── TestClusterHost.cs
│ │ │ ├── TestClusterHostBuilder.cs
│ │ │ ├── TestClusterOptions.cs
│ │ │ └── TestClusterStartup.cs
│ │ ├── Utils/
│ │ │ ├── ResourceSerializers.cs
│ │ │ └── TestLogger.cs
│ │ ├── Yarp.Kubernetes.Tests.csproj
│ │ └── testassets/
│ │ ├── annotations/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── basic-ingress/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── exact-match/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── external-name-ingress/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── hostname-routing/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── https/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── https-service-port-protocol/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── ingress-class-not-set/
│ │ │ └── ingress.yaml
│ │ ├── ingress-class-set/
│ │ │ └── ingress.yaml
│ │ ├── mapped-port/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── missing-svc/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-endpoints-ports/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-endpoints-same-port/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-hosts/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-ingresses/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-ingresses-one-svc/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-namespaces/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── port-diff-name/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── port-mismatch/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── resource-informer/
│ │ │ ├── ResourcesAreListedWhenReadyAsyncIsComplete/
│ │ │ │ ├── resources.yaml
│ │ │ │ └── shouldbe.yaml
│ │ │ └── ResourcesWithApiGroupAreListed/
│ │ │ ├── resources.yaml
│ │ │ └── shouldbe.yaml
│ │ ├── route-headers/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── route-metadata/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── route-methods/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── route-order/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ └── route-queryparameters/
│ │ ├── clusters.json
│ │ ├── ingress.yaml
│ │ └── routes.json
│ ├── ReverseProxy.FunctionalTests/
│ │ ├── Common/
│ │ │ ├── Helpers.cs
│ │ │ ├── HttpSysTestEnvironment.cs
│ │ │ ├── TestEnvironment.cs
│ │ │ └── TestUrlHelper.cs
│ │ ├── DistributedTracingTests.cs
│ │ ├── Expect100ContinueTests.cs
│ │ ├── HeaderTests.cs
│ │ ├── HttpForwarderCancellationTests.cs
│ │ ├── HttpProxyCookieTests.cs
│ │ ├── HttpSysDelegationTests.cs
│ │ ├── PassiveHealthCheckTests.cs
│ │ ├── TelemetryConsumptionTests.cs
│ │ ├── TelemetryEnumTests.cs
│ │ ├── WebSocketTests.cs
│ │ ├── WebSocketsTelemetryTests.cs
│ │ └── Yarp.ReverseProxy.FunctionalTests.csproj
│ ├── ReverseProxy.Tests/
│ │ ├── Common/
│ │ │ ├── EventAssertExtensions.cs
│ │ │ ├── HttpContentExtensions.cs
│ │ │ ├── MockHttpHandler.cs
│ │ │ ├── TaskExtensions.cs
│ │ │ ├── TestEventListener.cs
│ │ │ ├── TestResources.cs
│ │ │ └── TestTrailersFeature.cs
│ │ ├── Configuration/
│ │ │ ├── ActiveHealthCheckConfigTests.cs
│ │ │ ├── ClusterConfigTests.cs
│ │ │ ├── ConfigProvider/
│ │ │ │ ├── ConfigurationConfigProviderTests.cs
│ │ │ │ └── ConfigurationReadingExtensionsTests.cs
│ │ │ ├── ConfigValidatorTests.cs
│ │ │ ├── DestinationConfigTests.cs
│ │ │ ├── HealthCheckConfigTests.cs
│ │ │ ├── HttpClientConfigTests.cs
│ │ │ ├── PassiveHealthCheckConfigTests.cs
│ │ │ ├── RouteConfigTests.cs
│ │ │ ├── RouteHeaderTests.cs
│ │ │ ├── RouteMatchTests.cs
│ │ │ ├── RouteQueryParameterTests.cs
│ │ │ ├── SessionAffinityConfigTests.cs
│ │ │ ├── YarpOutputCachePolicyProviderTests.cs
│ │ │ └── YarpRateLimiterPolicyProviderTests.cs
│ │ ├── Delegation/
│ │ │ ├── HttpSysDelegatorMiddlewareTests.cs
│ │ │ └── HttpSysDelegatorTests.cs
│ │ ├── Forwarder/
│ │ │ ├── ForwarderHttpClientFactoryTests.cs
│ │ │ ├── ForwarderMiddlewareTests.cs
│ │ │ ├── HttpForwarderTests.cs
│ │ │ ├── HttpTransformerTests.cs
│ │ │ ├── RequestUtilitiesTests.cs
│ │ │ ├── ReverseProxyServiceCollectionTests.cs
│ │ │ ├── StreamCopierTests.cs
│ │ │ └── StreamCopyHttpContentTests.cs
│ │ ├── Health/
│ │ │ ├── ActiveHealthCheckMonitorTests.cs
│ │ │ ├── ClusterDestinationsUpdaterTests.cs
│ │ │ ├── ConsecutiveFailuresHealthPolicyTests.cs
│ │ │ ├── DefaultProbingRequestFactoryTests.cs
│ │ │ ├── DestinationHealthUpdaterTests.cs
│ │ │ ├── EntityActionSchedulerTests.cs
│ │ │ ├── HealthyAndUnknownDestinationsPolicyTests.cs
│ │ │ ├── HealthyOrPanicDestinationsPolicyTests.cs
│ │ │ ├── PassiveHealthCheckMiddlewareTests.cs
│ │ │ └── TransportFailureRateHealthPolicyTests.cs
│ │ ├── Limits/
│ │ │ └── LimitsMiddlewareTests.cs
│ │ ├── LoadBalancing/
│ │ │ ├── LoadBalancerMiddlewareTests.cs
│ │ │ └── LoadBalancingPoliciesTests.cs
│ │ ├── Management/
│ │ │ └── ProxyConfigManagerTests.cs
│ │ ├── Model/
│ │ │ ├── DestinationStateTests.cs
│ │ │ ├── HttpContextFeaturesExtensions.cs
│ │ │ └── ProxyPipelineInitializerMiddlewareTests.cs
│ │ ├── Routing/
│ │ │ ├── HeaderMatcherPolicyTests.cs
│ │ │ ├── ProxyEndpointFactoryTests.cs
│ │ │ ├── QueryMatcherPolicyTests.cs
│ │ │ ├── ReverseProxyConventionBuilderTests.cs
│ │ │ └── RoutingTests.cs
│ │ ├── SessionAffinity/
│ │ │ ├── AffinitizeTransformProviderTests.cs
│ │ │ ├── AffinitizeTransformTests.cs
│ │ │ ├── AffinityTestHelper.cs
│ │ │ ├── ArrCookieSessionAffinityPolicyTests.cs
│ │ │ ├── BaseSessionAffinityPolicyTests.cs
│ │ │ ├── CookieSessionAffinityPolicyTests.cs
│ │ │ ├── CustomHeaderSessionAffinityPolicyTests.cs
│ │ │ ├── HashCookieSessionAffinityPolicyTests.cs
│ │ │ ├── RedistributeAffinityFailurePolicyTests.cs
│ │ │ ├── Return503ErrorAffinityFailurePolicyTests.cs
│ │ │ └── SessionAffinityMiddlewareTests.cs
│ │ ├── Transforms/
│ │ │ ├── Builder/
│ │ │ │ └── TransformBuilderTests.cs
│ │ │ ├── DestinationPrefixTransformTests.cs
│ │ │ ├── ForwardedTransformExtensionsTests.cs
│ │ │ ├── HttpMethodChangeTransformTests.cs
│ │ │ ├── HttpMethodTransformExtensionsTests.cs
│ │ │ ├── PathRouteValuesTransformTests.cs
│ │ │ ├── PathStringTransformTests.cs
│ │ │ ├── PathTransformExtensionsTests.cs
│ │ │ ├── QueryParameterFromRouteTransformTests.cs
│ │ │ ├── QueryParameterFromStaticTransformTests.cs
│ │ │ ├── QueryParameterRemoveTransformTests.cs
│ │ │ ├── QueryTransformContextTests.cs
│ │ │ ├── QueryTransformExtensionsTests.cs
│ │ │ ├── RequestHeaderClientCertTransformTests.cs
│ │ │ ├── RequestHeaderForwardedTransformTests.cs
│ │ │ ├── RequestHeaderRemoveTransformTests.cs
│ │ │ ├── RequestHeaderRouteValueTransformTests.cs
│ │ │ ├── RequestHeaderValueTransformTests.cs
│ │ │ ├── RequestHeaderXForwardedForTransformTests.cs
│ │ │ ├── RequestHeaderXForwardedHostTransformTests.cs
│ │ │ ├── RequestHeaderXForwardedPrefixTransformTests.cs
│ │ │ ├── RequestHeaderXForwardedProtoTransformTests.cs
│ │ │ ├── RequestHeadersAllowedTransformTests.cs
│ │ │ ├── RequestHeadersTransformExtensionsTests.cs
│ │ │ ├── RequestTransformTests.cs
│ │ │ ├── ResponseHeaderRemoveTransformTests.cs
│ │ │ ├── ResponseHeaderValueTransformTests.cs
│ │ │ ├── ResponseHeadersAllowedTransformTests.cs
│ │ │ ├── ResponseTrailerRemoveTransformTests.cs
│ │ │ ├── ResponseTrailerValueTransformTests.cs
│ │ │ ├── ResponseTrailersAllowedTransformTests.cs
│ │ │ ├── ResponseTrailersTransformTests.cs
│ │ │ ├── ResponseTransformExtensionsTests.cs
│ │ │ ├── ResponseTransformTests.cs
│ │ │ ├── TransformBuilderContextFuncExtensionsTests.cs
│ │ │ └── TransformExtensionsTestsBase.cs
│ │ ├── Utilities/
│ │ │ ├── ActivityCancellationTokenSourceTests.cs
│ │ │ ├── AtomicCounterTests.cs
│ │ │ ├── CaseInsensitiveEqualHelperTests.cs
│ │ │ ├── RandomFactoryTests.cs
│ │ │ └── TlsFrameHelperTests.cs
│ │ ├── WebSocketsTelemetry/
│ │ │ └── WebSocketsParserTests.cs
│ │ ├── Yarp.ReverseProxy.Tests.csproj
│ │ └── validSelfSignedClientEkuCertificate.cer
│ ├── TestCertificates/
│ │ └── testCert.pfx
│ └── Tests.Common/
│ ├── TestAutoMockBase.cs
│ ├── TestLogger.cs
│ ├── TestLoggerProvider.cs
│ ├── TestRandom.cs
│ ├── TestRandomFactory.cs
│ ├── TestTimeProvider.cs
│ ├── XunitLoggerFactoryExtensions.cs
│ ├── XunitLoggerProvider.cs
│ └── Yarp.Tests.Common.csproj
├── test.cmd
├── test.sh
└── testassets/
├── BenchmarkApp/
│ ├── BenchmarkApp.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── README.md
│ ├── appsettings.json
│ └── testCert.pfx
├── Directory.Build.props
├── ReverseProxy.Code/
│ ├── Controllers/
│ │ └── HealthController.cs
│ ├── ForwarderMetricsConsumer.cs
│ ├── ForwarderTelemetryConsumer.cs
│ ├── MyTransformFactory.cs
│ ├── MyTransformProvider.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── ReverseProxy.Code.csproj
│ ├── TokenService.cs
│ ├── appsettings.Development.json
│ └── appsettings.json
├── ReverseProxy.Config/
│ ├── Controllers/
│ │ └── HealthController.cs
│ ├── CustomConfigFilter.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── ReverseProxy.Config.csproj
│ ├── appsettings.Development.json
│ └── appsettings.json
├── ReverseProxy.Direct/
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── ReverseProxy.Direct.csproj
│ ├── TlsFilter.cs
│ ├── appsettings.Development.json
│ └── appsettings.json
├── TestClient/
│ ├── CommandLineArgs.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── Scenarios/
│ │ ├── Http1Scenario.cs
│ │ ├── Http2PostExpectContinueScenario.cs
│ │ ├── Http2Scenario.cs
│ │ ├── IScenario.cs
│ │ ├── RawUpgradeScenario.cs
│ │ ├── SessionAffinityScenario.cs
│ │ └── WebSocketsScenario.cs
│ └── TestClient.csproj
└── TestServer/
├── AssemblyInfo.cs
├── Controllers/
│ ├── HealthController.cs
│ ├── HttpController.cs
│ ├── UpgradeController.cs
│ └── WebSocketsController.cs
├── Program.cs
├── Properties/
│ └── launchSettings.json
├── TestServer.csproj
├── appsettings.Development.json
└── appsettings.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .azuredevops/dependabot.yml
================================================
version: 2
# Disabling dependabot on Azure DevOps as this is a mirrored repo. Updates should go through github.
enable-campaigned-updates: false
enable-security-updates: false
================================================
FILE: .config/CredScanSuppressions.json
================================================
{
"tool": "Credential Scanner",
"suppressions": [
{
"_justification": "Legitimate key/cert used for testing",
"file": [
"testassets/BenchmarkApp/testCert.pfx",
"test/TestCertificates/testCert.pfx",
"test/Kubernetes.Tests/Certificates/key.der",
"test/Kubernetes.Tests/Certificates/key.pem"
]
}
]
}
================================================
FILE: .config/tsaoptions.json
================================================
{
"areaPath": "DevDiv\\ASP.NET Core\\YARP",
"codebaseName": "ReverseProxy",
"instanceUrl": "https://devdiv.visualstudio.com/",
"iterationPath": "DevDiv",
"notificationAliases": [
"dotnetrp@microsoft.com"
],
"projectName": "DEVDIV",
"repositoryName": "yarp",
"template": "TFSDEVDIV"
}
================================================
FILE: .dockerignore
================================================
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
**/ingress.yaml
**/ingress-controller.yaml
**/backend.yaml
**/ingress-sample.yaml
.dotnet
TestResults
================================================
FILE: .editorconfig
================================================
; EditorConfig to support per-solution formatting.
; Use the EditorConfig VS add-in to make this work.
; http://editorconfig.org/
;
; Here are some resources for what's supported for .NET/C#
; https://kent-boogaart.com/blog/editorconfig-reference-for-c-developers
; https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017
;
; Be **careful** editing this because some of the rules don't support adding a severity level
; For instance if you change to `dotnet_sort_system_directives_first = true:warning` (adding `:warning`)
; then the rule will be silently ignored.
; This is the default for the codeline.
root = true
[*]
indent_style = space
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.cs]
indent_size = 4
[*.{xml,config,*proj,nuspec,props,resx,targets,yml,tasks}]
indent_size = 2
[*.json]
indent_size = 2
[*.sh]
indent_size = 4
end_of_line = lf
## The .NET Style
## Things that are commented out are available to configure but we generally don't have a preference.
[*.{cs, vb}]
# Organize using directives
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-formatting-conventions?view=vs-2019#organize-using-directives
dotnet_sort_system_directives_first = true
# dotnet_separate_import_directive_groups = false
## TODO: Swap things back to suggestion from error before merging. Just doing this to find the violations quickly and fix them.
# Naming rules
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-naming-conventions?view=vs-2019
# Inspired by, but modified from, the Roslyn style: https://github.com/dotnet/roslyn/blob/75fcec13fdaa6f0f38f8ef1d7238d947df55cf5e/.editorconfig#L59
# Non-private static fields are PascalCase
dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields
dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style
dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field
dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected
dotnet_naming_symbols.non_private_static_fields.required_modifiers = static
dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case
# Non-private readonly fields are PascalCase
dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields
dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style
dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field
dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected
dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly
dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case
# Constants are PascalCase
dotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants
dotnet_naming_rule.constants_should_be_pascal_case.style = constant_style
dotnet_naming_symbols.constants.applicable_kinds = field, local
dotnet_naming_symbols.constants.required_modifiers = const
dotnet_naming_style.constant_style.capitalization = pascal_case
# Instance fields are camelCase and start with _
dotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion
dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields
dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style
dotnet_naming_symbols.instance_fields.applicable_kinds = field
dotnet_naming_style.instance_field_style.capitalization = camel_case
dotnet_naming_style.instance_field_style.required_prefix = _
# Locals and parameters are camelCase
dotnet_naming_rule.locals_should_be_camel_case.severity = suggestion
dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters
dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style
dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local
dotnet_naming_style.camel_case_style.capitalization = camel_case
# Local functions are PascalCase
dotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions
dotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style
dotnet_naming_symbols.local_functions.applicable_kinds = local_function
dotnet_naming_style.local_function_style.capitalization = pascal_case
# By default, name items with PascalCase
dotnet_naming_rule.members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.members_should_be_pascal_case.symbols = all_members
dotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style
dotnet_naming_symbols.all_members.applicable_kinds = *
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
# Don't use "this." anywhere.
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#this-and-me
dotnet_style_qualification_for_field = false:error
dotnet_style_qualification_for_property = false:error
dotnet_style_qualification_for_method = false:error
dotnet_style_qualification_for_event = false:error
# Use 'string' instead of 'String', 'int' instead of 'Int32', etc.
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#language-keywords
dotnet_style_predefined_type_for_locals_parameters_members = true:error
dotnet_style_predefined_type_for_member_access = true:error
# Explicitly specify modifiers and always mark fields that can be 'readonly'
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#normalize-modifiers
dotnet_style_require_accessibility_modifiers = always:error
dotnet_style_readonly_field = true:error
# We generally don't have rules about parentheses.
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#parentheses-preferences
# dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
# dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
# dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
# dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
# Expression preferences
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#expression-level-preferences
dotnet_style_prefer_auto_properties = true:error
# dotnet_style_object_initializer = true:suggestion
# dotnet_style_collection_initializer = true:suggestion
# dotnet_style_explicit_tuple_names = true:suggestion
# dotnet_style_prefer_inferred_tuple_names = true:suggestion
# dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
# dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
# dotnet_style_prefer_conditional_expression_over_return = true:suggestion
# dotnet_style_prefer_compound_assignment = true:suggestion
# Null-checking preferences
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#null-checking-preferences
# dotnet_style_coalesce_expression = true:suggestion
# dotnet_style_null_propagation = true:suggestion
# Parameter preferences
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#parameter-preferences
dotnet_code_quality_unused_parameters = all:error
## C#-specific style
[*.cs]
# License header
file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license.
# Preferred order of modfiers.
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#normalize-modifiers
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:error
# Implicit and explicit types
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#implicit-and-explicit-types
csharp_style_var_for_built_in_types = true:error
csharp_style_var_when_type_is_apparent = true:error
csharp_style_var_elsewhere = true:error
# Expression-bodied members
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#expression-bodied-members
# csharp_style_expression_bodied_methods = false:silent
# csharp_style_expression_bodied_constructors = false:silent
# csharp_style_expression_bodied_operators = false:silent
# csharp_style_expression_bodied_properties = true:suggestion
# csharp_style_expression_bodied_indexers = true:suggestion
# csharp_style_expression_bodied_accessors = true:suggestion
# csharp_style_expression_bodied_lambdas = true:silent
# csharp_style_expression_bodied_local_functions = false:silent
# Pattern matching
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#pattern-matching
# csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
# csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
# Inlined variable declarations (out var i)
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#inlined-variable-declarations
csharp_style_inlined_variable_declaration = true:error
# Expression preferences ('default' vs 'default(T)')
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#c-expression-level-preferences
csharp_prefer_simple_default_expression = true:error
# Null-checking preferences
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#c-null-checking-preferences
# csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:error
# Code block preferences
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#code-block-preferences
csharp_prefer_braces = true:error
# Unused value preferences
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#unused-value-preferences
# This one is S P I C Y. Enabling either option *forces* you to put something on the left-side when you call a method that returns a value.
# csharp_style_unused_value_expression_statement_preference = discard_variable:silent
# csharp_style_unused_value_assignment_preference = discard_variable:suggestion
# Index and Range preferences
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#index-and-range-preferences
# csharp_style_prefer_index_operator = true:suggestion
# csharp_style_prefer_range_operator = true:suggestion
# Miscellaneous preferences
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-language-conventions?view=vs-2019#miscellaneous-preferences
csharp_using_directive_placement = outside_namespace:error
# csharp_style_deconstructed_variable_declaration = true:suggestion
# csharp_style_pattern_local_over_anonymous_function = true:suggestion
# csharp_prefer_static_local_function = true:suggestion
# csharp_prefer_simple_using_statement = true:suggestion
# csharp_style_prefer_switch_expression = true:suggestion
csharp_style_namespace_declarations=file_scoped:suggestion
# New-line options
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-formatting-conventions?view=vs-2019#new-line-options
csharp_new_line_before_open_brace = methods, properties, control_blocks, types, anonymous_methods, lambdas, object_collection_array_initializers, accessors
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
# Indentation options
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-formatting-conventions?view=vs-2019#indentation-options
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = one_less_than_current
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents_when_block = true
# Spacing options
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-formatting-conventions?view=vs-2019#spacing-options
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_after_comma = true
csharp_space_before_comma = false
csharp_space_after_dot = false
csharp_space_before_dot = false
csharp_space_after_semicolon_in_for_statement = true
csharp_space_before_semicolon_in_for_statement = false
csharp_space_around_declaration_statements = false
csharp_space_before_open_square_brackets = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_square_brackets = false
# Wrap options
# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-formatting-conventions?view=vs-2019#wrap-options
csharp_preserve_single_line_statements = true
csharp_preserve_single_line_blocks = true
================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Make sh files under the build directory always have LF as line endings
###############################################################################
*.sh eol=lf
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
================================================
FILE: .github/CODEOWNERS
================================================
# Users referenced in this file will automatically be requested as reviewers for PRs that modify the given paths.
# See https://help.github.com/articles/about-code-owners/
* @MihaZupan @benjaminpetit
================================================
FILE: .github/ISSUE_TEMPLATE/bug.md
================================================
---
name: Bug report
about: Create a report about something that is not working
labels: "Type: Bug"
---
### Describe the bug
A clear and concise description of what the bug is.
### To Reproduce
<!--
What steps can we follow to reproduce the issue?
Got Exceptions? Include both the message and the stack trace
-->
### Further technical details
- Include the version of the packages you are using
- The platform (Linux/macOS/Windows)
================================================
FILE: .github/ISSUE_TEMPLATE/feedback.md
================================================
---
name: Feedback
about: Tell us what you think!
labels: "Type: Feedback"
---
### Some details
**How many backends are in your application?**
- [ ] 1-2
- [ ] 3-5
- [ ] 6-10
- [ ] 10+
**How do you host your application?**
- [ ] Kubernetes
- [ ] Azure App Service
- [ ] Azure VMs
- [ ] Other Cloud Provider (please include details below)
- [ ] Other Hosting model (please include details below)
### What did you think of YARP?
================================================
FILE: .github/ISSUE_TEMPLATE/idea.md
================================================
---
name: Idea
about: Ideas, feature requests, and wishes
labels: "Type: Idea"
---
### What should we add or change to make your life better?
### Why is this important to you?
================================================
FILE: .github/policies/resourceManagement.yml
================================================
id:
name: GitOps.PullRequestIssueManagement
description: GitOps.PullRequestIssueManagement primitive
owner:
resource: repository
disabled: false
where:
configuration:
resourceManagementConfiguration:
scheduledSearches: []
eventResponderTasks:
- if:
- payloadType: Pull_Request
- hasLabel:
label: Auto-Merge
then:
- enableAutoMerge:
mergeMethod: Squash
description:
- if:
- payloadType: Pull_Request
- labelRemoved:
label: Auto-Merge
then:
- disableAutoMerge
description:
- if:
- payloadType: Pull_Request
- isAction:
action: Opened
- isActivitySender:
user: dotnet-maestro[bot]
issueAuthor: False
- titleContains:
pattern: Update dependencies
isRegex: False
then:
- approvePullRequest:
comment: Auto-approving dependency update.
description:
onFailure:
onSuccess:
================================================
FILE: .github/workflows/docker_build.yml
================================================
name: Dockerfiles Build
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
# Check out the branch
- name: Checkout Code
uses: actions/checkout@v2
# Setup up builder
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
# Run a build for the Dockerfiles but don't publish
- name: Build Combined
id: docker_combined
uses: docker/build-push-action@v2
with:
context: ./
file: ./samples/KubernetesIngress.Sample/Combined/Dockerfile
push: false
tags: microsoft/yarp-combined:latest
- name: Build Ingress
id: docker_ingress
uses: docker/build-push-action@v2
with:
context: ./
file: ./samples/KubernetesIngress.Sample/Ingress/Dockerfile
push: false
tags: microsoft/yarp-ingress:latest
- name: Build Monitor
id: docker_monitor
uses: docker/build-push-action@v2
with:
context: ./
file: ./samples/KubernetesIngress.Sample/Monitor/Dockerfile
push: false
tags: microsoft/yarp-monitor:latest
- name: Build Backend
id: docker_backend
uses: docker/build-push-action@v2
with:
context: ./
file: ./samples/KubernetesIngress.Sample/backend/Dockerfile
push: false
tags: microsoft/yarp-backend:latest
================================================
FILE: .github/workflows/markdownlint-problem-matcher.json
================================================
{
"problemMatcher": [
{
"owner": "markdownlint",
"pattern": [
{
"regexp": "^([^:]*):(\\d+):?(\\d+)?\\s([\\w-\\/]*)\\s(.*)$",
"file": 1,
"line": 2,
"column": 3,
"code": 4,
"message": 5
}
]
}
]
}
================================================
FILE: .github/workflows/markdownlint.yml
================================================
name: Markdownlint
permissions:
contents: read
# run even on changes without markdown changes, so that we can
# make it in GitHub a required check for PR's
on:
pull_request:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 'lts/*'
- name: Run Markdownlint
run: |
echo "::add-matcher::.github/workflows/markdownlint-problem-matcher.json"
npm i -g markdownlint-cli
markdownlint --ignore-path .github/workflows/markdownlintignore "**/*.md"
================================================
FILE: .github/workflows/markdownlintignore
================================================
# Ignore files under eng/common (managed by dotnet/arcade)
eng/common/
================================================
FILE: .gitignore
================================================
## Arcade specific things
# Ignore the local '.dotnet' runtime directory and local '.packages' directory (only during CI builds, but still shouldn't ever be checked in)
.dotnet/
.packages/
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Rider
.idea/
# nohup
nohup.out
================================================
FILE: .markdownlint.json
================================================
{
"default": true,
"ul-indent": false,
"no-trailing-spaces": false,
"line-length": false,
"blanks-around-headings": false,
"no-duplicate-heading": { "siblings_only": true },
"no-trailing-punctuation": false,
"ol-prefix": { "one_or_ordered": true },
"blanks-around-fences": false,
"blanks-around-lists": false,
"no-inline-html": { "allowed_elements": [ "summary", "details" ]},
"no-bare-urls": false,
"single-trailing-newline": false,
"emphasis-style": false,
"first-line-heading": false,
"no-space-in-code": false,
// rule settings and options are documented in https://github.com/DavidAnson/markdownlint
// feel free to disable more low value rules in here; get rule name from the error message.
// the purpose of the linter is to catch significant issues like broken links.
}
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.
For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).
================================================
FILE: CONTRIBUTING.md
================================================
# YARP Contribution Guide
We're excited to accept contributions, but like all open source projects need to set some guidelines on how and what to contribute. There can be nothing more frustrating than working on a change for some time, only to have it sitting forever as a PR. The purpose of this doc is to set expectations for how best to contribute so that YARP can benefit from the communities skills and knowledge.
## General feedback and discussions?
Start a discussion on the [repository issue tracker](https://github.com/dotnet/yarp/issues).
## Issues
We love issues. Issues are the best place to discuss bugs, feature requests, ideas, designs etc. Issues are the way for everyone to communicate. We use issues to communicate across the team. Almost all contributions should start with an issue.
If the conversations on an issue wander off from the initial topic, and new ideas or issues get introduced, then those should be split off into separate issues. That makes it much easier to triage the issue as the decision can/should apply to the main concept, and those separate issues won't be lost and will also be considered. So if in doubt create a new issue, and add links from both the new and original issue to each other. The new issue can always be closed if it turns out to be a duplicate.
In particular, conversations on closed issues *won't cause an issue to be re-opened*, and are unlikely to be noticed, so please create a new issue and refer to the old one with a link.
## Bugs
As long as humans write software, there will be bugs. If you find a bug, file an issue.
The line between a bug and a feature request or design change are tricky. For the purposes of this section a bug is where the code doesn't do what was intended by the design of the feature - it may be because of human error, or not considering cases that occur in the real world. If you feel confident about the fix, create a Pull Request (PR). Bug PR's should be small and uncontroversial, and therefore easily integrated.
## Reporting security issues and bugs
Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) secure@microsoft.com. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094.aspx).
## Contributing code and content
We accept fixes and features! Here are some resources to help you get started on how to contribute code or new content.
* Look at the [Contributor documentation](/docs/) to get started on building the source code on your own.
* ["Help wanted" issues](https://github.com/dotnet/yarp/labels/help%20wanted) - these issues are up for grabs. Comment on an issue if you want to create a fix.
* ["Good first issue" issues](https://github.com/dotnet/yarp/labels/good%20first%20issue) - we think these are a good for newcomers.
### Identifying the scale
If you would like to contribute to one of our repositories, first identify the scale of what you would like to contribute. If it is small (grammar/spelling or a bug fix) feel free to start working on a fix. If you are submitting a feature or substantial code contribution, please discuss it with the team and ensure it follows the product roadmap. You might also read these two blogs posts on contributing code: [Open Source Contribution Etiquette](http://tirania.org/blog/archive/2010/Dec-31.html) by Miguel de Icaza and [Don't "Push" Your Pull Requests](https://www.igvita.com/2011/12/19/dont-push-your-pull-requests/) by Ilya Grigorik. All code submissions will be rigorously reviewed and tested by the YARP team, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source.
### Roadmap
Our primary focus is going to be on features and work items that are listed in the latest milestone for the next release.
Every feature should have an issue, where scoping and design will be discussed. If you wish to contribute, we'd prefer to agree to a design in the issue, before submitting a PR.
The last thing we want is for you to spend time working on a feature and then have the PR rejected or sit and get stale.
There is a cost to accepting PRs. We really appreciate your help and contributions but it takes time for us to review your code, and the team will be responsible for maintaining it.
We're happy to take a look at PRs contributing other features, but our focus will be on the work we already have planned.
Those decisions aren't final though, and we change them over time as we learn new things. Feel free to file issues or comment on existing ones if you have new data to provide!
### Extensibility
One of the primary goals of YARP is to be easily extensible. Each deployment situation will be different, and the features that are "in the box" may not do exactly what you need. The goal is for you to be able to insert additional modules in the pipeline, or replace a module to achieve the functionality that you need. The answer to many feature requests may be that it should be a custom module, rather than a change to the existing feature. In those cases, we are unlikely to want a PR for the module, but will be very interested in any changes to the core that enable the extensibility for you to achieve your scenario.
### Submitting a pull request
You will need to sign a [Contributor License Agreement](https://cla.dotnetfoundation.org/) when submitting your pull request.
To complete the Contributor License Agreement (CLA), you will need to follow the instructions provided by the CLA bot when you send the pull request.
This needs to only be done once for any .NET Foundation OSS project.
If you don't know what a pull request is read this article: https://help.github.com/articles/using-pull-requests.
Make sure the repository can build and all tests pass. Familiarize yourself with the project workflow and our coding conventions.
### Feedback
Your pull request will now go through extensive checks by the subject matter experts on our team. Please be patient; we have hundreds of pull requests across all of our repositories. Update your pull request according to feedback until it is approved by one of the YARP team members. All changes go through this process and a PR may go through multiple revisions until its accepted. This document has been through the same process, and if you look at the history there were probably multiple edits to each PR. After that, one of our team members may adjust the branch you merge into based on the expected release schedule.
## Code of conduct
See [CODE-OF-CONDUCT.md](./CODE_OF_CONDUCT.md)
================================================
FILE: Directory.Build.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.DotNet.Arcade.Sdk" />
<Import Project="TFMs.props" />
<PropertyGroup>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
<PackageIcon></PackageIcon>
<PackageIconFullPath></PackageIconFullPath>
<LangVersion>12.0</LangVersion>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<StrongNameKeyId>Microsoft</StrongNameKeyId>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<IncludeSymbols>true</IncludeSymbols>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup>
<MoqPublicKey>0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7</MoqPublicKey>
</PropertyGroup>
</Project>
================================================
FILE: Directory.Build.targets
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project>
<Import Project="Sdk.targets" Sdk="Microsoft.DotNet.Arcade.Sdk" />
<ItemGroup Condition="'$(IsTestProject)' != 'true' and '$(IsSampleProject)' != 'true'">
<EditorConfigFiles Include="$(MSBuildThisFileDirectory)eng\CodeAnalysis.src.globalconfig" />
</ItemGroup>
<ItemGroup Condition="'$(IsTestProject)' == 'true' or '$(IsSampleProject)' == 'true'">
<EditorConfigFiles Include="$(MSBuildThisFileDirectory)eng\CodeAnalysis.test.globalconfig" />
</ItemGroup>
</Project>
================================================
FILE: LICENSE.txt
================================================
The MIT License (MIT)
Copyright (c) .NET Foundation and Contributors
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: NuGet.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<!-- Feed to use to restore the Arcade SDK from -->
<add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" />
<!-- Feeds to use to restore dependent packages from -->
<add key="dotnet-public" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" />
<add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
<!-- Feed for benchmark infrastructure to restore Microsoft.NETCore.App.Runtime for self-contained builds -->
<add key="dotnet6" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json" />
<add key="dotnet7" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json" />
<add key="dotnet8" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8/nuget/v3/index.json" />
</packageSources>
<disabledPackageSources>
<clear />
</disabledPackageSources>
</configuration>
================================================
FILE: README.md
================================================

# Welcome to the YARP project
YARP (which stands for "Yet Another Reverse Proxy") is a project to create a reverse proxy server. We found a bunch of internal teams at Microsoft who were either building a reverse proxy for their service or had been asking about APIs and tech for building one, so we decided to get them all together to work on a common solution, this project.
YARP is a reverse proxy toolkit for building fast proxy servers in .NET using the infrastructure from ASP.NET and .NET. The key differentiator for YARP is that it's been designed to be easily customized and tweaked to match the specific needs of each deployment scenario.
We expect YARP to ship as a library and project template that together provide a robust, performant proxy server. Its pipeline and modules are designed so that you can then customize the functionality for your needs. For example, while YARP supports configuration files, we expect that many users will want to manage the configuration programmatically based on their own backend configuration management system, YARP will provide a configuration API to enable that customization in-proc. YARP is designed with customizability as a primary scenario, rather than requiring you to break out to script or having to rebuild from source.
# Getting started
- See our [Getting Started](https://learn.microsoft.com/aspnet/core/fundamentals/servers/yarp/getting-started) docs.
- Try our [previews](https://github.com/dotnet/yarp/releases).
- Try our latest [daily build](/docs/DailyBuilds.md).
- See our [support policy](/docs/roadmap.md).
# Updates
For regular updates, see our [releases page](https://github.com/dotnet/yarp/releases). Subscribe to release notifications on this repository to be notified of future updates (Watch -> Custom -> Releases).
If you want to live on the bleeding edge, you can pickup the [daily builds](/docs/DailyBuilds.md).
# Build
To build the repo, you should only need to run `build.cmd` (on Windows) or `build.sh` (on Linux or macOS). The script will download the .NET SDK and build the solution.
For VS on Windows, install the latest [VS 2022](https://visualstudio.microsoft.com/downloads/) release and then run the `startvs.cmd` script to launch Visual Studio using the appropriate local copy of the .NET SDK.
To set up local development with Visual Studio, Visual Studio for Mac or Visual Studio Code, you need to put the local copy of the .NET SDK in your `PATH` environment variable. Our `Restore` script fetches the latest build of .NET and installs it to a `.dotnet` directory *within* this repository.
We provide some scripts to set all this up for you. Just follow these steps:
1. Run the `restore.cmd`/`restore.sh` script to fetch the required .NET SDK locally (to the `.dotnet` directory within this repo)
1. "Dot-source" the `activate` script to put the local .NET SDK on the PATH
1. For PowerShell, run: `. .\activate.ps1` (note the leading `. `, it is required!)
1. For Linux/macOS/WSL, run: `. ./activate.sh`
1. For CMD, there is no supported script. You can manually add the `.dotnet` directory **within this repo** to your `PATH`. Ensure `where dotnet` shows a path within this repository!
1. Launch VS, VS for Mac, or VS Code!
When you're done, you can run the `deactivate` function to undo the changes to your `PATH`.
If you're having trouble building the project, or developing in Visual Studio, please file an issue to let us know and we'll help out (and fix our scripts/tools as needed)!
# Testing
The command to build and run all tests: `build.cmd/sh -test`.
To run specific test you may use XunitMethodName property: `dotnet build /t:Test /p:XunitMethodName={FullyQualifiedNamespace}.{ClassName}.{MethodName}`.
The tests can also be run from Visual Studio if launched using `startvs.cmd`.
# Roadmap
see [docs/roadmap.md](/docs/roadmap.md)
# Reporting security issues and bugs
Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) at `secure@microsoft.com`. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including [the MSRC PGP key](https://www.microsoft.com/msrc/pgp-key-msrc), can be found at the [Microsoft Security Response Center](https://www.microsoft.com/msrc).
# Contributing
This project welcomes contributions and suggestions.
Check out the [contributing](CONTRIBUTING.md) page for more info.
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.
For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).
================================================
FILE: SECURITY.md
================================================
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.3 BLOCK -->
## Security
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets Microsoft's [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)) of a security vulnerability, please report it to us as described below.
## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.**
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
* Full paths of source file(s) related to the manifestation of the issue
* The location of the affected source code (tag/branch/commit or direct URL)
* Any special configuration required to reproduce the issue
* Step-by-step instructions to reproduce the issue
* Proof-of-concept or exploit code (if possible)
* Impact of the issue, including how an attacker might exploit the issue
This information will help us triage your report more quickly.
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs.
## Preferred Languages
We prefer all communications to be in English.
## Policy
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd).
<!-- END MICROSOFT SECURITY.MD BLOCK -->
================================================
FILE: TFMs.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<LatestDevTFM>net9.0</LatestDevTFM>
<ReleaseTFMs>net8.0</ReleaseTFMs>
<TestTFMs>net8.0;net9.0</TestTFMs>
</PropertyGroup>
</Project>
================================================
FILE: THIRD-PARTY-NOTICES.TXT
================================================
License notice for TlsFrame Parser
-------------------------------
https://github.com/dotnet/runtime/blob/master/LICENSE.txt
The MIT License (MIT)
Copyright (c) .NET Foundation and Contributors
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: YARP.slnx
================================================
<Solution>
<Folder Name="/samples/">
<Project Path="samples/BasicYarpSample/BasicYarpSample.csproj" />
<Project Path="samples/ReverseProxy.Auth.Sample/ReverseProxy.Auth.Sample.csproj" />
<Project Path="samples/ReverseProxy.Code.Sample/ReverseProxy.Code.Sample.csproj" />
<Project Path="samples/ReverseProxy.Config.Sample/ReverseProxy.Config.Sample.csproj" />
<Project Path="samples/ReverseProxy.ConfigFilter.Sample/ReverseProxy.ConfigFilter.Sample.csproj" />
<Project Path="samples/ReverseProxy.Direct.Sample/ReverseProxy.Direct.Sample.csproj" />
<Project Path="samples/ReverseProxy.LetsEncrypt.Sample/ReverseProxy.LetsEncrypt.Sample.csproj" />
<Project Path="samples/ReverseProxy.Metrics.Sample/ReverseProxy.Metrics.Sample.csproj" />
<Project Path="samples/ReverseProxy.Transforms.Sample/ReverseProxy.Transforms.Sample.csproj" />
<Project Path="samples/SampleServer/SampleServer.csproj" />
</Folder>
<Folder Name="/samples/HttpSys.Sample/">
<Project Path="samples/ReverseProxy.HttpSysDelegation.Sample/ReverseProxy/ReverseProxy.HttpSysDelegation.Sample.csproj" />
<Project Path="samples/ReverseProxy.HttpSysDelegation.Sample/SampleHttpSysServer/SampleHttpSysServer.csproj" />
</Folder>
<Folder Name="/samples/KubernetesIngress.Sample/">
<File Path="samples/KubernetesIngress.Sample/README.md" />
</Folder>
<Folder Name="/samples/KubernetesIngress.Sample/Combined/">
<Project Path="samples/KubernetesIngress.Sample/Combined/Yarp.Kubernetes.IngressController.csproj" />
</Folder>
<Folder Name="/samples/KubernetesIngress.Sample/Ingress/">
<Project Path="samples/KubernetesIngress.Sample/Ingress/Yarp.Kubernetes.Ingress.csproj" />
<Project Path="samples/KubernetesIngress.Sample/Monitor/Yarp.Kubernetes.Monitor.csproj" />
</Folder>
<Folder Name="/samples/KubernetesIngress.Sample/Sample/">
<Project Path="samples/KubernetesIngress.Sample/backend/backend.csproj" />
</Folder>
<Folder Name="/samples/Prometheus/">
<Project Path="samples/Prometheus/HttpLoadApp/HttpLoadApp.csproj" />
<Project Path="samples/Prometheus/ReverseProxy.Metrics-Prometheus.Sample/ReverseProxy.Metrics.Prometheus.Sample.csproj" />
</Folder>
<Folder Name="/Solution Items/">
<File Path=".editorconfig" />
<File Path="eng/Versions.props" />
<File Path="global.json" />
<File Path="NuGet.config" />
<File Path="TFMs.props" />
</Folder>
<Folder Name="/src/">
<Project Path="src/Application/Yarp.Application.csproj" />
<Project Path="src/Kubernetes.Controller/Yarp.Kubernetes.Controller.csproj" />
<Project Path="src/ReverseProxy/Yarp.ReverseProxy.csproj" />
<Project Path="src/TelemetryConsumption/Yarp.Telemetry.Consumption.csproj" />
</Folder>
<Folder Name="/test/">
<Project Path="test/Kubernetes.Tests/Yarp.Kubernetes.Tests.csproj" />
<Project Path="test/ReverseProxy.FunctionalTests/Yarp.ReverseProxy.FunctionalTests.csproj" />
<Project Path="test/ReverseProxy.Tests/Yarp.ReverseProxy.Tests.csproj" />
<Project Path="test/Tests.Common/Yarp.Tests.Common.csproj" />
</Folder>
<Folder Name="/testassets/">
<Project Path="testassets/BenchmarkApp/BenchmarkApp.csproj" />
<Project Path="testassets/ReverseProxy.Code/ReverseProxy.Code.csproj" />
<Project Path="testassets/ReverseProxy.Config/ReverseProxy.Config.csproj" />
<Project Path="testassets/ReverseProxy.Direct/ReverseProxy.Direct.csproj" />
<Project Path="testassets/TestClient/TestClient.csproj" />
<Project Path="testassets/TestServer/TestServer.csproj" />
</Folder>
</Solution>
================================================
FILE: activate.ps1
================================================
#
# This file must be used by invoking ". .\activate.ps1" from the command line.
# You cannot run it directly. See https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_scripts#script-scope-and-dot-sourcing
#
# To exit from the environment this creates, execute the 'deactivate' function.
#
if ($MyInvocation.CommandOrigin -eq 'runspace') {
Write-Host -f Red "This script cannot be invoked directly."
Write-Host -f Red "To function correctly, this script file must be 'dot sourced' by calling `". $PSCommandPath`" (notice the dot at the beginning)."
exit 1
}
function deactivate ([switch]$init) {
# reset old environment variables
if (Test-Path variable:_OLD_PATH) {
$env:PATH = $_OLD_PATH
Remove-Item variable:_OLD_PATH
}
if (test-path function:_old_prompt) {
Set-Item Function:prompt -Value $function:_old_prompt -ea ignore
remove-item function:_old_prompt
}
Remove-Item env:DOTNET_ROOT -ea ignore
Remove-Item env:DOTNET_MULTILEVEL_LOOKUP -ea ignore
if (-not $init) {
# Remove the deactivate function
Remove-Item function:deactivate
}
}
# Cleanup the environment
deactivate -init
$_OLD_PATH = $env:PATH
# Tell dotnet where to find itself
$env:DOTNET_ROOT = "$PSScriptRoot\.dotnet"
${env:DOTNET_ROOT(x86)} = "$PSScriptRoot\.dotnet\x86"
# Tell dotnet not to look beyond the DOTNET_ROOT folder for more dotnet things
$env:DOTNET_MULTILEVEL_LOOKUP = 0
# Put dotnet first on PATH
$env:PATH = "${env:DOTNET_ROOT};${env:PATH}"
# Set the shell prompt
if (-not $env:DISABLE_CUSTOM_PROMPT) {
$function:_old_prompt = $function:prompt
function dotnet_prompt {
# Add a prefix to the current prompt, but don't discard it.
write-host "($( split-path $PSScriptRoot -leaf )) " -nonewline
& $function:_old_prompt
}
Set-Item Function:prompt -Value $function:dotnet_prompt -ea ignore
}
Write-Host -f Magenta "Enabled the .NET Core environment. Execute 'deactivate' to exit."
if (-not (Test-Path "${env:DOTNET_ROOT}\dotnet.exe")) {
Write-Host -f Yellow ".NET Core has not been installed yet. Run $PSScriptRoot\restore.cmd to install it."
}
else {
Write-Host "dotnet = ${env:DOTNET_ROOT}\dotnet.exe"
}
================================================
FILE: activate.sh
================================================
#
# This file must be used by invoking "source activate.sh" from the command line.
# You cannot run it directly.
# To exit from the environment this creates, execute the 'deactivate' function.
_RED="\033[0;31m"
_MAGENTA="\033[0;95m"
_YELLOW="\033[0;33m"
_RESET="\033[0m"
# This detects if a script was sourced or invoked directly
# See https://stackoverflow.com/a/28776166/2526265
sourced=0
if [ -n "$ZSH_EVAL_CONTEXT" ]; then
case $ZSH_EVAL_CONTEXT in *:file) sourced=1;; esac
THIS_SCRIPT="${0:-}"
elif [ -n "$KSH_VERSION" ]; then
[ "$(cd $(dirname -- $0) && pwd -P)/$(basename -- $0)" != "$(cd $(dirname -- ${.sh.file}) && pwd -P)/$(basename -- ${.sh.file})" ] && sourced=1
THIS_SCRIPT="${0:-}"
elif [ -n "$BASH_VERSION" ]; then
(return 2>/dev/null) && sourced=1
THIS_SCRIPT="$BASH_SOURCE"
else # All other shells: examine $0 for known shell binary filenames
# Detects `sh` and `dash`; add additional shell filenames as needed.
case ${0##*/} in sh|dash) sourced=1;; esac
THIS_SCRIPT="${0:-}"
fi
if [ $sourced -eq 0 ]; then
printf "${_RED}This script cannot be invoked directly.${_RESET}\n"
printf "${_RED}To function correctly, this script file must be sourced by calling \"source $0\".${_RESET}\n"
exit 1
fi
deactivate () {
# reset old environment variables
if [ ! -z "${_OLD_PATH:-}" ] ; then
export PATH="$_OLD_PATH"
unset _OLD_PATH
fi
if [ ! -z "${_OLD_PS1:-}" ] ; then
export PS1="$_OLD_PS1"
unset _OLD_PS1
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" ] || [ -n "${ZSH_VERSION:-}" ] ; then
hash -r 2>/dev/null
fi
unset DOTNET_ROOT
unset DOTNET_MULTILEVEL_LOOKUP
if [ ! "${1:-}" = "init" ] ; then
# Remove the deactivate function
unset -f deactivate
fi
}
# Cleanup the environment
deactivate init
DIR="$( cd "$( dirname "$THIS_SCRIPT" )" && pwd )"
_OLD_PATH="$PATH"
# Tell dotnet where to find itself
export DOTNET_ROOT="$DIR/.dotnet"
# Tell dotnet not to look beyond the DOTNET_ROOT folder for more dotnet things
export DOTNET_MULTILEVEL_LOOKUP=0
# Put dotnet first on PATH
export PATH="$DOTNET_ROOT:$PATH"
# Set the shell prompt
if [ -z "${DISABLE_CUSTOM_PROMPT:-}" ] ; then
_OLD_PS1="$PS1"
export PS1="(`basename \"$DIR\"`) $PS1"
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" ] || [ -n "${ZSH_VERSION:-}" ] ; then
hash -r 2>/dev/null
fi
printf "${_MAGENTA}Enabled the .NET Core environment. Execute 'deactivate' to exit.${_RESET}\n"
if [ ! -f "$DOTNET_ROOT/dotnet" ]; then
printf "${_YELLOW}.NET Core has not been installed yet. Run $DIR/restore.sh to install it.${_RESET}\n"
else
printf "dotnet = $DOTNET_ROOT/dotnet\n"
fi
================================================
FILE: azure-pipelines-nonprod.yml
================================================
variables:
# Needed for Arcade template
- name: _TeamName
value: AspNetCore
# Needed for Microbuild template
- name: TeamName
value: AspNetCore
- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
value: true
- name: _PublishUsingPipelines
value: true
- name: _BuildConfig
value: Release
# Rely on task Arcade injects, not auto-injected build step.
- template: /eng/common/templates/variables/pool-providers.yml@self
- name: skipComponentGovernanceDetection
value: true
trigger:
batch: true
branches:
exclude:
- main
- release/*
- internal/release/*
pr:
autoCancel: false
branches:
include:
- '*'
resources:
repositories:
- repository: MicroBuildTemplate
type: git
name: 1ESPipelineTemplates/MicroBuildTemplate
ref: refs/tags/release
extends:
template: azure-pipelines/MicroBuild.1ES.Unofficial.yml@MicroBuildTemplate
parameters:
featureFlags:
autoBaseline: true
sdl:
sourceAnalysisPool:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
policheck:
enabled: true
tsa:
enabled: true
codeql:
tsaEnabled: true
binskim:
enabled: true
# See https://dev.azure.com/securitytools/SecurityIntegration/_wiki/wikis/Guardian/1378/Glob-Format
analyzeTargetGlob: '**\bin\Yarp.ReverseProxy\**.dll;**\bin\Yarp.Telemetry.Consumption\**.dll'
preReleaseVersion: '4.3.1'
stages:
- stage: build
displayName: Build
jobs:
- template: /eng/common/templates-official/jobs/jobs.yml@self
parameters:
enableMicrobuild: true
enablePublishBuildArtifacts: true
enablePublishTestResults: true
enablePublishBuildAssets: true
enablePublishUsingPipelines: ${{ variables._PublishUsingPipelines }}
enableTelemetry: true
mergeTestResults: true
jobs:
- job: Windows
pool:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
variables:
- group: Publish-Build-Assets
- name: _OfficialBuildArgs
value: /p:DotNetSignType=$(_SignType)
/p:TeamName=$(_TeamName)
/p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines)
/p:OfficialBuildId=$(BUILD.BUILDNUMBER)
- name: _SignType
value: real
steps:
- checkout: self
clean: true
- script: eng\common\cibuild.cmd -configuration $(_BuildConfig) -prepareMachine $(_OfficialBuildArgs)
displayName: Build and Publish
- task: 1ES.PublishBuildArtifacts@1
displayName: Upload TestResults
condition: always()
continueOnError: true
inputs:
PathtoPublish: artifacts/TestResults/$(_BuildConfig)/
ArtifactName: $(Agent.Os)_$(Agent.JobName) TestResults
PublishLocation: Container
- task: 1ES.PublishBuildArtifacts@1
displayName: Upload package artifacts
condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
inputs:
PathtoPublish: artifacts/packages/
ArtifactName: artifacts
PublishLocation: Container
- template: /eng/common/templates-official/post-build/post-build.yml@self
parameters:
publishingInfraVersion: 3
enableSymbolValidation: false
enableSourceLinkValidation: false
enableSigningValidation: false
enableNugetValidation: false
SDLValidationParameters:
enable: true
continueOnError: false
params: ' -SourceToolsList @("policheck","credscan")
-TsaInstanceURL $(_TsaInstanceURL)
-TsaProjectName $(_TsaProjectName)
-TsaNotificationEmail $(_TsaNotificationEmail)
-TsaCodebaseAdmin $(_TsaCodebaseAdmin)
-TsaBugAreaPath $(_TsaBugAreaPath)
-TsaIterationPath $(_TsaIterationPath)
-TsaRepositoryName "ReverseProxy"
-TsaCodebaseName "ReverseProxy"
-TsaPublish $True -PoliCheckAdditionalRunConfigParams @("UserExclusionPath < $(Build.SourcesDirectory)/eng/PoliCheckExclusions.xml")'
================================================
FILE: azure-pipelines-pr.yml
================================================
#
# See https://docs.microsoft.com/azure/devops/pipelines/yaml-schema for details
#
variables:
- name: _TeamName
value: AspNetCore
- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
value: true
- name: _PublishUsingPipelines
value: true
- name: _BuildConfig
value: Release
- template: /eng/common/templates/variables/pool-providers.yml
# Rely on task Arcade injects, not auto-injected build step.
- name: skipComponentGovernanceDetection
value: true
# Rely on explicit tasks, not auto-injected build steps. CodeQL3000 not enabled by default in any case.
- name: Codeql.SkipTaskAutoInjection
value: true
pr:
autoCancel: false
branches:
include:
- '*'
stages:
- stage: build
displayName: Build
jobs:
- template: /eng/common/templates/jobs/jobs.yml
parameters:
enableMicrobuild: true
enablePublishBuildArtifacts: true
enablePublishTestResults: true
enablePublishBuildAssets: true
enablePublishUsingPipelines: true
enableTelemetry: true
mergeTestResults: true
jobs:
- job: Windows
pool:
name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals windows.vs2019.amd64.open
variables:
- name: _OfficialBuildArgs
value: ''
- name: _SignType
value: test
steps:
- checkout: self
clean: true
- script: eng\common\cibuild.cmd -configuration $(_BuildConfig) -prepareMachine $(_OfficialBuildArgs)
displayName: Build and Publish
- task: PublishBuildArtifacts@1
displayName: Upload TestResults
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/TestResults/$(_BuildConfig)/
artifactName: $(Agent.Os)_$(Agent.JobName) TestResults
artifactType: Container
parallel: true
- task: PublishBuildArtifacts@1
displayName: Upload package artifacts
condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
inputs:
pathtoPublish: artifacts/packages/
artifactName: artifacts
artifactType: Container
parallel: true
- job: Ubuntu
pool:
vmImage: ubuntu-latest
variables:
- name: _SignType
value: none
steps:
- checkout: self
clean: true
- script: eng/common/cibuild.sh
--configuration $(_BuildConfig)
--prepareMachine
displayName: Build
- task: PublishBuildArtifacts@1
displayName: Upload TestResults
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/TestResults/$(_BuildConfig)/
artifactName: $(Agent.Os)_$(Agent.JobName) TestResults
artifactType: Container
parallel: true
- job: macOS_latest
displayName: 'macOS latest'
pool:
vmImage: macOS-latest
variables:
- name: _SignType
value: none
steps:
- checkout: self
clean: true
- script: eng/common/cibuild.sh
--configuration $(_BuildConfig)
--prepareMachine
displayName: Build
- task: PublishBuildArtifacts@1
displayName: Upload TestResults
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/TestResults/$(_BuildConfig)/
artifactName: $(Agent.Os)_$(Agent.JobName) TestResults
artifactType: Container
parallel: true
================================================
FILE: azure-pipelines.yml
================================================
variables:
# Needed for Arcade template
- name: _TeamName
value: AspNetCore
# Needed for Microbuild template
- name: TeamName
value: AspNetCore
- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
value: true
- name: _PublishUsingPipelines
value: true
- name: _BuildConfig
value: Release
# Rely on task Arcade injects, not auto-injected build step.
- template: /eng/common/templates/variables/pool-providers.yml@self
- name: skipComponentGovernanceDetection
value: true
trigger:
batch: true
branches:
include:
- main
- release/*
- internal/release/*
resources:
repositories:
- repository: MicroBuildTemplate
type: git
name: 1ESPipelineTemplates/MicroBuildTemplate
ref: refs/tags/release
extends:
template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate
parameters:
featureFlags:
autoBaseline: true
sdl:
sourceAnalysisPool:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
policheck:
enabled: true
tsa:
enabled: true
codeql:
tsaEnabled: true
binskim:
enabled: true
# See https://dev.azure.com/securitytools/SecurityIntegration/_wiki/wikis/Guardian/1378/Glob-Format
analyzeTargetGlob: '**\bin\Yarp.ReverseProxy\**.dll;**\bin\Yarp.Telemetry.Consumption\**.dll'
preReleaseVersion: '4.3.1'
stages:
- stage: build
displayName: Build
jobs:
- template: /eng/common/templates-official/jobs/jobs.yml@self
parameters:
enableMicrobuild: true
enablePublishBuildArtifacts: true
enablePublishTestResults: true
enablePublishBuildAssets: true
enablePublishUsingPipelines: ${{ variables._PublishUsingPipelines }}
enableTelemetry: true
mergeTestResults: true
jobs:
- job: Windows
pool:
name: $(DncEngInternalBuildPool)
image: 1es-windows-2022
os: windows
variables:
- group: Publish-Build-Assets
- name: _OfficialBuildArgs
value: /p:DotNetSignType=$(_SignType)
/p:TeamName=$(_TeamName)
/p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines)
/p:OfficialBuildId=$(BUILD.BUILDNUMBER)
- name: _SignType
value: real
steps:
- checkout: self
clean: true
- script: eng\common\cibuild.cmd -configuration $(_BuildConfig) -prepareMachine $(_OfficialBuildArgs)
displayName: Build and Publish
- task: 1ES.PublishBuildArtifacts@1
displayName: Upload TestResults
condition: always()
continueOnError: true
inputs:
PathtoPublish: artifacts/TestResults/$(_BuildConfig)/
ArtifactName: $(Agent.Os)_$(Agent.JobName) TestResults
PublishLocation: Container
- task: 1ES.PublishBuildArtifacts@1
displayName: Upload package artifacts
condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
inputs:
PathtoPublish: artifacts/packages/
ArtifactName: artifacts
PublishLocation: Container
- template: /eng/common/templates-official/post-build/post-build.yml@self
parameters:
publishingInfraVersion: 3
enableSymbolValidation: false
enableSourceLinkValidation: false
enableSigningValidation: false
enableNugetValidation: false
SDLValidationParameters:
enable: true
continueOnError: false
params: ' -SourceToolsList @("policheck","credscan")
-TsaInstanceURL $(_TsaInstanceURL)
-TsaProjectName $(_TsaProjectName)
-TsaNotificationEmail $(_TsaNotificationEmail)
-TsaCodebaseAdmin $(_TsaCodebaseAdmin)
-TsaBugAreaPath $(_TsaBugAreaPath)
-TsaIterationPath $(_TsaIterationPath)
-TsaRepositoryName "ReverseProxy"
-TsaCodebaseName "ReverseProxy"
-TsaPublish $True -PoliCheckAdditionalRunConfigParams @("UserExclusionPath < $(Build.SourcesDirectory)/eng/PoliCheckExclusions.xml")'
================================================
FILE: build.cmd
================================================
@echo off
powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0eng\common\Build.ps1""" -restore -build %*"
================================================
FILE: build.sh
================================================
#!/usr/bin/env bash
source="${BASH_SOURCE[0]}"
# resolve $SOURCE until the file is no longer a symlink
while [[ -h $source ]]; do
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
source="$(readlink "$source")"
# if $source was a relative symlink, we need to resolve it relative to the path where the
# symlink file was located
[[ $source != /* ]] && source="$scriptroot/$source"
done
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
"$scriptroot/eng/common/build.sh" --build --restore $@
================================================
FILE: docs/DailyBuilds.md
================================================
How to get daily builds of YARP
===============================
Daily builds include the latest source code changes. They are not supported for production use and are subject to frequent changes, but we strive to make sure daily builds function correctly.
If you want to download the latest daily build and use it in a project, then you need to:
- Obtain the latest [build of the .NET Core SDK](https://github.com/dotnet/sdk#installing-the-sdk).
- Add a NuGet.Config to your project directory with the following content:
```xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key=".NET Libraries Daily" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-libraries/nuget/v3/index.json" />
<!-- The .NET Libraries Transport Daily feed is only needed for the Yarp.Kubernetes.Controller package -->
<add key=".NET Libraries Transport Daily" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-libraries-transport/nuget/v3/index.json" />
<add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>
```
*NOTE: This NuGet.Config should be with your application unless you want nightly packages to potentially start being restored for other apps on the machine.*
Then follow the [Getting Started](https://learn.microsoft.com/aspnet/core/fundamentals/servers/yarp/getting-started) guide to set up a project and add the nuget package dependency. Note daily builds use a higher preview version than given in the docs.
Some features, such as new target frameworks, may require prerelease tooling builds for Visual Studio.
These are available in the [Visual Studio Preview](https://www.visualstudio.com/vs/preview/).
To debug daily builds using Visual Studio
------------------------------------------
- *Enable Source Link support* in Visual Studio should be enabled.
- *Enable source server support* in Visual should be enabled.
- *Enable Just My Code* should be disabled
- Under Symbols enable the *Microsoft Symbol Servers* setting.
================================================
FILE: docs/README.md
================================================
# Docs Folder
This folder contains:
* [Design Notes](designs/) - These are the design notes used to guide our development. They aren't designed to be usage guides but may help contributors in understanding why some patterns were used.
* [Operations](operations/) - These are operational docs for running releases and other infrastructure related to the project.
Public documentation is available at [learn.microsoft.com](https://learn.microsoft.com/aspnet/core/fundamentals/servers/yarp/getting-started).
================================================
FILE: docs/designs/README.md
================================================
# Design Meeting Notes
Rough meeting notes from design meetings.
================================================
FILE: docs/designs/config.md
================================================
# Config based proxy apps
> [!CAUTION]
> These are archived design discussions. Information may be outdated and inaccurate.
RE: https://github.com/dotnet/yarp/issues/9
Config based proxies are common and we'll need to support at least basic proxy scenarios from config. Here are some initial considerations:
- Config sources and systems
- Define routes based on host and/or path
- List multiple back-ends per route for load balancing
- A restart should not be needed to pick up config changes
- You should be able to augment a route's configuration in code. Kestrel does something similar using named endpoints.
## Config systems:
We have three relevant components that already have config systems: Kestrel, UrlRewrite, and ReverseProxy.
- [Kestrel](https://learn.microsoft.com/aspnet/core/fundamentals/servers/kestrel/endpoints)
- [UrlRewrite](https://github.com/dotnet/aspnetcore/blob/f4d81e3af2b969744a57d76d4d622036ac514a6a/src/Middleware/Rewrite/sample/UrlRewrite.xml#L1-L11)
- [ReverseProxy](https://github.com/dotnet/yarp/blob/b2cf5bdddf7962a720672a75f2e93913d16dfee7/samples/IslandGateway.Sample/appsettings.json#L10-L34)
Proposals:
- The Kestrel config and the Proxy/Gateway config should remain adjacent, not merged. Inbound and outbound are distinct concerns. As long as both are available in the same broader config system then that's close enough.
- UrlRewrite should also remain as is. It's not ideal that it's in a separate file and format from the rest of the config, but we'll wait and see if that is a long term blocker.
## Route config:
The proxy has a [config mechanism](https://github.com/dotnet/yarp/blob/b2cf5bdddf7962a720672a75f2e93913d16dfee7/samples/IslandGateway.Sample/appsettings.json#L26-L32) to define routes and map those to back end groups.
```json
"Routes": [
{
"RouteId": "backend1/route1",
"BackendId": "backend1",
"Rule": "Host('localhost') && Path('/{**catchall}')"
}
]
```
This maps to a [ProxyRoute](https://github.com/dotnet/yarp/blob/b2cf5bdddf7962a720672a75f2e93913d16dfee7/src/IslandGateway.Core/Abstractions/RouteDiscovery/Contract/GatewayRoute.cs) type.
This basic structure is useful though the "Rule" [system](https://github.com/dotnet/yarp/blob/b2cf5bdddf7962a720672a75f2e93913d16dfee7/src/IslandGateway.Core/Service/Config/RuleParsing/RuleParser.cs) seems overly complex. Need to circle back with DavidN on this. We may be able to simplify that down to independent keys for matching Host, Path, Header, etc.. It's not clear that the additional `&&` or `||` aspects are necessary here. If we used separate properties then it would be implicitly `&&` based. To achieve `||` you'd define additional routes. This is also an area where augmenting with code defined constraints could be useful to handle the more complex scenarios.
The ProxyRoute.Metadata dictionary may be able to be replaced or supplemented by giving direct access to the config node for that route. Compare to Kestrel's [EndpointConfig.ConfigSection](https://github.com/dotnet/aspnetcore/blob/f4d81e3af2b969744a57d76d4d622036ac514a6a/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs#L168-L175) property. That would allow for augmenting an endpoint with additional complex custom entries that the app code can reference for additional config actions.
Update: The custom rule system was modified by [#24](https://github.com/dotnet/yarp/pull/24) so that the config now looks like this:
```json
"Routes": [
{
"RouteId": "backend1/route1",
"BackendId": "backend1",
"Match": {
"Methods": [ "GET", "POST" ],
"Host": "localhost",
"Path": "/{**catchall}"
}
}
]
```
## Backend configuration
The proxy code defines the types [Backend](https://github.com/dotnet/yarp/blob/b2cf5bdddf7962a720672a75f2e93913d16dfee7/src/IslandGateway.Core/Abstractions/BackendDiscovery/Contract/Backend.cs) and [BackendEndpoint](https://github.com/dotnet/yarp/blob/b2cf5bdddf7962a720672a75f2e93913d16dfee7/src/IslandGateway.Core/Abstractions/BackendEndpointDiscovery/Contract/BackendEndpoint.cs) and allows these to be defined via config and referenced by name from routes.
A BackendEndpoint defines a specific service instance with an id, address, and associated metadata.
A Backend is a collection of one or more BackendEndpoints and a set of policies for choosing which endpoint to rout each request to (load balancing, circuit breakers, health checks, affinities, etc.). This seems a bit monolithic compared to our initial design explorations. We anticipate wanting to break these policies up into distinct steps in a pipeline to make them more replaceable. That said, we'll still need a config model for the default set of components and it may look very much like what's already here.
Question: Why are the backends and the endpoints listed separately in config rather than nested? Object model links endpoints 1:1 with backends, so there doesn't seem to be a reason to list them separately.
Existing:
```json
"Backends": [
{
"BackendId": "backend1"
},
{
"BackendId": "backend2"
}
],
"Endpoints": {
"backend1": [
{
"EndpointId": "backend1/endpoint1",
"Address": "https://localhost:10000/"
}
],
"backend2": [
{
"EndpointId": "backend2/endpoint1",
"Address": "https://localhost:10001/"
}
]
},
```
Nested:
```json
"Backends": [
{
"BackendId": "backend1",
"Endpoints": [
{
"EndpointId": "backend1/endpoint1",
"Address": "https://localhost:10000/"
}
],
},
{
"BackendId": "backend2"
"Endpoints": [
{
"EndpointId": "backend2/endpoint1",
"Address": "https://localhost:10001/"
}
],
}
],
```
Additional feedback: Why is it using arrays instead of objects? These items are not order sensitive, and they already have id properties anyways.
```json
"Backends": {
"backend1" : {
"Endpoints": [
"endpoint1": {
"Address": "https://localhost:10000/"
}
},
},
"backend2": {
"Endpoints": {
"endpoint1": {
"Address": "https://localhost:10001/"
}
},
}
},
```
Update: The backend and endpoint layout has been modified to the following:
```json
"Backends": {
"backend1": {
"Endpoints": {
"backend1/endpoint1": {
"Address": "https://localhost:10000/"
}
}
},
"backend2": {
"Endpoints": {
"backend2/endpoint1": {
"Address": "https://localhost:10001/"
}
}
}
},
```
## Config reloading
Config reloading is not yet a blocking requirement but we do expect to need it in the future. This design needs to factor in how reloading might work when it does get added.
**NOTE** The proxy code has a concept of Signals that is used to convey config change. We need to see how this integrates with change notifications from our config sources and flows through the system.
The Extensions config and options systems have support for change detection and reloading but very few components take advantage of it. Logging is the primary consumer today.
One concern is that some change notification sources like files can trigger multiple times for a single event. The config system does not have built in handling for this, it's up to consumers to 'debounce' and filter out redundant notifications.
Kestrel support for reloading config is tracked by https://github.com/dotnet/aspnetcore/issues/19376.
Reloading proxy config will need to happen atomically and avoid disrupting requests already in flight. We may need to rebuild portions of the app pipeline and swap them out for new requests, drain the old requests, and clean up the old pipelines. We also want to avoid a full reset for small config changes where possible. E.g. if only one route changes then ideally we'd only rebuild that route.
Reloading should be something you can opt into or out of. Right now this is only possible at the config level by opting in or out for a config source, but that affects the whole app.
Updates:
Config reload for proxy routes, backends, and endpoints already works. You edit appsettings.json and it automatically reloads and reconfigures the routes. Note the config change notification usually gets fired twice and logs "Applying proxy configs" each time, but the change diff logic prevents an unnecessary update the second time. We may still want to do some debounce detection to prevent extra config diffs, but that's lower priority.
@halter73 raised the question of how much effort we put in to make the kestrel reload atomic with the routing reload? Conceptually it makes sense to keep the two in sync, but programmatically it's quite difficult as there's no connection between the two systems. They'd be reacting to the same change notification event in serial and requests in flight may see one set of changes without the other. We discussed this in the weekly sync and decided that since kestrel endpoint changes will be a less common scenario we won't initually worry about the atomicity here until we have customer feedback that demonstrates issues.
Also, when a kestrel endpoint is modified or removed should existing connections on that endpoint be eagerly drained and closed, or should they be allowed to run a normal lifecycle? Kestrel does not currently track active connection per endpoint so additional tracking would be needed if we wanted to shut them down.
Updates:
The config reload code has been moved from the sample into the product assemblies.
## Augmenting config via code
Some things are easier to do in code and we want to be able to support that while still pulling more transient data from config. [Kestrel](https://github.com/dotnet/aspnetcore/blob/aff01ebd7f82d641a4cfbd4a34954300311d9c2b/src/Servers/Kestrel/samples/SampleApp/Startup.cs#L138-L147) has a model where endpoints are named in config and then can be reference by name in code for additional configuration.
```json
{
"Kestrel": {
"Endpoints": {
"NamedEndpoint": { "Url": "http://*:6000" },
"NamedHttpsEndpoint": {
"Url": "https://*:6443",
}
}
}
}
```
```csharp
options.Endpoint("NamedEndpoint", opt =>
{
})
.Endpoint("NamedHttpsEndpoint", opt =>
{
opt.HttpsOptions.SslProtocols = SslProtocols.Tls12;
});
```
The proxy code already has named routes, backends, backend endpoints, etc., so we should be able to build a similar code augmentation for those.
Reloadable config complicates this pattern. The code augmentation actions will need to be captured for the lifetime of the app rather than just for startup so they can be re-run later.
================================================
FILE: docs/designs/route-extensibility.md
================================================
## Problem Statement
> [!CAUTION]
> These are archived design discussions. Information may be outdated and inaccurate.
Today if you want to extend the route or clusters, you can only do it through the metadata property on each, which is a Dictionary<string, string>. If you want to be able to have structured data its not possible without you forcing it into a string and then parsing it when needed. There are scenarios like A/B testing, or authenticating with back end servers (not pass thru) where you want to be able to store a structure of data in config, and have it available at runtime on the route/cluster objects.
If we want there to be pre-built extensions to YARP (#1714), then there needs to be a way for each of the extensions to have its own config data on routes and clusters, and for them to not step on each others toes.
## Why is this important to you?
Taking a canonical example of A/B testing. In this scenario you want to be able to direct traffic to multiple clusters with the traffic patterns determined based on additional criteria. For example, You may want to be able to have a collection of clusters that are used for a route, together with percentages. So the config could look something like:
```json
{
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "ignore",
"Match": {
"Path": "{**catch-all}"
},
"Extensions": {
"A-B": [
{
"ClusterId": "c1",
"Load": 0.4
},
{
"ClusterId": "c2",
"Load": 0.6
},
{
"ClusterId": "experimental",
"Load": 0.01
},
{
"ClusterId": "TelemetrySample",
"Load": 0.01
}
]
}
},
```
The above example is adding an "A-B" extension to the route with its own data. There could be other extensions each of which have their own configuration data.
## What would this look like
### Requirements
* Multiple extensions can be added to YARP, each of which can have their own config state.
* Be able to have arbitrary data as part of config for routes and/or clusters
* YARP should not dictate a specific data structure for the extension config
* Be able to access that data as objects from middleware directly off the route and clusters
* Be able to remote that data in the case of a distributed configuration server
## Proposal
* Add an Extensions collection to Route and Cluster. This should follow the same pattern as http features, using an `IReadOnlyDictionary<Type, object>` and be accessed based on the type of the extension. This would then be accessible in proxy middleware from the route or cluster objects via an `Extensions` property:
```c#
public void Configure(IApplicationBuilder app, IProxyStateLookup lookup)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
// We can customize the proxy pipeline and add/remove/replace steps
endpoints.MapReverseProxy(proxyPipeline =>
{
// Use a custom proxy middleware, defined below
proxyPipeline.Use((context, next) =>
{
var proxyFeature = context.Features.Get<IReverseProxyFeature>();
var abstate = proxyFeature.Route.Extensions[typeof(ABState)];
var newClusterName = abstate.SelectSlice(new Random().NextDouble());
if (lookup?.TryGetCluster(newClusterName, out var cluster))
{
context.ReassignProxyRequest(cluster);
}
return next();
});
proxyPipeline.UseSessionAffinity();
proxyPipeline.UseLoadBalancing();
});
});
}
```
Using a dictionary based on object type enables easy access to the object at runtime, and a strongly typed result.
* There needs to be a way for YARP to construct these strongly typed extensions based on the `IConfiguration` provider. There needs to be a mapping between the key in config, and the type that will be used to store the data. That mapping is handled by enabling factories that can be registered:
```c#
services.AddReverseProxy()
.LoadFromConfig(Configuration.GetSection("ReverseProxy"))
.AddRouteExtension("A-B", (section, _, _) => new ABState(section));
```
> Along with a similar mechanism for clusters. The extension registration would be something like:
```c#
static IReverseProxyBuilder AddRouteExtension(this IReverseProxyBuilder builder, string sectionName, Func<IConfigurationSection, RouteConfig, ExtensionType, ExtensionType> factory)
```
> Where the factory is passed:
* The IConfigurationSection for the extension
* The route object that is being extended
* The existing extension instance in the case of configuration updates
>
> When the configuration is parsed, the factory is called based on the configuration key name, and the resultant object is added to the route/cluster objects.
>
> Regular YARP config will do a diff merge to handle config changes, and create new objects if applicable. The same mechanism needs to be used for extensions. If the configuration is updated, and an existing instance of the extension exists, then it will be passed to the factory. The factory can compare the current instance and re-use it, or copy its data across to a new instance based on the changes. Instances must stable, so existing instances shouldn't be modified if it would affect existing in-flight requests. YARP can't really enforce rules on how the objects are changed as we want the types to be user defined.
* When using a custom config provider, the Extensions collection can be populated by the custom provider directly, or the provider can expose an `IConfigurationSection` implementation and use the factory as described below.
* When YARP is integrated with 3rd party config systems, such as K8s or ServiceFabric, those systems typically have a way of expressing custom properties, some of which will be used by YARP for the definition of routes/ clusters etc. To facilitate the ability for route and cluster extensions to be expressed within those systems, the integration provider should expose an `IConfigurationSection` implementation that maps between the integrated persistence format and YARP.
`IConfigurationSection` is essentially a name/value lookup API, it should map pretty reasonably to the YAML or JSON formats used by the configuration systems, and not be an undue burden to implement on these integrations.
* Integration with 3rd party config systems can involve a remote process that YARP can pull its configuration from. I am [proposing another feature](https://github.com/dotnet/yarp/issues/1710), that we formalize this pattern and have the ability to create a central YARP config provider, to which multiple YARP proxies can bind. This enables scalability in terms of being able to push config to multiple instances of YARP at once.
* To support this scenario, we should serialize the IConfiguration data and pass that across to the proxy instances.
================================================
FILE: docs/designs/yarp-tunneling.md
================================================
# YARP Tunneling
> [!CAUTION]
> These are archived design discussions. Information may be outdated and inaccurate.
## Introduction
While many organizations are moving their computing to the cloud, there are occasions where you need to be able to run some services in a local datacenter. The problem then is if you need to be able to communicate with those services from the cloud. Creating a VPN network connection to Azure or other cloud provider is possible, but usually involves a lot of red tape and configuration complexity as the two networks need to be integrated.
If all that the cloud needs to access is resources that are exposed over http, then a simpler solution is to have a gateway that can route traffic to the remote resource. Additionally, outbound connections over http(s) are not usually blocked, so having a on-prem gateway make an outbound connection to the cloud, is the easiest way to establish the route. This is the basis behind the [Azure Relay](https://learn.microsoft.com/azure/azure-relay/relay-what-is-it) service offering.
That is the principle of the tunnel feature for YARP. You operate two instances of the YARP proxy service, configured as a tunnel. The advantage over Azure Relay is that using a reverse proxy as an on-prem gateway means that both cloud and back end services can be used without needing to update the application other than addresses. This is particularly useful for services that may have been written by a 3rd party, or are no longer under active development, and so making changes to the configuration is complicated and expensive. Relay requires the sender and receiver to be updated to use its connection protocol.

In the on-prem data center, you run an instance of YARP, we'll call this the back-end proxy. This is configured with routes to the resources that should be externally accessible - only routes that are configured via this proxy will be exposed. The back-end proxy is configured to create a tunnel connection to the front-end instance by specifying the connection URL and security details for the connection.
The instance in the cloud, we'll refer to as the front-end, will be configured with a tunnel endpoint URL to be used by the on-prem proxy. The on-prem proxy will create a websocket connection to the tunnel endpoint, this will map the tunnel to a specific cluster. Routes can be directed to use the tunnel connection to the back-end by using the cluster that is used for the tunnel.
## Tunnel Protocol
The tunnel will establish a Websockets connection between the back-end and the front-end. The back-end will establish the connection so that it can more easily break through firewalls. Once the WSS connection is created, it will be treated as a stream over which HTTP/2 traffic will be routed. HTTP/2 is used so that multiple simultaneous requests can be multiplexed over a single connection. The HTTP/2 protocol is only used between the two proxies, the connections either side can be any protocol that the proxy supports. This means we don't put any specific capability requirement on the destination servers.
If the tunnel connection is broken, the back-end will attempt to reconnect to the front-end:
- If the connection fails, then it will continue to reconnect every 30s until the connection is re-established.
- If the connection is refused with a 500 series error, then it will be retried at the next 30s timeout.
- If the connection is refused with a 400 series error then further connections for that tunnel will not be made.
> Issue: Do we need an API for the tunnel? As its created from code on the back-end, the app could have additional logic for control over the duration. Does it have API for status, clean shutdown, etc.
>
> Issue: Will additional connections be created for scalability - H2 perf becomes limited after 100 simultaneous requests. How does the front-end know to pair a second back-end connection?
The Front End should keep the WSS connection alive by sending pings every 30s if there is no other traffic. This should be done at the WSS layer.
## Moving pieces
| Location | Name | Description |
| --- | --- | --- |
| front-end | EndPoint | The endpoint that the back-end proxy will connect to to create a tunnel. |
| front-end | Cluster | The cluster that will direct to back-end proxy(ies) that have created tunnels. |
| front-end | Routes | Routes need to be configured to route specific URLs to the tunnel, by using clusters that are a tunnel. |
| back-end | Tunnel URL(s) | The URL(s) for the front-end endpoint that can be used to establish the tunnel. |
| back-end | Routes | The back-end needs to have routes defined that will direct traffic to local resources. |
## front-end
The front-end is the proxy that will be called by clients to be able to access resources via the back-end proxy. It will route traffic over a tunnel created using a WSS connection from the back-end proxy. YARP needs a mechanism to know which requests will be routed via the tunnel. This will be achieved by extending the existing cluster concept in YARP - The request to create a tunnel will specify the name of a cluster. Once the tunnel is established, it will be treated as a dynmamically created destination for the named cluster. Routes will not need to be changed, they will point at the cluster, and the tunnels will be used in the same way as destinations.
Tunnel services must be enabled by the proxy server:
``` C#
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
builder.Services.AddTunnelServices();
```
The front-end needs to have a tunnel endpoint that the back-end will connect to. The endpoint should be parameterized to include the name of the cluster as part of the URL, and a callback that is used to validate the connection is approved:
- Including the ClusterId in the URL enables the same endpoint mechanism to be used for multiple clusters.
- Using a callback for authentication enables whatever scheme the proxy author(s) wish to use.
- Trying to encode specific auth schemes will invariably miss a scenario that is needed.
- The samples that we produce should be based around client certs as it is a good way to manage secure shared secrets.
``` C#
app.MapReversProxy();
app.MapTunnel("/tunnel/{ClusterId}", async (connectionContext, cluster) => {
// Use the extensions feature https://github.com/dotnet/yarp/issues/1709 to add auth data for the tunnel
var tunnelAuth = cluster.Extensions[typeof(TunnelAuth)];
if (!context.Connection.ClientCertificate.Verify()) return false;
foreach (var c in tunnelAuth.Certs)
{
if (c.ThumbPrint == context.Connection.ClientCertificate.Thumbprint) return true;
}
return false;
});
```
The front-end should have configuration for routes that direct to a cluster that is for the tunnel. The cluster must be marked as IsTunnel to enable tunnel capability, and must *not* include other destinations. The cluster's destinations will be supplied dynamically by back-ends creating tunnel connections.
In the following case it uses the Extensions feature to enable storing thumbprints for client certs that are used to authenticate tunnel connections. The Route will direct all traffic under the path `/OnPrem/*` to the tunnel.
``` json
{
"ReverseProxy":
{
"Routes" : {
"OnPrem" : {
"Match" : {
"Path" : "/OnPrem/{**any}"
},
"ClusterId" : "MyTunnel1"
}
},
"Clusters" : {
"MyTunnel1" : {
"IsTunnel" : true,
"Extensions" : {
"TunnelAuth" : {
"Certs" : {
"name1" : "thumbprint1",
"name2" : "thumbprint2"
}
}
}
}
}
}
}
```
To ensure scalability, multiple back-end proxy instances should be able to create tunnel connections for the same cluster. When that happens, the load balancing rules for the cluster should apply, and balance between the active tunnels. Similarly multiple front-ends can be used to reduce the problems with a single point of failure.
## back-end
The back-end instance is the proxy that will reside on the same network as the resources that should be exposed. The back-end will need to be able to connect to those resources, and also be able to create a WebSocket connection to the front-end proxy server(s) via whatever firewalls are between them.
The back-end proxy is configured with routes and destinations that it wishes to expose to the front end. Security is maintained because only URLs matching its routes will be proxyable via it. This prevents attacks at the front-end having arbitrary access to other resources on the back-end network - they need to be explicitly included in the back-end route table.
The outbound connection to the front end needs to be explicitly made for each tunnel that the back-end wishes to create.
``` C#
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var url = builder.Configuration["Tunnel:Url"]!; // Eg https://Myfront-end.MyCorp.com/tunnel/MyTunnel1
// Setup additional details for the connection, auth and headers
var tunnelOptions = new TunnelOptions(){
TunnelClient = new SocketsHttpHandler(),
ClientCertificates = new X509CertificateCollection { cert }
AuthCallback = AuthServer;
};
tunnelOptions.Headers.Add("MyJWTToken", tokenString);
builder.WebHost.UseTunnelTransport(url, tunnelOptions);
```
The tunnel creation takes an options class that enables the HttpHandler, headers to be set for the tunnel creation to enable authentication flexibility by the app developers. It also should include a callback to enable validation of the server certificate.
The back-end configuration would use the standard routes and cluster definitions.
``` json
{
"ReverseProxy":
{
"Routes": {
"CNCMilling": {
"Match": {
"Path": "/OnPrem/CNCMilling/{**any}"
},
"ClusterId": "Milling"
}
"3DPrinting" : {
"Match": {
"Path": "/OnPrem/Extrusion/{**any}"
},
"ClusterId": "3dPrinting"
}
},
"Clusters": {
"Milling": {
"Destinations": {
"Bay12" : "https://bay12-efd432/",
"Bay15" : "https://bay15-j377d3/"
}
}
"3dPrinting": {
"Destinations": {
"Bay41-controller" : "https://bay41-controller/"
}
}
}
}
}
```
In the above case, requests using the paths `/OnPrem/CNCMilling/*` and `/OnPrem/Extrusion/*` will be routed by the back-end to their respective services - other paths would result in an error.
Note: Active health checks probably don't make sense to be performed by the front-end against the back-end. Passive health checks will verify the overall condition of the tunnel.
## Scalability
In a large deployment, there needs to be the ability to have multiple front-end and back-end proxies:
- If the front-end receives multiple tunnel connections, then it should treat them as if the cluster has multiple destinations. The cluster can use the load balancing policy to select how it decides to route traffic to the back-end proxies.
> Note: The front-end proxy will not be aware of the actual destinations that serve resources - each back-end should have its own cluster definition for the actual destinations, and so can include multiple servers for any route/cluster combination.
- A back-end proxy should be able to create tunnels to multiple front-ends. The tunnels can be to related front-end proxies that are sharing the same load, or to front-ends in different cloud deployments. This enables the Front Ends to be very specific to particular deployments - and have constrained v-Lan configurations in the cloud.
## Authentication
The authentication options for ASP.NET are diverse, and IT departments will likely have their own conditions on what is required to be able to secure a tunnel. So rather than trying to implement the combinatorial matrix of what customers could need, we should use a callback so that the proxy author can decide.
Samples should be created that show best practices using a secure mechanism such as client a certificate.
*Issue:* Does the back-end need additional mechanisms to validate the connection to the front-end, or is TLS/SNI sufficient?
## Security
The purpose of the tunnel is to simplify service exposure by creating a tunnel through the firewall that enables external requests to be made to destination servers on the back-end network. There are a number of mitigations that reduces the risk of this feature:
- No endpoints are exposed via the firewall - it does not expose any new endpoints that could act as attack vectors. The tunnel is an outbound connection made between the back-end and the front-end.
- Traffic directed via the tunnel will need to have corresponding routes in the Back End configuration. Traffic will only be routed if there is a respective route and cluster configuration. Tunnel traffic can't specify arbitrary URLs that would be directed to a hostname not included in the back-end route table configuration.
- Tunnel connections should only be over HTTPs
## Metrics
? What telemetry and events are needed for this?
## Error conditions
| Condition | Description |
| --- | --- |
| No tunnel has connected | If the front end receives a request for a route that is backed by a tunnel and no tunnels have been created, then it should respond to those requests with a 502 "Bad Gateway" error |
## Web Transport
Web Transport is an interesting future protocol choice for the tunnel.
================================================
FILE: docs/operations/BackportingToPreview.md
================================================
# Backporting changes to a preview branch
Backporting changes is very similar to a regular release. Changes are made on the preview branch, the builds are validated and ultimately released.
- Checkout the preview branch
`git checkout release/1.0.0-previewX`
- Make and commit any changes
- Push the changes **to your own fork** and submit a PR against the preview branch
- Once the PR is merged, wait for the internal [`microsoft-reverse-proxy-official`](https://dev.azure.com/dnceng/internal/_build?definitionId=809&_a=summary&view=branches) pipeline to produce a build
- Validate the build the same way you would for a regular release [docs](https://github.com/dotnet/yarp/blob/main/docs/operations/Release.md#validate-the-final-build)
- Package Artifacts from this build can be shared to validate the patch. Optionally, the artifacts from the [public pipeline](https://dev.azure.com/dnceng/public/_build?definitionId=807&view=branches) can be used
- Continue iterating on the preview branch until satisfied with the validation of the change
- [Release the build](https://github.com/dotnet/yarp/blob/main/docs/operations/Release.md#release-the-build) from the preview branch
- Create a new git tag for the released commit
**While still on the preview branch:**
- `git tag v1.0.0-previewX.build.d`
- `git push upstream --tags`
- Create a new [release](https://github.com/dotnet/yarp/releases).
## Internal fixes
Issues with significant security or disclosure concerns need to be fixed privately first. All of this work will happen on the internal Azdo repo and be merged to the public github repo at the time of disclosure.
- Make a separate clone of https://dev.azure.com/dnceng/internal/_git/dotnet-yarp to avoid accidentally pushing to the public repo.
- Create a branch named `internal/release/{version being patched}` starting from the tagged commit of the prior release.
- Update versioning as needed.
- Create a feature branch, fix the issue, and send a PR using Azdo.
- Release the build from the internal branch.
- Tag the commit and push it to the public repo. Do not push to regular `main` or `release/*` branches in the internal mirror.
- Cherry pick the changes to public main as needed.
- Finish the standard release checklist.
================================================
FILE: docs/operations/Branching.md
================================================
# Branching Tasks
When we are ready to branch our code, we first need to create the branch:
1. In a local clone, run `git checkout main` and `git pull origin main` to make sure you have the latest `main`
1. Run `git checkout -b release/1.1.0-previewX` where `X` is the YARP preview number. When releasing a non-preview version, use `release/1.1` instead of `release/1.1.0` so that the branch can be used for future patches.
1. If you are releasing a non-preview version:
- Set the `PreReleaseVersionLabel` in [`eng/Versions.props`] to `rtw`.
- Run `build.cmd -pack`
- Verify that the packages in `artifacts/packages/Debug/Shipping` do not have a suffix after the intended version. For example the name should be `Yarp.ReverseProxy.1.1.0.nupkg` and not `Yarp.ReverseProxy.1.1.0-dev.nupkg`.
1. Run `git push origin release/1.1.0-previewX` to push the branch to the server.
Update branding in `main`:
1. Edit the file [`eng/Versions.props`]
2. Set `PreReleaseVersionLabel` to `preview.X` (where `X` is the next preview number)
3. Send a PR and merge it ASAP (auto-merge is your friend).
Update the runtimes and SDKs in `global.json` in `main`:
Check that the global.json includes the latest 8.0 runtime versions from [the .NET 8.0 download page](https://dotnet.microsoft.com/download/dotnet/8.0), and 9.0 from [the .NET 9.0 download page](https://dotnet.microsoft.com/download/dotnet/9.0).
[`eng/Versions.props`]: ../../eng/Versions.props
================================================
FILE: docs/operations/DependencyFlow.md
================================================
# Dependency Flow
## Dependency Flow Overview
*For full documentation on Arcade, Maestro and `darc`, see [the Arcade documentation](https://github.com/dotnet/arcade/tree/main/Documentation)*
We use the .NET Engineering System ([Arcade](https://github.com/dotnet/arcade)) to build this repo. Part of the engineering system is a service called "Maestro" which manages dependency flow between repositories. When one repository finishes building, it can automatically publish it's build to a Maestro "Channel". Other repos can subscribe to that channel to receive updated builds. Maestro will automatically open a PR to update dependencies in repositories that are subscribed to changes in dependent repositories.
Maestro can be queried and controlled using the `darc` command line tool. To use `darc` you will need to be a member of the [`dotnet/arcade-contrib` GitHub Team](https://github.com/orgs/dotnet/teams/arcade-contrib). To set up `darc`:
1. Run `.\eng\common\darc-init.ps1` to install the global tool.
2. Once installed, run `darc authenticate` and follow the instructions.
Running `darc` with no args will show a list of commands. The `darc help [command]` command will give you help on a specific command.
Repositories can be configured to publish builds automatically to a certain channel, based on the branch.
To see the current mappings for a repository, you can run `darc get-default-channels --source-repo [repo]`, where `[repo]` is any substring that matches a full GitHub URL for a repo in the system. The easiest way to use `[repo]` is to just specify the `[owner]/[name]` form for a repo. For example:
```shell
> darc get-default-channels --source-repo dotnet/aspnetcore
(3796) https://github.com/dotnet/aspnetcore @ release/6.0 -> .NET 6
(5027) https://github.com/dotnet/aspnetcore @ release/8.0 -> .NET 8
(5731) https://github.com/dotnet/aspnetcore @ release/9.0 -> .NET 9
(5732) https://github.com/dotnet/aspnetcore @ main -> .NET 10
(6050) https://github.com/dotnet/aspnetcore @ release/10.0-preview1 -> .NET 10 Preview 1
```
Subscriptions are managed using the `get-subscriptions`, `add-subscription` and `update-subscription` commands. You can view all subscriptions in the system by running `darc get-subscription`. You can also filter subscriptions by the source and target using the `--source-repo [repo]` and `--target-repo [repo]` arguments. For example, to see everything that `dotnet/yarp` is subscribed to:
```shell
> darc get-subscriptions --target-repo dotnet/yarp
https://github.com/dotnet/arcade (.NET Eng - Latest) ==> 'https://github.com/dotnet/yarp' ('main')
- Id: 1751e896-c0f1-4247-3909-08d8c8762e9e
- Update Frequency: EveryWeek
- Enabled: True
- Batchable: False
- PR Failure Notification tags:
- Source-enabled: False
- Merge Policies:
Standard
https://github.com/dotnet/arcade (.NET Eng - Latest) ==> 'https://github.com/dotnet/yarp' ('release/2.2')
- Id: ebd75d9f-8988-4f50-bd1d-83dfc79fb7ba
- Update Frequency: EveryWeek
- Enabled: True
- Batchable: False
- PR Failure Notification tags:
- Source-enabled: False
- Merge Policies:
Standard
```
To add a new subscription, run `darc add-subscription` with no arguments. An editor window will open with a TODO script like this:
```yaml
Channel: <required>
Source Repository URL: <required>
Target Repository URL: <required>
Target Branch: <required>
Update Frequency: <'none', 'everyDay', 'everyBuild', 'twiceDaily', 'everyWeek'>
Batchable: False
Merge Policies: []
```
A number of comments will also be present, describing available values and what they do. Fill these fields in, for example:
```yaml
Channel: .NET Eng - Latest
Source Repository URL: https://github.com/dotnet/arcade
Target Repository URL: https://github.com/dotnet/yarp
Target Branch: release/42
Update Frequency: EveryWeek
Batchable: False
Merge Policies:
- Name: Standard
```
Save and exit the editor and the subscription will be created.
Similarly, you can edit an existing subscription by using `darc update-subscription --id [ID]` (get the `[ID]` value from `get-subscriptions`). This will open the same TODO script, but with the current values filled in. Just update them, then save and exit to update.
## Prerequisites
* Properly configured `darc` global tool, including having run `darc authenticate`.
## When we are ready to branch
Follow the initial branching steps from [Branching.md](Branching.md).
YARP uses darc to consume up-to-date Arcade bits every week.
Set up dependency flow for the new branch:
1. Run `darc add-subscription`
2. Fill in the template that opens in your editor as follows:
* `Channel` = `.NET Eng - Latest`
* `Source Repository URL` = `https://github.com/dotnet/arcade`
* `Target Repository URL` = `https://github.com/dotnet/yarp`
* `Target Branch` = `release/X` (where `X` is the YARP release version)
* `Update Frequency` = `EveryWeek`
* `Merge Policies` is a multiline value, it should look like this:
```yaml
Merge Policies:
- Name: Standard
Properties: {}
```
3. Save and close the editor window.
================================================
FILE: docs/operations/README.md
================================================
# Operations Playbook
*This documentation is primarily for project maintainers, though contributors are welcome to read and learn about our process!*
This section has docs on various operations and tasks to be performed in the repo.
* [Branching](Branching.md)
* [Releasing](Release.md)
* [Backporting changes onto a preview branch](BackportingToPreview.md)
* [Dependency flow](DependencyFlow.md)
================================================
FILE: docs/operations/Release.md
================================================
# Releasing YARP
This document provides a guide on how to release a preview of YARP.
To keep track of the process, open a [release checklist issue](https://github.com/dotnet/yarp/issues/new?title=Preview%20X%20release%20checklist&body=See%20%5BRelease.md%5D%28https%3A%2F%2Fgithub.com%2Fdotnet%2Fyarp%2Fblob%2Fmain%2Fdocs%2Foperations%2FRelease.md%29%20for%20detailed%20instructions.%0A%0A-%20%5B%20%5D%20Ensure%20there%27s%20a%20release%20branch%20created%20%28see%20%5BBranching%5D%28https%3A%2F%2Fgithub.com%2Fdotnet%2Fyarp%2Fblob%2Fmain%2Fdocs%2Foperations%2FBranching.md%29%29%0A-%20%5B%20%5D%20Ensure%20the%20%60Version.props%60%20has%20the%20%60PreReleaseVersionLabel%60%20updated%20to%20the%20next%20preview%0A-%20%5B%20%5D%20Identify%20and%20validate%20the%20build%20on%20the%20%60dotnet-yarp-official%60%20pipeline%0A-%20%5B%20%5D%20Release%20the%20build%0A-%20%5B%20%5D%20Tag%20the%20commit%0A-%20%5B%20%5D%20Draft%20release%20notes%0A-%20%5B%20%5D%20Publish%20release%20notes%0A-%20%5B%20%5D%20Close%20the%20%5Bold%20milestone%5D%28https%3A%2F%2Fgithub.com%2Fdotnet%2Fyarp%2Fmilestones%29%0A-%20%5B%20%5D%20Announce%20on%20social%20media%0A-%20%5B%20%5D%20Set%20the%20preview%20branch%20to%20protected%0A-%20%5B%20%5D%20Delete%20the%20%5Bprevious%20preview%20branch%5D%28https%3A%2F%2Fgithub.com%2Fdotnet%2Fyarp%2Fbranches%29%0A-%20%5B%20%5D%20Request%20source%20code%20archival).
## Versioning
Ensure the eng/Versions.props file has the expected versions and pre-release labels. For a final release set PreReleaseVersionLabel to `rtw`.
## Ensure there's a release branch created.
See [Branching](Branching.md):
- Make the next preview branch.
- Update the branding in main.
- Update the global.json runtime and SDK versions in main.
## Identify the Final Build
First, identify the final build of the [`dotnet-yarp-official` Azure Pipeline](https://dev.azure.com/dnceng/internal/_build?definitionId=809&_a=summary) (on dnceng/internal). The final build will be the latest successful build **in the relevant `release/x` branch**. Use the "Branches" tab on Azure DevOps to help identify it. If the branch hasn't been mirrored yet (see [`dotnet-mirror-dnceng` pipeline](https://dev.azure.com/dnceng/internal/_build?definitionId=1387)) and there are no outstanding changesets in the branch, the build of the corresponding commit from the main branch can be used.
Once you've identified that build, click in to the build details.
## Validate the Final Build
At this point, you can perform any validation that makes sense. At a minimum, we should validate that the sample can run with the candidate packages. You can download the final build using the "Artifacts" which can be accessed under "Related" in the header:

The packages can be accessed from the `PackageArtifacts` artifact:

### Consume .nupkg
- Visual Studio: Place it in a local folder and add that folder as a nuget feed in Visual Studio.
- Command Line: `dotnet nuget add source <directory> -n local`
Walk through the [Getting Started](https://learn.microsoft.com/aspnet/core/fundamentals/servers/yarp/getting-started) instructions and update them in the release branch as needed.
Also validate any major new scenarios this release and their associated docs.
## Release the build
Once validation has been completed, it's time to release.
Go to the [`dotnet-yarp-release` pipeline](https://dev.azure.com/dnceng/internal/_build?definitionId=1448) and select "Run Pipeline".
Under "Resources", select the pipeline run that you've validated artifacts for.



Triple-check the version numbers of the packages in the artifacts against whatever validation was done at this point.

Select "Run". Unless you're a release approver, you're done here!
## Approve the release
The Azure Pipeline will send an email to all the release approvers asking one of them to approve the release.

Click "Review Manual Validation", or navigate to the release pipeline directly in Azure DevOps. You'll see that the stage is "Pending Approval"
Enter a comment such as "release for preview X" approve finalize the release.
**After approving, packages will be published automatically**. It *is* possible to cancel the pipeline, but it might be too late. See "Troubleshooting" below.
The packages will be pushed and when the "NuGet.org" stage turns green, the packages are published!
**Note:** NuGet publishing is quick, but there is a background indexing process that can mean it will take up to several hours for packages to become available
## Tag the commit
Create and push a git tag for the commit associated with the final build (not necessarily the HEAD of the current release branch). See prior tags for the preferred format. Use a lightweight tag, not annotated.
`git tag v1.0.0-previewX`
Push the tag change to the upstream repo (**not your fork**)
`git push upstream v1.0.0-previewX`
## Draft release notes
Create a draft release at https://github.com/dotnet/yarp/releases using the new tag. See prior releases for the recommended content and format.
## Publish the release notes
Publish the draft release notes. These should be referencing the latest docs, packages, etc..
## Close the old milestone
It should be empty now. If it's not, move the outstanding issues to the next one.
## Announce on social media
David Fowler has a lot of twitter followers interested in YARP. Tweet a link to the release notes and let him retweet it.
## Set the preview branch to protected
This is to avoid accidental pushes to/deletions of the preview branch.
## Delete the previous preview branch
There should only be one [preview branch on the repo](https://github.com/dotnet/yarp/branches) after this point.
## Request source code archival
1. Go to the internal https://dpsopsrequestforms.azurewebsites.net portal
2. Select "Source Code Archival"
3. Proceed through steps 1,2 till the step 3 (all prerequisites are already fulfilled)
4. Fill in the required fields on the steps 3, 4, 5. Please, see the recommended values below.
5. At the last step, check all the info and and submit the request
6. Go to "My Request" tab and wait for a new ticket to appear on the list
7. Copy the ticket link from "Ticket ID" column which will look like `https://prod.******`
8. Replace the `prod` word to `portal`
9. Navigate to the fixed link and check that the ticket is actually created
10. That's all the actions needed to be done immediately. Afterwards, periodically track the ticket progress. It might take many hours.
11. [Offline] Wait for the archival completion report to arrive. Check that the size and number of archived files match the YARP repo.
### Recommended fields' values for archival request form
| Field | Value |
| --- | --- |
| Team Alias | dotnetrp |
| Business Group Name | Devdiv |
| Product Name | YARP |
| Version | \<release version\> |
| Production Type | dotNET |
| Release Type | \<RC or Release\> |
| Operating System(s) | Cross Platform |
| Product Language(s) | English |
| Release Date | \<release date\> |
| File Count | \<rough number of files in repo\> |
| Back Up Type | Code Repo(Git URL/AzureDevOps) |
| Repo URL | \<link to the internal AzDo YARP repo\> |
| OwnerAlias | dotnetrp |
| File Collection | Build Scripts, Help Utility Source Code, Source Code |
| Data Size | \<rough total files size in MB\> |
## Troubleshooting
### Authentication Errors
The pipeline is authenticated via a "Service Connection" in Azure DevOps. If there are authentication errors, it's likely the API key is invalid. Follow these steps to update the API key:
1. Go to NuGet.org, log in with an account associated with an `@microsoft.com` address that has access to the `dotnetframework` organization.
2. Generate a new API key with "dotnetframework" as the Package Owner and "*" as the Package "glob".
3. Copy that API key and fill it in to the "nuget.org (dotnetframework organization)" [Service Connection](https://dev.azure.com/dnceng/internal/_settings/adminservices) in Azure DevOps.
In the event you don't have access, contact `dnceng@microsoft.com` for guidance.
### Accidental Overpublish
In the event you overpublish (publish a package that wasn't intended to be released), you should "unlist" the package on NuGet. It is not possible to delete packages on NuGet.org, by design, but you can remove them from search results. Users who reference the version you published directly will still be able to download it, but it won't show up in search queries or non-version-specific actions (like installing the latest).
1. Go to NuGet.org, log in with an account associated with an `@microsoft.com` address that has access to the `dotnetframework` organization.
2. Go to the package page and click "Manage package" on the "Info" sidebar on the right.
3. Expand "Listing"
4. Select the version that was accidentally published
5. Uncheck the "List in search results" box
6. Click "Save"
### Package was rejected
NuGet.org has special criteria for all packages starting `Microsoft.`. If the package is rejected for not meeting one of those criteria, go to the [NuGet @ Microsoft](http://aka.ms/nuget) page for more information on required criteria and guidance for how to configure the package appropriately.
================================================
FILE: docs/roadmap.md
================================================
# YARP Roadmap
## Supported YARP versions
[Latest releases](https://github.com/dotnet/yarp/releases)
| Version | Release Date | Latest Patch Version | End of Support |
| -- | -- | -- | -- |
| [YARP 2.3](https://github.com/dotnet/yarp/releases/tag/v2.3.0) | February 27, 2025 | [2.3.0](https://github.com/dotnet/yarp/releases/tag/v2.3.0) | |
### End-of-life YARP versions
| Version | Released date | Final Patch Version | End of support |
| -- | -- | -- | -- |
| [YARP 2.2](https://github.com/dotnet/yarp/releases/tag/v2.2.0) | September 3, 2024 | [2.2.0](https://github.com/dotnet/yarp/releases/tag/v2.2.0) | August 27, 2025 |
| [YARP 2.1](https://github.com/dotnet/yarp/releases/tag/v2.1.0) | November 17, 2023 | [2.1.0](https://github.com/dotnet/yarp/releases/tag/v2.1.0) | March 3, 2025 |
| [YARP 2.0](https://github.com/dotnet/yarp/releases/tag/v2.0.0) | February 14, 2023 | [2.0.1](https://github.com/dotnet/yarp/releases/tag/v2.0.1) | May 17, 2024 |
| [YARP 1.1](https://github.com/dotnet/yarp/releases/tag/v1.1.0) | May 2, 2022 | [1.1.2](https://github.com/dotnet/yarp/releases/tag/v1.1.2) | August 14, 2023 |
| [YARP 1.0](https://github.com/dotnet/yarp/releases/tag/v1.0.0) | November 9, 2021 | [1.0.1](https://github.com/dotnet/yarp/releases/tag/v1.0.1) | November 2, 2022 |
## Support
YARP support is provided by the product team - the engineers working on YARP - which is a combination of members from ASP.NET and the .NET library teams. We do not provide 24/7 support or 'carry pagers', but we generally have good coverage. Bugs should be reported in GitHub using the issue templates, and will typically be responded to within 24hrs. If you find a security issue we ask you to [report it via the Microsoft Security Response Center (MSRC)](https://github.com/dotnet/yarp/blob/main/SECURITY.md).
The support period for YARP releases is as follows:
| Release | Issue Type | Support period |
| --- | --- | --- |
| Major or minor version | Security Bugs, Major behavior defects | Until next GA + 6 Months |
| Patch version | Minor behavior defects | Until next GA |
| Preview | Security Bugs, Major behavior defects | Until next preview |
| | All other | None - may be addressed by next preview |
For example, if 2 months after 1.3 (making up a number) is released, a security issue is found, then we will patch:
- 1.3 - its the latest release
- 1.2 - as it has 4 months of support remaining
- 1.1 - provided that 1.2 was released less than 6 months before
This support schedule is designed to provide a reasonable time period for customers to be able to update to new releases.
### Building your own copy of a release
YARP is an open source project, so any customers that need fixes faster, or for older releases, are able to build their own copy of YARP. The build environment for YARP is included in the repo and maintained in sync with the source. Each release (GA and Preview) of YARP is tagged, which means that if you need to patch a specific release you can sync to the tag and build. For example you can rebuild v1.0.0 with:
```shell
git clone -b v1.0.0 https://github.com/dotnet/yarp.git yarp1_0_0
cd yarp1_0_0
restore.cmd
<make your changes>
build.cmd -c release
```
This will produce the `Yarp.ReverseProxy.dll` into `artifacts/bin/Yarp.ReverseProxy/Release/net6.0`, and peer folder(s) for .NET 5 & Core 3.1. If you need to build a nuget package, that can be done with:
```shell
pack.cmd -c release
```
The nuget package will be output to `artifacts/packages/release/Shipping`.
================================================
FILE: dotnet-yarp-release.yml
================================================
trigger: none
name: $(Date:yyyyMMdd).$(Rev:r)
variables:
- name: NuGetApiKey
value:
- name: NuGetFeed
value: https://api.nuget.org/v3/index.json
resources:
repositories:
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release
pipelines:
- pipeline: yarp-build
source: dotnet\yarp\dotnet-yarp-official
extends:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
pool:
name: NetCore1ESPool-Internal
image: 1es-windows-2022
os: windows
stages:
- stage: release
displayName: Release to NuGet
jobs:
- job: PreDeploymentApprovalJob
displayName: Pre-Deployment Approval
condition: succeeded()
timeoutInMinutes: 2880
pool: server
steps:
- task: ManualValidation@1
inputs:
notifyUsers: |-
karelz@microsoft.com,
samsp@microsoft.com,
adityam@microsoft.com,
mizupan@microsoft.com,
bpetit@microsoft.com
approvers: |-
karelz@microsoft.com,
samsp@microsoft.com,
adityam@microsoft.com
- job: NuGetPush
dependsOn: PreDeploymentApprovalJob
condition: succeeded()
timeoutInMinutes: 30
templateContext:
type: releaseJob
isProduction: true
inputs:
- input: pipelineArtifact
pipeline: yarp-build
artifactName: artifacts
steps:
- task: NuGetToolInstaller@1
displayName: Prepare NuGet tool
- task: PowerShell@2
displayName: NuGet push
inputs:
targetType: inline
script: |
tree $(Pipeline.Workspace)\Release\Shipping /f
Get-ChildItem "$(Pipeline.Workspace)\Release\Shipping\*" -Filter *.nupkg -Exclude *.symbols.nupkg | ForEach-Object {
$name = $_.Name
Write-Host "Processing $name ..."
if ($name.StartsWith("Yarp.ReverseProxy.") -or $name.StartsWith("Yarp.Telemetry.Consumption.")) {
Write-Host " Publishing $name"
nuget push -Source $env:NuGetFeed -ApiKey $env:NuGetApiKey $_.FullName
} else {
Write-Host " Skipping $name (update the script to change this)"
}
}
env:
NuGetApiKey: $(NuGetApiKey)
================================================
FILE: eng/Build.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="$(RepoRoot)src\**\*.csproj" />
<ProjectToBuild Include="$(RepoRoot)test\**\*.csproj" />
<ProjectToBuild Include="$(RepoRoot)samples\**\*.csproj" />
<ProjectToBuild Include="$(RepoRoot)testassets\**\*.csproj" />
<ProjectToBuild Include="$(RepoRoot)eng\yarpapppack\**\*.csproj" />
</ItemGroup>
</Project>
================================================
FILE: eng/CodeAnalysis.src.globalconfig
================================================
is_global = true
# AD0001: Analyzer threw an exception
dotnet_diagnostic.AD0001.severity = warning
# BCL0001: Ensure minimum API surface is respected
dotnet_diagnostic.BCL0001.severity = warning
# BCL0010: AppContext default value expected to be true
dotnet_diagnostic.BCL0010.severity = warning
# BCL0011: AppContext default value defined in if statement with incorrect pattern
dotnet_diagnostic.BCL0011.severity = warning
# BCL0012: AppContext default value defined in if statement at root of switch case
dotnet_diagnostic.BCL0012.severity = warning
# BCL0015: Invalid P/Invoke call
dotnet_diagnostic.BCL0015.severity = none
# BCL0020: Invalid SR.Format call
dotnet_diagnostic.BCL0020.severity = warning
# SYSLIB1045: Convert to 'GeneratedRegexAttribute'.
dotnet_diagnostic.SYSLIB1045.severity = warning
# SYSLIB1054: Use 'LibraryImportAttribute' instead of 'DllImportAttribute' to generate P/Invoke marshalling code at compile time
dotnet_diagnostic.SYSLIB1054.severity = warning
# SYSLIB1055: Invalid 'CustomMarshallerAttribute' usage
dotnet_diagnostic.SYSLIB1055.severity = error
# SYSLIB1056:Specified marshaller type is invalid
dotnet_diagnostic.SYSLIB1056.severity = error
# SYSLIB1057: Marshaller type does not have the required shape
dotnet_diagnostic.SYSLIB1057.severity = error
# SYSLIB1058: Invalid 'NativeMarshallingAttribute' usage
dotnet_diagnostic.SYSLIB1058.severity = error
# SYSLIB1060: Specified marshaller type is invalid
dotnet_diagnostic.SYSLIB1060.severity = error
# SYSLIB1061: Marshaller type has incompatible method signatures
dotnet_diagnostic.SYSLIB1061.severity = error
# CA1000: Do not declare static members on generic types
dotnet_diagnostic.CA1000.severity = none
# CA1001: Types that own disposable fields should be disposable
dotnet_diagnostic.CA1001.severity = none
# CA1002: Do not expose generic lists
dotnet_diagnostic.CA1002.severity = none
# CA1003: Use generic event handler instances
dotnet_diagnostic.CA1003.severity = none
# CA1005: Avoid excessive parameters on generic types
dotnet_diagnostic.CA1005.severity = none
# CA1008: Enums should have zero value
dotnet_diagnostic.CA1008.severity = none
# CA1010: Generic interface should also be implemented
dotnet_diagnostic.CA1010.severity = none
# CA1012: Abstract types should not have public constructors
dotnet_diagnostic.CA1012.severity = none
# CA1014: Mark assemblies with CLSCompliant
dotnet_diagnostic.CA1014.severity = none
# CA1016: Mark assemblies with assembly version
dotnet_diagnostic.CA1016.severity = none
# CA1017: Mark assemblies with ComVisible
dotnet_diagnostic.CA1017.severity = none
# CA1018: Mark attributes with AttributeUsageAttribute
dotnet_diagnostic.CA1018.severity = warning
# CA1019: Define accessors for attribute arguments
dotnet_diagnostic.CA1019.severity = none
# CA1021: Avoid out parameters
dotnet_diagnostic.CA1021.severity = none
# CA1024: Use properties where appropriate
dotnet_diagnostic.CA1024.severity = none
# CA1027: Mark enums with FlagsAttribute
dotnet_diagnostic.CA1027.severity = none
# CA1028: Enum Storage should be Int32
dotnet_diagnostic.CA1028.severity = none
# CA1030: Use events where appropriate
dotnet_diagnostic.CA1030.severity = none
# CA1031: Do not catch general exception types
dotnet_diagnostic.CA1031.severity = none
# CA1032: Implement standard exception constructors
dotnet_diagnostic.CA1032.severity = none
# CA1033: Interface methods should be callable by child types
dotnet_diagnostic.CA1033.severity = none
# CA1034: Nested types should not be visible
dotnet_diagnostic.CA1034.severity = none
# CA1036: Override methods on comparable types
dotnet_diagnostic.CA1036.severity = none
# CA1040: Avoid empty interfaces
dotnet_diagnostic.CA1040.severity = none
# CA1041: Provide ObsoleteAttribute message
dotnet_diagnostic.CA1041.severity = none
# CA1043: Use Integral Or String Argument For Indexers
dotnet_diagnostic.CA1043.severity = none
# CA1044: Properties should not be write only
dotnet_diagnostic.CA1044.severity = none
# CA1045: Do not pass types by reference
dotnet_diagnostic.CA1045.severity = none
# CA1046: Do not overload equality operator on reference types
dotnet_diagnostic.CA1046.severity = none
# CA1047: Do not declare protected member in sealed type
dotnet_diagnostic.CA1047.severity = warning
# CA1050: Declare types in namespaces
dotnet_diagnostic.CA1050.severity = warning
# CA1051: Do not declare visible instance fields
dotnet_diagnostic.CA1051.severity = none
# CA1052: Static holder types should be Static or NotInheritable
dotnet_diagnostic.CA1052.severity = warning
dotnet_code_quality.CA1052.api_surface = private, internal
# CA1054: URI-like parameters should not be strings
dotnet_diagnostic.CA1054.severity = none
# CA1055: URI-like return values should not be strings
dotnet_diagnostic.CA1055.severity = none
# CA1056: URI-like properties should not be strings
dotnet_diagnostic.CA1056.severity = none
# CA1058: Types should not extend certain base types
dotnet_diagnostic.CA1058.severity = none
# CA1060: Move pinvokes to native methods class
dotnet_diagnostic.CA1060.severity = none
# CA1061: Do not hide base class methods
dotnet_diagnostic.CA1061.severity = none
# CA1062: Validate arguments of public methods
dotnet_diagnostic.CA1062.severity = none
# CA1063: Implement IDisposable Correctly
dotnet_diagnostic.CA1063.severity = none
# CA1064: Exceptions should be public
dotnet_diagnostic.CA1064.severity = none
# CA1065: Do not raise exceptions in unexpected locations
dotnet_diagnostic.CA1065.severity = none
# CA1066: Implement IEquatable when overriding Object.Equals
dotnet_diagnostic.CA1066.severity = warning
# CA1067: Override Object.Equals(object) when implementing IEquatable<T>
dotnet_diagnostic.CA1067.severity = warning
# CA1068: CancellationToken parameters must come last
dotnet_diagnostic.CA1068.severity = none
# CA1069: Enums values should not be duplicated
dotnet_diagnostic.CA1069.severity = none
# CA1070: Do not declare event fields as virtual
dotnet_diagnostic.CA1070.severity = suggestion
# CA1200: Avoid using cref tags with a prefix
dotnet_diagnostic.CA1200.severity = suggestion
# CA1303: Do not pass literals as localized parameters
dotnet_diagnostic.CA1303.severity = none
# CA1304: Specify CultureInfo
dotnet_diagnostic.CA1304.severity = none
# CA1305: Specify IFormatProvider
dotnet_diagnostic.CA1305.severity = none
# CA1307: Specify StringComparison for clarity
dotnet_diagnostic.CA1307.severity = none
# CA1308: Normalize strings to uppercase
dotnet_diagnostic.CA1308.severity = none
# CA1309: Use ordinal string comparison
dotnet_diagnostic.CA1309.severity = none
# CA1310: Specify StringComparison for correctness
dotnet_diagnostic.CA1310.severity = suggestion
# CA1311: Specify a culture or use an invariant version
dotnet_diagnostic.CA1311.severity = warning
# CA1401: P/Invokes should not be visible
dotnet_diagnostic.CA1401.severity = warning
# CA1416: Validate platform compatibility
dotnet_diagnostic.CA1416.severity = warning
# CA1417: Do not use 'OutAttribute' on string parameters for P/Invokes
dotnet_diagnostic.CA1417.severity = warning
# CA1418: Use valid platform string
dotnet_diagnostic.CA1418.severity = warning
# CA1419: Provide a parameterless constructor that is as visible as the containing type for concrete types derived from 'System.Runtime.InteropServices.SafeHandle'
dotnet_diagnostic.CA1419.severity = warning
# CA1420: Property, type, or attribute requires runtime marshalling
dotnet_diagnostic.CA1420.severity = warning
# CA1421: This method uses runtime marshalling even when the 'DisableRuntimeMarshallingAttribute' is applied
dotnet_diagnostic.CA1421.severity = suggestion
# CA1422: Validate platform compatibility
dotnet_diagnostic.CA1422.severity = warning
# CA1501: Avoid excessive inheritance
dotnet_diagnostic.CA1501.severity = none
# CA1502: Avoid excessive complexity
dotnet_diagnostic.CA1502.severity = none
# CA1505: Avoid unmaintainable code
dotnet_diagnostic.CA1505.severity = none
# CA1506: Avoid excessive class coupling
dotnet_diagnostic.CA1506.severity = none
# CA1507: Use nameof to express symbol names
dotnet_diagnostic.CA1507.severity = warning
# CA1508: Avoid dead conditional code
dotnet_diagnostic.CA1508.severity = none
# CA1509: Invalid entry in code metrics rule specification file
dotnet_diagnostic.CA1509.severity = none
# CA1510: Use ArgumentNullException throw helper
# dotnet_diagnostic.CA1510.severity = warning
# CA1511: Use ArgumentException throw helper
dotnet_diagnostic.CA1511.severity = warning
# CA1512: Use ArgumentOutOfRangeException throw helper
dotnet_diagnostic.CA1512.severity = warning
# CA1513: Use ObjectDisposedException throw helper
dotnet_diagnostic.CA1513.severity = warning
# CA1514: Avoid redundant length argument
dotnet_diagnostic.CA1514.severity = warning
# CA1515: Consider making public types internal
dotnet_diagnostic.CA1515.severity = none
# CA1700: Do not name enum values 'Reserved'
dotnet_diagnostic.CA1700.severity = none
# CA1707: Identifiers should not contain underscores
dotnet_diagnostic.CA1707.severity = none
# CA1708: Identifiers should differ by more than case
dotnet_diagnostic.CA1708.severity = none
# CA1710: Identifiers should have correct suffix
dotnet_diagnostic.CA1710.severity = none
# CA1711: Identifiers should not have incorrect suffix
dotnet_diagnostic.CA1711.severity = none
# CA1712: Do not prefix enum values with type name
dotnet_diagnostic.CA1712.severity = none
# CA1713: Events should not have 'Before' or 'After' prefix
dotnet_diagnostic.CA1713.severity = none
# CA1715: Identifiers should have correct prefix
dotnet_diagnostic.CA1715.severity = none
# CA1716: Identifiers should not match keywords
dotnet_diagnostic.CA1716.severity = none
# CA1720: Identifier contains type name
dotnet_diagnostic.CA1720.severity = none
# CA1721: Property names should not match get methods
dotnet_diagnostic.CA1721.severity = none
# CA1724: Type names should not match namespaces
dotnet_diagnostic.CA1724.severity = none
# CA1725: Parameter names should match base declaration
dotnet_diagnostic.CA1725.severity = suggestion
# CA1727: Use PascalCase for named placeholders
# dotnet_diagnostic.CA1727.severity = warning
# CA1802: Use literals where appropriate
dotnet_diagnostic.CA1802.severity = warning
dotnet_code_quality.CA1802.api_surface = private, internal
# CA1805: Do not initialize unnecessarily
dotnet_diagnostic.CA1805.severity = warning
# CA1806: Do not ignore method results
dotnet_diagnostic.CA1806.severity = none
# CA1810: Initialize reference type static fields inline
dotnet_diagnostic.CA1810.severity = warning
# CA1812: Avoid uninstantiated internal classes
dotnet_diagnostic.CA1812.severity = none
# CA1813: Avoid unsealed attributes
dotnet_diagnostic.CA1813.severity = none
# CA1814: Prefer jagged arrays over multidimensional
dotnet_diagnostic.CA1814.severity = none
# CA1815: Override equals and operator equals on value types
dotnet_diagnostic.CA1815.severity = none
# CA1816: Dispose methods should call SuppressFinalize
dotnet_diagnostic.CA1816.severity = none
# CA1819: Properties should not return arrays
dotnet_diagnostic.CA1819.severity = none
# CA1820: Test for empty strings using string length
dotnet_diagnostic.CA1820.severity = suggestion
# CA1821: Remove empty Finalizers
dotnet_diagnostic.CA1821.severity = warning
# CA1822: Mark members as static
dotnet_diagnostic.CA1822.severity = warning
dotnet_code_quality.CA1822.api_surface = private, internal
# CA1823: Avoid unused private fields
dotnet_diagnostic.CA1823.severity = warning
# CA1824: Mark assemblies with NeutralResourcesLanguageAttribute
dotnet_diagnostic.CA1824.severity = warning
# CA1825: Avoid zero-length array allocations
dotnet_diagnostic.CA1825.severity = warning
# CA1826: Do not use Enumerable methods on indexable collections
dotnet_diagnostic.CA1826.severity = warning
# CA1827: Do not use Count() or LongCount() when Any() can be used
dotnet_diagnostic.CA1827.severity = warning
# CA1828: Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used
dotnet_diagnostic.CA1828.severity = warning
# CA1829: Use Length/Count property instead of Count() when available
dotnet_diagnostic.CA1829.severity = warning
# CA1830: Prefer strongly-typed Append and Insert method overloads on StringBuilder
dotnet_diagnostic.CA1830.severity = warning
# CA1831: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
dotnet_diagnostic.CA1831.severity = warning
# CA1832: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
dotnet_diagnostic.CA1832.severity = warning
# CA1833: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
dotnet_diagnostic.CA1833.severity = warning
# CA1834: Consider using 'StringBuilder.Append(char)' when applicable
dotnet_diagnostic.CA1834.severity = warning
# CA1835: Prefer the 'Memory'-based overloads for 'ReadAsync' and 'WriteAsync'
dotnet_diagnostic.CA1835.severity = warning
# CA1836: Prefer IsEmpty over Count
dotnet_diagnostic.CA1836.severity = warning
# CA1837: Use 'Environment.ProcessId'
dotnet_diagnostic.CA1837.severity = warning
# CA1838: Avoid 'StringBuilder' parameters for P/Invokes
dotnet_diagnostic.CA1838.severity = warning
# CA1839: Use 'Environment.ProcessPath'
dotnet_diagnostic.CA1839.severity = warning
# CA1840: Use 'Environment.CurrentManagedThreadId'
dotnet_diagnostic.CA1840.severity = warning
# CA1841: Prefer Dictionary.Contains methods
dotnet_diagnostic.CA1841.severity = warning
# CA1842: Do not use 'WhenAll' with a single task
dotnet_diagnostic.CA1842.severity = warning
# CA1843: Do not use 'WaitAll' with a single task
dotnet_diagnostic.CA1843.severity = warning
# CA1844: Provide memory-based overrides of async methods when subclassing 'Stream'
dotnet_diagnostic.CA1844.severity = warning
# CA1845: Use span-based 'string.Concat'
dotnet_diagnostic.CA1845.severity = warning
# CA1846: Prefer 'AsSpan' over 'Substring'
dotnet_diagnostic.CA1846.severity = warning
# CA1847: Use char literal for a single character lookup
dotnet_diagnostic.CA1847.severity = warning
# CA1848: Use the LoggerMessage delegates
dotnet_diagnostic.CA1848.severity = none
# CA1849: Call async methods when in an async method
dotnet_diagnostic.CA1849.severity = suggestion
# CA1850: Prefer static 'HashData' method over 'ComputeHash'
dotnet_diagnostic.CA1850.severity = warning
# CA1851: Possible multiple enumerations of 'IEnumerable' collection
dotnet_diagnostic.CA1851.severity = suggestion
# CA1852: Seal internal types
dotnet_diagnostic.CA1852.severity = warning
# CA1853: Unnecessary call to 'Dictionary.ContainsKey(key)'
dotnet_diagnostic.CA1853.severity = warning
# CA1854: Prefer the 'IDictionary.TryGetValue(TKey, out TValue)' method
dotnet_diagnostic.CA1854.severity = warning
# CA1855: Prefer 'Clear' over 'Fill'
dotnet_diagnostic.CA1855.severity = warning
# CA1856: Incorrect usage of ConstantExpected attribute
dotnet_diagnostic.CA1856.severity = error
# CA1857: A constant is expected for the parameter
dotnet_diagnostic.CA1857.severity = warning
# CA1858: Use 'StartsWith' instead of 'IndexOf'
dotnet_diagnostic.CA1858.severity = warning
# CA1859: Use concrete types when possible for improved performance
dotnet_diagnostic.CA1859.severity = warning
# CA1860: Avoid using 'Enumerable.Any()' extension method
dotnet_diagnostic.CA1860.severity = warning
# CA1861: Avoid constant arrays as arguments
dotnet_diagnostic.CA1861.severity = warning
# CA1862: Prefer using 'StringComparer'/'StringComparison' to perform case-insensitive string comparisons
dotnet_diagnostic.CA1862.severity = suggestion
# CA1863: Use 'CompositeFormat'
dotnet_diagnostic.CA1863.severity = suggestion
# CA1864: Prefer the 'IDictionary.TryAdd(TKey, TValue)' method
dotnet_diagnostic.CA1864.severity = warning
# CA1865: Use char overload
dotnet_diagnostic.CA1865.severity = warning
# CA1866: Use char overload
dotnet_diagnostic.CA1866.severity = warning
# CA1867: Use char overload
dotnet_diagnostic.CA1867.severity = warning
# CA1868: Unnecessary call to 'Contains' for sets
dotnet_diagnostic.CA1868.severity = warning
# CA1869: Cache and reuse 'JsonSerializerOptions' instances
dotnet_diagnostic.CA1869.severity = warning
# CA1870: Use a cached 'SearchValues' instance
dotnet_diagnostic.CA1870.severity = warning
# CA1871: Do not pass a nullable struct to 'ArgumentNullException.ThrowIfNull'
dotnet_diagnostic.CA1871.severity = warning
# CA1872: Prefer 'Convert.ToHexString' and 'Convert.ToHexStringLower' over call chains based on 'BitConverter.ToString'
dotnet_diagnostic.CA1872.severity = warning
# CA2000: Dispose objects before losing scope
dotnet_diagnostic.CA2000.severity = none
# CA2002: Do not lock on objects with weak identity
dotnet_diagnostic.CA2002.severity = none
# CA2007: Consider calling ConfigureAwait on the awaited task
# dotnet_diagnostic.CA2007.severity = warning
# CA2008: Do not create tasks without passing a TaskScheduler
dotnet_diagnostic.CA2008.severity = warning
# CA2009: Do not call ToImmutableCollection on an ImmutableCollection value
dotnet_diagnostic.CA2009.severity = warning
# CA2011: Avoid infinite recursion
dotnet_diagnostic.CA2011.severity = warning
# CA2012: Use ValueTasks correctly
dotnet_diagnostic.CA2012.severity = warning
# CA2013: Do not use ReferenceEquals with value types
dotnet_diagnostic.CA2013.severity = warning
# CA2014: Do not use stackalloc in loops
dotnet_diagnostic.CA2014.severity = warning
# CA2015: Do not define finalizers for types derived from MemoryManager<T>
dotnet_diagnostic.CA2015.severity = warning
# CA2016: Forward the 'CancellationToken' parameter to methods
dotnet_diagnostic.CA2016.severity = warning
# CA2017: Parameter count mismatch
dotnet_diagnostic.CA2017.severity = warning
# CA2018: 'Buffer.BlockCopy' expects the number of bytes to be copied for the 'count' argument
dotnet_diagnostic.CA2018.severity = warning
# CA2019: Improper 'ThreadStatic' field initialization
dotnet_diagnostic.CA2019.severity = warning
# CA2020: Prevent behavioral change
dotnet_diagnostic.CA2020.severity = warning
# CA2021: Do not call Enumerable.Cast<T> or Enumerable.OfType<T> with incompatible types
dotnet_diagnostic.CA2021.severity = warning
# CA2022: Avoid inexact read with 'Stream.Read'
dotnet_diagnostic.CA2022.severity = warning
# CA2100: Review SQL queries for security vulnerabilities
dotnet_diagnostic.CA2100.severity = none
# CA2101: Specify marshaling for P/Invoke string arguments
dotnet_diagnostic.CA2101.severity = none
# CA2119: Seal methods that satisfy private interfaces
dotnet_diagnostic.CA2119.severity = none
# CA2153: Do Not Catch Corrupted State Exceptions
dotnet_diagnostic.CA2153.severity = none
# CA2200: Rethrow to preserve stack details
dotnet_diagnostic.CA2200.severity = warning
# CA2201: Do not raise reserved exception types
dotnet_diagnostic.CA2201.severity = none
# CA2207: Initialize value type static fields inline
dotnet_diagnostic.CA2207.severity = warning
# CA2208: Instantiate argument exceptions correctly
dotnet_diagnostic.CA2208.severity = warning
dotnet_code_quality.CA2208.api_surface = public
# CA2211: Non-constant fields should not be visible
dotnet_diagnostic.CA2211.severity = none
# CA2213: Disposable fields should be disposed
dotnet_diagnostic.CA2213.severity = none
# CA2214: Do not call overridable methods in constructors
dotnet_diagnostic.CA2214.severity = none
# CA2215: Dispose methods should call base class dispose
dotnet_diagnostic.CA2215.severity = none
# CA2216: Disposable types should declare finalizer
dotnet_diagnostic.CA2216.severity = none
# CA2217: Do not mark enums with FlagsAttribute
dotnet_diagnostic.CA2217.severity = none
# CA2218: Override GetHashCode on overriding Equals
dotnet_diagnostic.CA2218.severity = none
# CA2219: Do not raise exceptions in finally clauses
dotnet_diagnostic.CA2219.severity = none
# CA2224: Override Equals on overloading operator equals
dotnet_diagnostic.CA2224.severity = none
# CA2225: Operator overloads have named alternates
dotnet_diagnostic.CA2225.severity = none
# CA2226: Operators should have symmetrical overloads
dotnet_diagnostic.CA2226.severity = none
# CA2227: Collection properties should be read only
dotnet_diagnostic.CA2227.severity = none
# CA2231: Overload operator equals on overriding value type Equals
dotnet_diagnostic.CA2231.severity = none
# CA2234: Pass system uri objects instead of strings
dotnet_diagnostic.CA2234.severity = none
# CA2235: Mark all non-serializable fields
dotnet_diagnostic.CA2235.severity = none
# CA2237: Mark ISerializable types with serializable
dotnet_diagnostic.CA2237.severity = none
# CA2241: Provide correct arguments to formatting methods
dotnet_diagnostic.CA2241.severity = warning
# CA2242: Test for NaN correctly
dotnet_diagnostic.CA2242.severity = warning
# CA2243: Attribute string literals should parse correctly
dotnet_diagnostic.CA2243.severity = warning
# CA2244: Do not duplicate indexed element initializations
dotnet_diagnostic.CA2244.severity = warning
# CA2245: Do not assign a property to itself
dotnet_diagnostic.CA2245.severity = warning
# CA2246: Assigning symbol and its member in the same statement
dotnet_diagnostic.CA2246.severity = warning
# CA2247: Argument passed to TaskCompletionSource constructor should be TaskCreationOptions enum instead of TaskContinuationOptions enum
dotnet_diagnostic.CA2247.severity = warning
# CA2248: Provide correct 'enum' argument to 'Enum.HasFlag'
dotnet_diagnostic.CA2248.severity = warning
# CA2249: Consider using 'string.Contains' instead of 'string.IndexOf'
dotnet_diagnostic.CA2249.severity = warning
# CA2250: Use 'ThrowIfCancellationRequested'
dotnet_diagnostic.CA2250.severity = warning
# CA2251: Use 'string.Equals'
dotnet_diagnostic.CA2251.severity = warning
# CA2252: This API requires opting into preview features
dotnet_diagnostic.CA2252.severity = error
# CA2253: Named placeholders should not be numeric values
dotnet_diagnostic.CA2253.severity = warning
# CA2254: Template should be a static expression
dotnet_diagnostic.CA2254.severity = none
# CA2255: The 'ModuleInitializer' attribute should not be used in libraries
dotnet_diagnostic.CA2255.severity = warning
# CA2256: All members declared in parent interfaces must have an implementation in a DynamicInterfaceCastableImplementation-attributed interface
dotnet_diagnostic.CA2256.severity = warning
# CA2257: Members defined on an interface with the 'DynamicInterfaceCastableImplementationAttribute' should be 'static'
dotnet_diagnostic.CA2257.severity = warning
# CA2258: Providing a 'DynamicInterfaceCastableImplementation' interface in Visual Basic is unsupported
dotnet_diagnostic.CA2258.severity = warning
# CA2259: 'ThreadStatic' only affects static fields
dotnet_diagnostic.CA2259.severity = warning
# CA2260: Use correct type parameter
dotnet_diagnostic.CA2260.severity = warning
# CA2261: Do not use ConfigureAwaitOptions.SuppressThrowing with Task<TResult>
dotnet_diagnostic.CA2261.severity = warning
# CA2262: Set 'MaxResponseHeadersLength' properly
dotnet_diagnostic.CA2262.severity = warning
# CA2263: Prefer generic overload when type is known
dotnet_diagnostic.CA2263.severity = suggestion
# CA2264: Do not pass a non-nullable value to 'ArgumentNullException.ThrowIfNull'
dotnet_diagnostic.CA2264.severity = warning
# CA2265: Do not compare Span<T> to 'null' or 'default'
dotnet_diagnostic.CA2265.severity = warning
# CA2300: Do not use insecure deserializer BinaryFormatter
dotnet_diagnostic.CA2300.severity = none
# CA2301: Do not call BinaryFormatter.Deserialize without first setting BinaryFormatter.Binder
dotnet_diagnostic.CA2301.severity = none
# CA2302: Ensure BinaryFormatter.Binder is set before calling BinaryFormatter.Deserialize
dotnet_diagnostic.CA2302.severity = none
# CA2305: Do not use insecure deserializer LosFormatter
dotnet_diagnostic.CA2305.severity = none
# CA2310: Do not use insecure deserializer NetDataContractSerializer
dotnet_diagnostic.CA2310.severity = none
# CA2311: Do not deserialize without first setting NetDataContractSerializer.Binder
dotnet_diagnostic.CA2311.severity = none
# CA2312: Ensure NetDataContractSerializer.Binder is set before deserializing
dotnet_diagnostic.CA2312.severity = none
# CA2315: Do not use insecure deserializer ObjectStateFormatter
dotnet_diagnostic.CA2315.severity = none
# CA2321: Do not deserialize with JavaScriptSerializer using a SimpleTypeResolver
dotnet_diagnostic.CA2321.severity = none
# CA2322: Ensure JavaScriptSerializer is not initialized with SimpleTypeResolver before deserializing
dotnet_diagnostic.CA2322.severity = none
# CA2326: Do not use TypeNameHandling values other than None
dotnet_diagnostic.CA2326.severity = none
# CA2327: Do not use insecure JsonSerializerSettings
dotnet_diagnostic.CA2327.severity = none
# CA2328: Ensure that JsonSerializerSettings are secure
dotnet_diagnostic.CA2328.severity = none
# CA2329: Do not deserialize with JsonSerializer using an insecure configuration
dotnet_diagnostic.CA2329.severity = none
# CA2330: Ensure that JsonSerializer has a secure configuration when deserializing
dotnet_diagnostic.CA2330.severity = none
# CA2350: Do not use DataTable.ReadXml() with untrusted data
dotnet_diagnostic.CA2350.severity = none
# CA2351: Do not use DataSet.ReadXml() with untrusted data
dotnet_diagnostic.CA2351.severity = none
# CA2352: Unsafe DataSet or DataTable in serializable type can be vulnerable to remote code execution attacks
dotnet_diagnostic.CA2352.severity = none
# CA2353: Unsafe DataSet or DataTable in serializable type
dotnet_diagnostic.CA2353.severity = none
# CA2354: Unsafe DataSet or DataTable in deserialized object graph can be vulnerable to remote code execution attacks
dotnet_diagnostic.CA2354.severity = none
# CA2355: Unsafe DataSet or DataTable type found in deserializable object graph
dotnet_diagnostic.CA2355.severity = none
# CA2356: Unsafe DataSet or DataTable type in web deserializable object graph
dotnet_diagnostic.CA2356.severity = none
# CA2361: Ensure auto-generated class containing DataSet.ReadXml() is not used with untrusted data
dotnet_diagnostic.CA2361.severity = none
# CA2362: Unsafe DataSet or DataTable in auto-generated serializable type can be vulnerable to remote code execution attacks
dotnet_diagnostic.CA2362.severity = none
# CA3001: Review code for SQL injection vulnerabilities
dotnet_diagnostic.CA3001.severity = none
# CA3002: Review code for XSS vulnerabilities
dotnet_diagnostic.CA3002.severity = none
# CA3003: Review code for file path injection vulnerabilities
dotnet_diagnostic.CA3003.severity = none
# CA3004: Review code for information disclosure vulnerabilities
dotnet_diagnostic.CA3004.severity = none
# CA3005: Review code for LDAP injection vulnerabilities
dotnet_diagnostic.CA3005.severity = none
# CA3006: Review code for process command injection vulnerabilities
dotnet_diagnostic.CA3006.severity = none
# CA3007: Review code for open redirect vulnerabilities
dotnet_diagnostic.CA3007.severity = none
# CA3008: Review code for XPath injection vulnerabilities
dotnet_diagnostic.CA3008.severity = none
# CA3009: Review code for XML injection vulnerabilities
dotnet_diagnostic.CA3009.severity = none
# CA3010: Review code for XAML injection vulnerabilities
dotnet_diagnostic.CA3010.severity = none
# CA3011: Review code for DLL injection vulnerabilities
dotnet_diagnostic.CA3011.severity = none
# CA3012: Review code for regex injection vulnerabilities
dotnet_diagnostic.CA3012.severity = none
# CA3061: Do Not Add Schema By URL
dotnet_diagnostic.CA3061.severity = warning
# CA3075: Insecure DTD processing in XML
dotnet_diagnostic.CA3075.severity = warning
# CA3076: Insecure XSLT script processing
dotnet_diagnostic.CA3076.severity = warning
# CA3077: Insecure Processing in API Design, XmlDocument and XmlTextReader
dotnet_diagnostic.CA3077.severity = warning
# CA3147: Mark Verb Handlers With Validate Antiforgery Token
dotnet_diagnostic.CA3147.severity = warning
# CA5350: Do Not Use Weak Cryptographic Algorithms
dotnet_diagnostic.CA5350.severity = warning
# CA5351: Do Not Use Broken Cryptographic Algorithms
dotnet_diagnostic.CA5351.severity = warning
# CA5358: Review cipher mode usage with cryptography experts
dotnet_diagnostic.CA5358.severity = none
# CA5359: Do Not Disable Certificate Validation
dotnet_diagnostic.CA5359.severity = warning
# CA5360: Do Not Call Dangerous Methods In Deserialization
dotnet_diagnostic.CA5360.severity = warning
# CA5361: Do Not Disable SChannel Use of Strong Crypto
dotnet_diagnostic.CA5361.severity = warning
# CA5362: Potential reference cycle in deserialized object graph
dotnet_diagnostic.CA5362.severity = none
# CA5363: Do Not Disable Request Validation
dotnet_diagnostic.CA5363.severity = warning
# CA5364: Do Not Use Deprecated Security Protocols
dotnet_diagnostic.CA5364.severity = warning
# CA5365: Do Not Disable HTTP Header Checking
dotnet_diagnostic.CA5365.severity = warning
# CA5366: Use XmlReader for 'DataSet.ReadXml()'
dotnet_diagnostic.CA5366.severity = none
# CA5367: Do Not Serialize Types With Pointer Fields
dotnet_diagnostic.CA5367.severity = none
# CA5368: Set ViewStateUserKey For Classes Derived From Page
dotnet_diagnostic.CA5368.severity = warning
# CA5369: Use XmlReader for 'XmlSerializer.Deserialize()'
dotnet_diagnostic.CA5369.severity = none
# CA5370: Use XmlReader for XmlValidatingReader constructor
dotnet_diagnostic.CA5370.severity = warning
# CA5371: Use XmlReader for 'XmlSchema.Read()'
dotnet_diagnostic.CA5371.severity = none
# CA5372: Use XmlReader for XPathDocument constructor
dotnet_diagnostic.CA5372.severity = none
# CA5373: Do not use obsolete key derivation function
dotnet_diagnostic.CA5373.severity = warning
# CA5374: Do Not Use XslTransform
dotnet_diagnostic.CA5374.severity = warning
# CA5375: Do Not Use Account Shared Access Signature
dotnet_diagnostic.CA5375.severity = none
# CA5376: Use SharedAccessProtocol HttpsOnly
dotnet_diagnostic.CA5376.severity = warning
# CA5377: Use Container Level Access Policy
dotnet_diagnostic.CA5377.severity = warning
# CA5378: Do not disable ServicePointManagerSecurityProtocols
dotnet_diagnostic.CA5378.severity = warning
# CA5379: Ensure Key Derivation Function algorithm is sufficiently strong
dotnet_diagnostic.CA5379.severity = warning
# CA5380: Do Not Add Certificates To Root Store
dotnet_diagnostic.CA5380.severity = warning
# CA5381: Ensure Certificates Are Not Added To Root Store
dotnet_diagnostic.CA5381.severity = warning
# CA5382: Use Secure Cookies In ASP.NET Core
dotnet_diagnostic.CA5382.severity = none
# CA5383: Ensure Use Secure Cookies In ASP.NET Core
dotnet_diagnostic.CA5383.severity = none
# CA5384: Do Not Use Digital Signature Algorithm (DSA)
dotnet_diagnostic.CA5384.severity = warning
# CA5385: Use Rivest-Shamir-Adleman (RSA) Algorithm With Sufficient Key Size
dotnet_diagnostic.CA5385.severity = warning
# CA5386: Avoid hardcoding SecurityProtocolType value
dotnet_diagnostic.CA5386.severity = none
# CA5387: Do Not Use Weak Key Derivation Function With Insufficient Iteration Count
dotnet_diagnostic.CA5387.severity = none
# CA5388: Ensure Sufficient Iteration Count When Using Weak Key Derivation Function
dotnet_diagnostic.CA5388.severity = none
# CA5389: Do Not Add Archive Item's Path To The Target File System Path
dotnet_diagnostic.CA5389.severity = none
# CA5390: Do not hard-code encryption key
dotnet_diagnostic.CA5390.severity = none
# CA5391: Use antiforgery tokens in ASP.NET Core MVC controllers
dotnet_diagnostic.CA5391.severity = none
# CA5392: Use DefaultDllImportSearchPaths attribute for P/Invokes
dotnet_diagnostic.CA5392.severity = none
# CA5393: Do not use unsafe DllImportSearchPath value
dotnet_diagnostic.CA5393.severity = none
# CA5394: Do not use insecure randomness
dotnet_diagnostic.CA5394.severity = none
# CA5395: Miss HttpVerb attribute for action methods
dotnet_diagnostic.CA5395.severity = none
# CA5396: Set HttpOnly to true for HttpCookie
dotnet_diagnostic.CA5396.severity = none
# CA5397: Do not use deprecated SslProtocols values
dotnet_diagnostic.CA5397.severity = none
# CA5398: Avoid hardcoded SslProtocols values
dotnet_diagnostic.CA5398.severity = none
# CA5399: HttpClients should enable certificate revocation list checks
dotnet_diagnostic.CA5399.severity = none
# CA5400: Ensure HttpClient certificate revocation list check is not disabled
dotnet_diagnostic.CA5400.severity = none
# CA5401: Do not use CreateEncryptor with non-default IV
dotnet_diagnostic.CA5401.severity = none
# CA5402: Use CreateEncryptor with the default IV
dotnet_diagnostic.CA5402.severity = none
# CA5403: Do not hard-code certificate
dotnet_diagnostic.CA5403.severity = none
# CA5404: Do not disable token validation checks
dotnet_diagnostic.CA5404.severity = none
# CA5405: Do not always skip token validation in delegates
dotnet_diagnostic.CA5405.severity = none
# IL3000: Avoid using accessing Assembly file path when publishing as a single-file
dotnet_diagnostic.IL3000.severity = warning
# IL3001: Avoid using accessing Assembly file path when publishing as a single-file
dotnet_diagnostic.IL3001.severity = warning
# IL3002: Using member with RequiresAssemblyFilesAttribute can break functionality when embedded in a single-file app
dotnet_diagnostic.IL3002.severity = warning
# RS1001: Missing diagnostic analyzer attribute
dotnet_diagnostic.RS1001.severity = warning
# RS1002: Missing kind argument when registering an analyzer action
dotnet_diagnostic.RS1002.severity = warning
# RS1003: Unsupported SymbolKind argument when registering a symbol analyzer action
dotnet_diagnostic.RS1003.severity = warning
# RS1004: Recommend adding language support to diagnostic analyzer
dotnet_diagnostic.RS1004.severity = warning
# RS1005: ReportDiagnostic invoked with an unsupported DiagnosticDescriptor
dotnet_diagnostic.RS1005.severity = warning
# RS1006: Invalid type argument for DiagnosticAnalyzer's Register method
dotnet_diagnostic.RS1006.severity = warning
# RS1007: Provide localizable arguments to diagnostic descriptor constructor
dotnet_diagnostic.RS1007.severity = none
# RS1008: Avoid storing per-compilation data into the fields of a diagnostic analyzer
dotnet_diagnostic.RS1008.severity = warning
# RS1009: Only internal implementations of this interface are allowed
dotnet_diagnostic.RS1009.severity = error
# RS1010: Create code actions should have a unique EquivalenceKey for FixAll occurrences support
dotnet_diagnostic.RS1010.severity = warning
# RS1011: Use code actions that have a unique EquivalenceKey for FixAll occurrences support
dotnet_diagnostic.RS1011.severity = warning
# RS1012: Start action has no registered actions
dotnet_diagnostic.RS1012.severity = warning
# RS1013: Start action has no registered non-end actions
dotnet_diagnostic.RS1013.severity = warning
# RS1014: Do not ignore values returned by methods on immutable objects
dotnet_diagnostic.RS1014.severity = warning
# RS1015: Provide non-null 'helpLinkUri' value to diagnostic descriptor constructor
dotnet_diagnostic.RS1015.severity = none
# RS1016: Code fix providers should provide FixAll support
dotnet_diagnostic.RS1016.severity = suggestion
# RS1017: DiagnosticId for analyzers must be a non-null constant
dotnet_diagnostic.RS1017.severity = warning
# RS1018: DiagnosticId for analyzers must be in specified format
dotnet_diagnostic.RS1018.severity = warning
# RS1019: DiagnosticId must be unique across analyzers
dotnet_diagnostic.RS1019.severity = warning
# RS1020: Category for analyzers must be from the specified values
dotnet_diagnostic.RS1020.severity = none
# RS1021: Invalid entry in analyzer category and diagnostic ID range specification file
dotnet_diagnostic.RS1021.severity = warning
# RS1022: Do not use types from Workspaces assembly in an analyzer
dotnet_diagnostic.RS1022.severity = warning
# RS1023: Upgrade MSBuildWorkspace
dotnet_diagnostic.RS1023.severity = warning
# RS1024: Symbols should be compared for equality
dotnet_diagnostic.RS1024.severity = warning
# RS1025: Configure generated code analysis
dotnet_diagnostic.RS1025.severity = warning
# RS1026: Enable concurrent execution
dotnet_diagnostic.RS1026.severity = warning
# RS1027: Types marked with DiagnosticAnalyzerAttribute(s) should inherit from DiagnosticAnalyzer
dotnet_diagnostic.RS1027.severity = warning
# RS1028: Provide non-null 'customTags' value to diagnostic descriptor constructor
dotnet_diagnostic.RS1028.severity = none
# RS1029: Do not use reserved diagnostic IDs
dotnet_diagnostic.RS1029.severity = warning
# RS1030: Do not invoke Compilation.GetSemanticModel() method within a diagnostic analyzer
dotnet_diagnostic.RS1030.severity = warning
# RS1031: Define diagnostic title correctly
dotnet_diagnostic.RS1031.severity = warning
# RS1032: Define diagnostic message correctly
dotnet_diagnostic.RS1032.severity = warning
# RS1033: Define diagnostic description correctly
dotnet_diagnostic.RS1033.severity = warning
# RS1034: Prefer 'IsKind' for checking syntax kinds
dotnet_diagnostic.RS1034.severity = warning
# RS1035: Do not use APIs banned for analyzers
dotnet_diagnostic.RS1035.severity = error
# RS1036: Specify analyzer banned API enforcement setting
dotnet_diagnostic.RS1036.severity = warning
# RS1037: Add "CompilationEnd" custom tag to compilation end diagnostic descriptor
dotnet_diagnostic.RS1037.severity = warning
# RS1038: Compiler extensions should be implemented in assemblies with compiler-provided references
dotnet_diagnostic.RS1038.severity = suggestion
# RS2000: Add analyzer diagnostic IDs to analyzer release
dotnet_diagnostic.RS2000.severity = warning
# RS2001: Ensure up-to-date entry for analyzer diagnostic IDs are added to analyzer release
dotnet_diagnostic.RS2001.severity = warning
# RS2002: Do not add removed analyzer diagnostic IDs to unshipped analyzer release
dotnet_diagnostic.RS2002.severity = warning
# RS2003: Shipped diagnostic IDs that are no longer reported should have an entry in the 'Removed Rules' table in unshipped file
dotnet_diagnostic.RS2003.severity = warning
# RS2004: Diagnostic IDs marked as removed in analyzer release file should not be reported by analyzers
dotnet_diagnostic.RS2004.severity = warning
# RS2005: Remove duplicate entries for diagnostic ID in the same analyzer release
dotnet_diagnostic.RS2005.severity = warning
# RS2006: Remove duplicate entries for diagnostic ID between analyzer releases
dotnet_diagnostic.RS2006.severity = warning
# RS2007: Invalid entry in analyzer release file
dotnet_diagnostic.RS2007.severity = warning
# RS2008: Enable analyzer release tracking
dotnet_diagnostic.RS2008.severity = warning
# SA0001: XML comments
dotnet_diagnostic.SA0001.severity = none
# SA1000: Spacing around keywords
dotnet_diagnostic.SA1000.severity = warning
# SA1001: Commas should not be preceded by whitespace
dotnet_diagnostic.SA1001.severity = warning
# SA1002: Semicolons should not be preceded by a space
dotnet_diagnostic.SA1002.severity = none
# SA1003: Operator should not appear at the end of a line
dotnet_diagnostic.SA1003.severity = none
# SA1004: Documentation line should begin with a space
dotnet_diagnostic.SA1004.severity = none
# SA1005: Single line comment should begin with a space
dotnet_diagnostic.SA1005.severity = none
# SA1008: Opening parenthesis should not be preceded by a space
dotnet_diagnostic.SA1008.severity = none
# SA1009: Closing parenthesis should not be followed by a space
dotnet_diagnostic.SA1009.severity = none
# SA1010: Opening square brackets should not be preceded by a space
dotnet_diagnostic.SA1010.severity = none
# SA1011: Closing square bracket should be followed by a space
dotnet_diagnostic.SA1011.severity = none
# SA1012: Opening brace should be followed by a space
dotnet_diagnostic.SA1012.severity = none
# SA1013: Closing brace should be preceded by a space
dotnet_diagnostic.SA1013.severity = none
# SA1014: Opening generic brackets should not be preceded by a space
dotnet_diagnostic.SA1014.severity = warning
# SA1015: Closing generic bracket should not be followed by a space
dotnet_diagnostic.SA1015.severity = none
# SA1018: Nullable type symbol should not be preceded by a space
dotnet_diagnostic.SA1018.severity = warning
# SA1020: Increment symbol should not be preceded by a space
dotnet_diagnostic.SA1020.severity = warning
# SA1021: Negative sign should be preceded by a space
dotnet_diagnostic.SA1021.severity = none
# SA1023: Dereference symbol '*' should not be preceded by a space."
dotnet_diagnostic.SA1023.severity = none
# SA1024: Colon should be followed by a space
dotnet_diagnostic.SA1024.severity = none
# SA1025: Code should not contain multiple whitespace characters in a row
dotnet_diagnostic.SA1025.severity = none
# SA1026: Keyword followed by span or blank line
dotnet_diagnostic.SA1026.severity = warning
# SA1027: Tabs and spaces should be used correctly
dotnet_diagnostic.SA1027.severity = warning
# SA1028: Code should not contain trailing whitespace
dotnet_diagnostic.SA1028.severity = warning
# SA1100: Do not prefix calls with base unless local implementation exists
dotnet_diagnostic.SA1100.severity = none
# SA1101: Prefix local calls with this
dotnet_diagnostic.SA1101.severity = none
# SA1102: Query clause should follow previous clause
dotnet_diagnostic.SA1102.severity = warning
# SA1105: Query clauses spanning multiple lines should begin on own line
dotnet_diagnostic.SA1105.severity = warning
# SA1106: Code should not contain empty statements
dotnet_diagnostic.SA1106.severity = none
# SA1107: Code should not contain multiple statements on one line
dotnet_diagnostic.SA1107.severity = none
# SA1108: Block statements should not contain embedded comments
dotnet_diagnostic.SA1108.severity = none
# SA1110: Opening parenthesis or bracket should be on declaration line
dotnet_diagnostic.SA1110.severity = none
# SA1111: Closing parenthesis should be on line of last parameter
dotnet_diagnostic.SA1111.severity = none
# SA1113: Comma should be on the same line as previous parameter
dotnet_diagnostic.SA1113.severity = warning
# SA1114: Parameter list should follow declaration
dotnet_diagnostic.SA1114.severity = none
# SA1115: Parameter should begin on the line after the previous parameter
dotnet_diagnostic.SA1115.severity = warning
# SA1116: Split parameters should start on line after declaration
dotnet_diagnostic.SA1116.severity = none
# SA1117: Parameters should be on same line or separate lines
dotnet_diagnostic.SA1117.severity = none
# SA1118: Parameter should not span multiple lines
dotnet_diagnostic.SA1118.severity = none
# SA1119: Statement should not use unnecessary parenthesis
dotnet_diagnostic.SA1119.severity = none
# SA1120: Comments should contain text
dotnet_diagnostic.SA1120.severity = none
# SA1121: Use built-in type alias
dotnet_diagnostic.SA1121.severity = warning
# SA1122: Use string.Empty for empty strings
dotnet_diagnostic.SA1122.severity = none
# SA1123: Region should not be located within a code element
dotnet_diagnostic.SA1123.severity = none
# SA1124: Do not use regions
dotnet_diagnostic.SA1124.severity = none
# SA1125: Use shorthand for nullable types
dotnet_diagnostic.SA1125.severity = none
# SA1127: Generic type constraints should be on their own line
dotnet_diagnostic.SA1127.severity = none
# SA1128: Put constructor initializers on their own line
dotnet_diagnostic.SA1128.severity = none
# SA1129: Do not use default value type constructor
dotnet_diagnostic.SA1129.severity = warning
# SA1130: Use lambda syntax
dotnet_diagnostic.SA1130.severity = none
# SA1131: Constant values should appear on the right-hand side of comparisons
dotnet_diagnostic.SA1131.severity = none
# SA1132: Do not combine fields
dotnet_diagnostic.SA1132.severity = none
# SA1133: Do not combine attributes
dotnet_diagnostic.SA1133.severity = none
# SA1134: Each attribute should be placed on its own line of code
dotnet_diagnostic.SA1134.severity = none
# SA1135: Using directive should be qualified
dotnet_diagnostic.SA1135.severity = none
# SA1136: Enum values should be on separate lines
dotnet_diagnostic.SA1136.severity = warning
# SA1137: Elements should have the same indentation
dotnet_diagnostic.SA1137.severity = none
# SA1139: Use literal suffix notation instead of casting
dotnet_diagnostic.SA1139.severity = none
# SA1141: Use tuple syntax
dotnet_diagnostic.SA1141.severity = warning
# SA1142: Refer to tuple elements by name
dotnet_diagnostic.SA1142.severity = warning
# SA1200: Using directive should appear within a namespace declaration
dotnet_diagnostic.SA1200.severity = none
# SA1201: Elements should appear in the correct order
dotnet_diagnostic.SA1201.severity = none
# SA1202: Elements should be ordered by access
dotnet_diagnostic.SA1202.severity = none
# SA1203: Constants should appear before fields
dotnet_diagnostic.SA1203.severity = none
# SA1204: Static elements should appear before instance elements
dotnet_diagnostic.SA1204.severity = none
# SA1205: Partial elements should declare an access modifier
dotnet_diagnostic.SA1205.severity = warning
# SA1206: Keyword ordering
dotnet_diagnostic.SA1206.severity = warning
# SA1208: Using directive ordering
dotnet_diagnostic.SA1208.severity = none
# SA1209: Using alias directives should be placed after all using namespace directives
dotnet_diagnostic.SA1209.severity = none
# SA1210: Using directives should be ordered alphabetically by the namespaces
dotnet_diagnostic.SA1210.severity = none
# SA1211: Using alias directive ordering
dotnet_diagnostic.SA1211.severity = none
# SA1212: A get accessor appears after a set accessor within a property or indexer
dotnet_diagnostic.SA1212.severity = warning
# SA1214: Readonly fields should appear before non-readonly fields
dotnet_diagnostic.SA1214.severity = none
# SA1216: Using static directives should be placed at the correct location
dotnet_diagnostic.SA1216.severity = none
# SA1300: Element should begin with an uppercase letter
dotnet_diagnostic.SA1300.severity = none
# SA1302: Interface names should begin with I
dotnet_diagnostic.SA1302.severity = warning
# SA1303: Const field names should begin with upper-case letter
dotnet_diagnostic.SA1303.severity = none
# SA1304: Non-private readonly fields should begin with upper-case letter
dotnet_diagnostic.SA1304.severity = none
# SA1306: Field should begin with lower-case letter
dotnet_diagnostic.SA1306.severity = none
# SA1307: Field should begin with upper-case letter
dotnet_diagnostic.SA1307.severity = none
# SA1308: Field should not begin with the prefix 's_'
dotnet_diagnostic.SA1308.severity = none
# SA1309: Field names should not begin with underscore
dotnet_diagnostic.SA1309.severity = none
# SA1310: Field should not contain an underscore
dotnet_diagnostic.SA1310.severity = none
# SA1311: Static readonly fields should begin with upper-case letter
dotnet_diagnostic.SA1311.severity = none
# SA1312: Variable should begin with lower-case letter
dotnet_diagnostic.SA1312.severity = none
# SA1313: Parameter should begin with lower-case letter
dotnet_diagnostic.SA1313.severity = none
# SA1314: Type parameter names should begin with T
dotnet_diagnostic.SA1314.severity = none
# SA1316: Tuple element names should use correct casing
dotnet_diagnostic.SA1316.severity = none
# SA1400: Member should declare an access modifier
dotnet_diagnostic.SA1400.severity = warning
# SA1401: Fields should be private
dotnet_diagnostic.SA1401.severity = none
# SA1402: File may only contain a single type
dotnet_diagnostic.SA1402.severity = none
# SA1403: File may only contain a single namespace
dotnet_diagnostic.SA1403.severity = none
# SA1404: Code analysis suppression should have justification
dotnet_diagnostic.SA1404.severity = warning
# SA1405: Debug.Assert should provide message text
dotnet_diagnostic.SA1405.severity = none
# SA1407: Arithmetic expressions should declare precedence
dotnet_diagnostic.SA1407.severity = none
# SA1408: Conditional expressions should declare precedence
dotnet_diagnostic.SA1408.severity = none
# SA1410: Remove delegate parens when possible
dotnet_diagnostic.SA1410.severity = warning
# SA1411: Attribute constructor shouldn't use unnecessary parenthesis
dotnet_diagnostic.SA1411.severity = warning
# SA1413: Use trailing comma in multi-line initializers
dotnet_diagnostic.SA1413.severity = none
# SA1414: Tuple types in signatures should have element names
dotnet_diagnostic.SA1414.severity = none
# SA1500: Braces for multi-line statements should not share line
dotnet_diagnostic.SA1500.severity = none
# SA1501: Statement should not be on a single line
dotnet_diagnostic.SA1501.severity = none
# SA1502: Element should not be on a single line
dotnet_diagnostic.SA1502.severity = none
# SA1503: Braces should not be omitted
dotnet_diagnostic.SA1503.severity = none
# SA1504: All accessors should be single-line or multi-line
dotnet_diagnostic.SA1504.severity = none
# SA1505: An opening brace should not be followed by a blank line
dotnet_diagnostic.SA1505.severity = none
# SA1506: Element documentation headers should not be followed by blank line
dotnet_diagnostic.SA1506.severity = none
# SA1507: Code should not contain multiple blank lines in a row
dotnet_diagnostic.SA1507.severity = none
# SA1508: A closing brace should not be preceded by a blank line
dotnet_diagnostic.SA1508.severity = none
# SA1509: Opening braces should not be preceded by blank line
dotnet_diagnostic.SA1509.severity = none
# SA1510: 'else' statement should not be preceded by a blank line
dotnet_diagnostic.SA1510.severity = none
# SA1512: Single-line comments should not be followed by blank line
dotnet_diagnostic.SA1512.severity = none
# SA1513: Closing brace should be followed by blank line
dotnet_diagnostic.SA1513.severity = none
# SA1514: Element documentation header should be preceded by blank line
dotnet_diagnostic.SA1514.severity = none
# SA1515: Single-line comment should be preceded by blank line
dotnet_diagnostic.SA1515.severity = none
# SA1516: Elements should be separated by blank line
dotnet_diagnostic.SA1516.severity = none
# SA1517: Code should not contain blank lines at start of file
dotnet_diagnostic.SA1517.severity = warning
# SA1518: Code should not contain blank lines at the end of the file
dotnet_diagnostic.SA1518.severity = warning
# SA1519: Braces should not be omitted from multi-line child statement
dotnet_diagnostic.SA1519.severity = none
# SA1520: Use braces consistently
dotnet_diagnostic.SA1520.severity = none
# SA1600: Elements should be documented
dotnet_diagnostic.SA1600.severity = none
# SA1601: Partial elements should be documented
dotnet_diagnostic.SA1601.severity = none
# SA1602: Enumeration items should be documented
dotnet_diagnostic.SA1602.severity = none
# SA1604: Element documentation should have summary
dotnet_diagnostic.SA1604.severity = none
# SA1605: Partial element documentation should have summary
dotnet_diagnostic.SA1605.severity = none
# SA1606: Element documentation should have summary text
dotnet_diagnostic.SA1606.severity = none
# SA1608: Element documentation should not have default summary
dotnet_diagnostic.SA1608.severity = none
# SA1610: Property documentation should have value text
dotnet_diagnostic.SA1610.severity = none
# SA1611: The documentation for parameter 'message' is missing
dotnet_diagnostic.SA1611.severity = none
# SA1612: The parameter documentation is at incorrect position
dotnet_diagnostic.SA1612.severity = none
# SA1614: Element parameter documentation should have text
dotnet_diagnostic.SA1614.severity = none
# SA1615: Element return value should be documented
dotnet_diagnostic.SA1615.severity = none
# SA1616: Element return value documentation should have text
dotnet_diagnostic.SA1616.severity = none
# SA1618: The documentation for type parameter is missing
dotnet_diagnostic.SA1618.severity = none
# SA1619: The documentation for type parameter is missing
dotnet_diagnostic.SA1619.severity = none
# SA1622: Generic type parameter documentation should have text
dotnet_diagnostic.SA1622.severity = none
# SA1623: Property documentation text
dotnet_diagnostic.SA1623.severity = none
# SA1624: Because the property only contains a visible get accessor, the documentation summary text should begin with 'Gets'
dotnet_diagnostic.SA1624.severity = none
# SA1625: Element documentation should not be copied and pasted
dotnet_diagnostic.SA1625.severity = none
# SA1626: Single-line comments should not use documentation style slashes
dotnet_diagnostic.SA1626.severity = none
# SA1627: The documentation text within the \'exception\' tag should not be empty
dotnet_diagnostic.SA1627.severity = none
# SA1629: Documentation text should end with a period
dotnet_diagnostic.SA1629.severity = none
# SA1633: File should have header
dotnet_diagnostic.SA1633.severity = none
# SA1642: Constructor summary documentation should begin with standard text
dotnet_diagnostic.SA1642.severity = none
# SA1643: Destructor summary documentation should begin with standard text
dotnet_diagnostic.SA1643.severity = none
# SA1649: File name should match first type name
dotnet_diagnostic.SA1649.severity = none
# IDE0001: Simplify name
dotnet_diagnostic.IDE0001.severity = suggestion
# IDE0002: Simplify member access
dotnet_diagnostic.IDE0002.severity = suggestion
# IDE0003: Remove this or Me qualification
dotnet_diagnostic.IDE0003.severity = suggestion
# IDE0004: Remove Unnecessary Cast
dotnet_diagnostic.IDE0004.severity = suggestion
# IDE0005: Using directive is unnecessary.
dotnet_diagnostic.IDE0005.severity = suggestion
# IDE0007: Use implicit type
dotnet_diagnostic.IDE0007.severity = silent
# IDE0008: Use explicit type
dotnet_diagnostic.IDE0008.severity = suggestion
# IDE0009: Add this or Me qualification
dotnet_diagnostic.IDE0009.severity = silent
# IDE0010: Add missing cases
dotnet_diagnostic.IDE0010.severity = silent
# IDE0011: Add braces
dotnet_diagnostic.IDE0011.severity = silent
# IDE0016: Use 'throw' expression
dotnet_diagnostic.IDE0016.severity = silent
# IDE0017: Simplify object initialization
dotnet_diagnostic.IDE0017.severity = suggestion
# IDE0018: Inline variable declaration
dotnet_diagnostic.IDE0018.severity = suggestion
# IDE0019: Use pattern matching to avoid as followed by a null check
dotnet_diagnostic.IDE0019.severity = suggestion
# IDE0020: Use pattern matching to avoid is check followed by a cast (with variable)
dotnet_diagnostic.IDE0020.severity = warning
# IDE0021: Use expression body for constructors
dotnet_diagnostic.IDE0021.severity = silent
# IDE0022: Use expression body for methods
dotnet_diagnostic.IDE0022.severity = silent
# IDE0023: Use expression body for operators
dotnet_diagnostic.IDE0023.severity = silent
# IDE0024: Use expression body for operators
dotnet_diagnostic.IDE0024.severity = silent
# IDE0025: Use expression body for properties
dotnet_diagnostic.IDE0025.severity = silent
# IDE0026: Use expression body for indexers
dotnet_diagnostic.IDE0026.severity = silent
# IDE0027: Use expression body for accessors
dotnet_diagnostic.IDE0027.severity = silent
# IDE0028: Simplify collection initialization
dotnet_diagnostic.IDE0028.severity = suggestion
# IDE0029: Use coalesce expression
dotnet_diagnostic.IDE0029.severity = warning
# IDE0030: Use coalesce expression
dotnet_diagnostic.IDE0030.severity = warning
# IDE0031: Use null propagation
dotnet_diagnostic.IDE0031.severity = warning
# IDE0032: Use auto property
dotnet_diagnostic.IDE0032.severity = silent
# IDE0033: Use explicitly provided tuple name
dotnet_diagnostic.IDE0033.severity = suggestion
# IDE0034: Simplify 'default' expression
dotnet_diagnostic.IDE0034.severity = suggestion
# IDE0035: Remove unreachable code
dotnet_diagnostic.IDE0035.severity = suggestion
# IDE0036: Order modifiers
dotnet_diagnostic.IDE0036.severity = warning
# IDE0037: Use inferred member name
dotnet_diagnostic.IDE0037.severity = silent
# IDE0038: Use pattern matching to avoid is check followed by a cast (without variable)
dotnet_diagnostic.IDE0038.severity = suggestion
# IDE0039: Use local function
dotnet_diagnostic.IDE0039.severity = suggestion
# IDE0040: Add accessibility modifiers
dotnet_diagnostic.IDE0040.severity = suggestion
# IDE0041: Use 'is null' check
dotnet_diagnostic.IDE0041.severity = warning
# IDE0042: Deconstruct variable declaration
dotnet_diagnostic.IDE0042.severity = silent
# IDE0043: Invalid format string
dotnet_diagnostic.IDE0043.severity = warning
# IDE0044: Add readonly modifier
dotnet_diagnostic.IDE0044.severity = suggestion
# IDE0045: Use conditional expression for assignment
dotnet_diagnostic.IDE0045.severity = suggestion
# IDE0046: Use conditional expression for return
dotnet_diagnostic.IDE0046.severity = suggestion
# IDE0047: Remove unnecessary parentheses
dotnet_diagnostic.IDE0047.severity = silent
# IDE0048: Add parentheses for clarity
dotnet_diagnostic.IDE0048.severity = silent
# IDE0049: Use language keywords instead of framework type names for type references
dotnet_diagnostic.IDE0049.severity = warning
# IDE0051: Remove unused private members
dotnet_diagnostic.IDE0051.severity = suggestion
# IDE0052: Remove unread private members
dotnet_diagnostic.IDE0052.severity = suggestion
# IDE0053: Use expression body for lambdas
dotnet_diagnostic.IDE0053.severity = silent
# IDE0054: Use compound assignment
dotnet_diagnostic.IDE0054.severity = warning
# IDE0055: Fix formatting
dotnet_diagnostic.IDE0055.severity = suggestion
# IDE0056: Use index operator
dotnet_diagnostic.IDE0056.severity = suggestion
# IDE0057: Use range operator
dotnet_diagnostic.IDE0057.severity = suggestion
# IDE0058: Expression value is never used
dotnet_diagnostic.IDE0058.severity = silent
# IDE0059: Unnecessary assignment of a value
dotnet_diagnostic.IDE0059.severity = warning
# IDE0060: Remove unused parameter
dotnet_diagnostic.IDE0060.severity = warning
dotnet_code_quality_unused_parameters = non_public
# IDE0061: Use expression body for local functions
dotnet_diagnostic.IDE0061.severity = silent
# IDE0062: Make local function 'static'
dotnet_diagnostic.IDE0062.severity = warning
# IDE0063: Use simple 'using' statement
dotnet_diagnostic.IDE0063.severity = silent
# IDE0064: Make readonly fields writable
dotnet_diagnostic.IDE0064.severity = silent
# IDE0065: Misplaced using directive
dotnet_diagnostic.IDE0065.severity = warning
# IDE0066: Convert switch statement to expression
dotnet_diagnostic.IDE0066.severity = suggestion
# IDE0070: Use 'System.HashCode'
dotnet_diagnostic.IDE0070.severity = suggestion
# IDE0071: Simplify interpolation
dotnet_diagnostic.IDE0071.severity = warning
# IDE0072: Add missing cases
dotnet_diagnostic.IDE0072.severity = silent
# IDE0073: The file header is missing or not located at the top of the file
dotnet_diagnostic.IDE0073.severity = error
# IDE0074: Use compound assignment
dotnet_diagnostic.IDE0074.severity = warning
# IDE0075: Simplify conditional expression
dotnet_diagnostic.IDE0075.severity = silent
# IDE0076: Invalid global 'SuppressMessageAttribute'
dotnet_diagnostic.IDE0076.severity = warning
# IDE0077: Avoid legacy format target in 'SuppressMessageAttribute'
dotnet_diagnostic.IDE0077.severity = silent
# IDE0078: Use pattern matching
dotnet_diagnostic.IDE0078.severity = suggestion
# IDE0079: Remove unnecessary suppression
dotnet_diagnostic.IDE0079.severity = suggestion
# IDE0080: Remove unnecessary suppression operator
dotnet_diagnostic.IDE0080.severity = warning
# IDE0081: Remove unnecessary suppression operator
dotnet_diagnostic.IDE0081.severity = none
# IDE0082: 'typeof' can be converted to 'nameof'
dotnet_diagnostic.IDE0082.severity = warning
# IDE0083: Use pattern matching
dotnet_diagnostic.IDE0083.severity = silent
# IDE0084: Use pattern matching (IsNot operator)
dotnet_diagnostic.IDE0084.severity
gitextract_y4symcy7/
├── .azuredevops/
│ └── dependabot.yml
├── .config/
│ ├── CredScanSuppressions.json
│ └── tsaoptions.json
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.md
│ │ ├── feedback.md
│ │ └── idea.md
│ ├── policies/
│ │ └── resourceManagement.yml
│ └── workflows/
│ ├── docker_build.yml
│ ├── markdownlint-problem-matcher.json
│ ├── markdownlint.yml
│ └── markdownlintignore
├── .gitignore
├── .markdownlint.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Build.targets
├── LICENSE.txt
├── NuGet.config
├── README.md
├── SECURITY.md
├── TFMs.props
├── THIRD-PARTY-NOTICES.TXT
├── YARP.slnx
├── activate.ps1
├── activate.sh
├── azure-pipelines-nonprod.yml
├── azure-pipelines-pr.yml
├── azure-pipelines.yml
├── build.cmd
├── build.sh
├── docs/
│ ├── DailyBuilds.md
│ ├── README.md
│ ├── designs/
│ │ ├── README.md
│ │ ├── config.md
│ │ ├── route-extensibility.md
│ │ └── yarp-tunneling.md
│ ├── operations/
│ │ ├── BackportingToPreview.md
│ │ ├── Branching.md
│ │ ├── DependencyFlow.md
│ │ ├── README.md
│ │ └── Release.md
│ └── roadmap.md
├── dotnet-yarp-release.yml
├── eng/
│ ├── Build.props
│ ├── CodeAnalysis.src.globalconfig
│ ├── CodeAnalysis.test.globalconfig
│ ├── PoliCheckExclusions.xml
│ ├── Publishing.props
│ ├── Signing.props
│ ├── Version.Details.xml
│ ├── Versions.props
│ ├── common/
│ │ ├── BuildConfiguration/
│ │ │ └── build-configuration.json
│ │ ├── CIBuild.cmd
│ │ ├── PSScriptAnalyzerSettings.psd1
│ │ ├── README.md
│ │ ├── SetupNugetSources.ps1
│ │ ├── SetupNugetSources.sh
│ │ ├── build.cmd
│ │ ├── build.ps1
│ │ ├── build.sh
│ │ ├── cibuild.sh
│ │ ├── core-templates/
│ │ │ ├── job/
│ │ │ │ ├── job.yml
│ │ │ │ ├── onelocbuild.yml
│ │ │ │ ├── publish-build-assets.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1.yml
│ │ │ ├── jobs/
│ │ │ │ ├── codeql-build.yml
│ │ │ │ ├── jobs.yml
│ │ │ │ └── source-build.yml
│ │ │ ├── post-build/
│ │ │ │ ├── common-variables.yml
│ │ │ │ ├── post-build.yml
│ │ │ │ └── setup-maestro-vars.yml
│ │ │ ├── steps/
│ │ │ │ ├── cleanup-microbuild.yml
│ │ │ │ ├── component-governance.yml
│ │ │ │ ├── enable-internal-runtimes.yml
│ │ │ │ ├── enable-internal-sources.yml
│ │ │ │ ├── generate-sbom.yml
│ │ │ │ ├── get-delegation-sas.yml
│ │ │ │ ├── get-federated-access-token.yml
│ │ │ │ ├── install-microbuild-impl.yml
│ │ │ │ ├── install-microbuild.yml
│ │ │ │ ├── publish-build-artifacts.yml
│ │ │ │ ├── publish-logs.yml
│ │ │ │ ├── publish-pipeline-artifacts.yml
│ │ │ │ ├── retain-build.yml
│ │ │ │ ├── send-to-helix.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1-publish.yml
│ │ │ └── variables/
│ │ │ └── pool-providers.yml
│ │ ├── cross/
│ │ │ ├── armel/
│ │ │ │ └── tizen/
│ │ │ │ └── tizen.patch
│ │ │ ├── build-android-rootfs.sh
│ │ │ ├── build-rootfs.sh
│ │ │ ├── install-debs.py
│ │ │ ├── riscv64/
│ │ │ │ └── tizen/
│ │ │ │ └── tizen.patch
│ │ │ ├── tizen-build-rootfs.sh
│ │ │ ├── tizen-fetch.sh
│ │ │ └── toolchain.cmake
│ │ ├── darc-init.ps1
│ │ ├── darc-init.sh
│ │ ├── dotnet-install.cmd
│ │ ├── dotnet-install.ps1
│ │ ├── dotnet-install.sh
│ │ ├── dotnet.cmd
│ │ ├── dotnet.ps1
│ │ ├── dotnet.sh
│ │ ├── enable-cross-org-publishing.ps1
│ │ ├── generate-locproject.ps1
│ │ ├── generate-sbom-prep.ps1
│ │ ├── generate-sbom-prep.sh
│ │ ├── helixpublish.proj
│ │ ├── init-tools-native.cmd
│ │ ├── init-tools-native.ps1
│ │ ├── init-tools-native.sh
│ │ ├── internal/
│ │ │ ├── Directory.Build.props
│ │ │ ├── NuGet.config
│ │ │ └── Tools.csproj
│ │ ├── internal-feed-operations.ps1
│ │ ├── internal-feed-operations.sh
│ │ ├── loc/
│ │ │ └── P22DotNetHtmlLocalization.lss
│ │ ├── msbuild.ps1
│ │ ├── msbuild.sh
│ │ ├── native/
│ │ │ ├── CommonLibrary.psm1
│ │ │ ├── common-library.sh
│ │ │ ├── init-compiler.sh
│ │ │ ├── init-distro-rid.sh
│ │ │ ├── init-os-and-arch.sh
│ │ │ ├── install-cmake-test.sh
│ │ │ ├── install-cmake.sh
│ │ │ ├── install-dependencies.sh
│ │ │ └── install-tool.ps1
│ │ ├── pipeline-logging-functions.ps1
│ │ ├── pipeline-logging-functions.sh
│ │ ├── post-build/
│ │ │ ├── check-channel-consistency.ps1
│ │ │ ├── nuget-validation.ps1
│ │ │ ├── nuget-verification.ps1
│ │ │ ├── publish-using-darc.ps1
│ │ │ ├── redact-logs.ps1
│ │ │ ├── sourcelink-validation.ps1
│ │ │ └── symbols-validation.ps1
│ │ ├── retain-build.ps1
│ │ ├── sdk-task.ps1
│ │ ├── sdk-task.sh
│ │ ├── sdl/
│ │ │ ├── NuGet.config
│ │ │ ├── configure-sdl-tool.ps1
│ │ │ ├── execute-all-sdl-tools.ps1
│ │ │ ├── extract-artifact-archives.ps1
│ │ │ ├── extract-artifact-packages.ps1
│ │ │ ├── init-sdl.ps1
│ │ │ ├── packages.config
│ │ │ ├── run-sdl.ps1
│ │ │ ├── sdl.ps1
│ │ │ └── trim-assets-version.ps1
│ │ ├── template-guidance.md
│ │ ├── templates/
│ │ │ ├── job/
│ │ │ │ ├── job.yml
│ │ │ │ ├── onelocbuild.yml
│ │ │ │ ├── publish-build-assets.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1.yml
│ │ │ ├── jobs/
│ │ │ │ ├── codeql-build.yml
│ │ │ │ ├── jobs.yml
│ │ │ │ └── source-build.yml
│ │ │ ├── post-build/
│ │ │ │ ├── common-variables.yml
│ │ │ │ ├── post-build.yml
│ │ │ │ └── setup-maestro-vars.yml
│ │ │ ├── steps/
│ │ │ │ ├── component-governance.yml
│ │ │ │ ├── enable-internal-runtimes.yml
│ │ │ │ ├── enable-internal-sources.yml
│ │ │ │ ├── generate-sbom.yml
│ │ │ │ ├── get-delegation-sas.yml
│ │ │ │ ├── get-federated-access-token.yml
│ │ │ │ ├── publish-build-artifacts.yml
│ │ │ │ ├── publish-logs.yml
│ │ │ │ ├── publish-pipeline-artifacts.yml
│ │ │ │ ├── retain-build.yml
│ │ │ │ ├── send-to-helix.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ ├── source-index-stage1-publish.yml
│ │ │ │ └── vmr-sync.yml
│ │ │ ├── variables/
│ │ │ │ └── pool-providers.yml
│ │ │ └── vmr-build-pr.yml
│ │ ├── templates-official/
│ │ │ ├── job/
│ │ │ │ ├── job.yml
│ │ │ │ ├── onelocbuild.yml
│ │ │ │ ├── publish-build-assets.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1.yml
│ │ │ ├── jobs/
│ │ │ │ ├── codeql-build.yml
│ │ │ │ ├── jobs.yml
│ │ │ │ └── source-build.yml
│ │ │ ├── post-build/
│ │ │ │ ├── common-variables.yml
│ │ │ │ ├── post-build.yml
│ │ │ │ └── setup-maestro-vars.yml
│ │ │ ├── steps/
│ │ │ │ ├── component-governance.yml
│ │ │ │ ├── enable-internal-runtimes.yml
│ │ │ │ ├── enable-internal-sources.yml
│ │ │ │ ├── generate-sbom.yml
│ │ │ │ ├── get-delegation-sas.yml
│ │ │ │ ├── get-federated-access-token.yml
│ │ │ │ ├── publish-build-artifacts.yml
│ │ │ │ ├── publish-logs.yml
│ │ │ │ ├── publish-pipeline-artifacts.yml
│ │ │ │ ├── retain-build.yml
│ │ │ │ ├── send-to-helix.yml
│ │ │ │ ├── source-build.yml
│ │ │ │ └── source-index-stage1-publish.yml
│ │ │ └── variables/
│ │ │ ├── pool-providers.yml
│ │ │ └── sdl-variables.yml
│ │ ├── tools.ps1
│ │ ├── tools.sh
│ │ ├── vmr-sync.ps1
│ │ └── vmr-sync.sh
│ ├── sdl-tsa-vars.config
│ └── yarpapppack/
│ ├── Common.projitems
│ ├── yarpapppack-linux-arm64.csproj
│ └── yarpapppack-linux-x64.csproj
├── es-metadata.yml
├── global.json
├── pack.cmd
├── pack.sh
├── restore.cmd
├── restore.sh
├── samples/
│ ├── BasicYarpSample/
│ │ ├── BasicYarpSample.csproj
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ └── appsettings.json
│ ├── Directory.Build.props
│ ├── KubernetesIngress.Sample/
│ │ ├── Combined/
│ │ │ ├── Dockerfile
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── README.md
│ │ │ ├── Yarp.Kubernetes.IngressController.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── ingress-controller.yaml
│ │ ├── Ingress/
│ │ │ ├── Dockerfile
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── README.md
│ │ │ ├── Yarp.Kubernetes.Ingress.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── ingress.yaml
│ │ ├── Monitor/
│ │ │ ├── Dockerfile
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── README.md
│ │ │ ├── Yarp.Kubernetes.Monitor.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── ingress-monitor.yaml
│ │ ├── README.md
│ │ └── backend/
│ │ ├── Dockerfile
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ ├── backend.csproj
│ │ ├── backend.yaml
│ │ └── ingress-sample.yaml
│ ├── Prometheus/
│ │ ├── HttpLoadApp/
│ │ │ ├── HttpLoadApp.csproj
│ │ │ └── Program.cs
│ │ ├── README.md
│ │ ├── ReverseProxy.Metrics-Prometheus.Sample/
│ │ │ ├── Program.cs
│ │ │ ├── PrometheusDnsMetrics.cs
│ │ │ ├── PrometheusForwarderMetrics.cs
│ │ │ ├── PrometheusKestrelMetrics.cs
│ │ │ ├── PrometheusOutboundHttpMetrics.cs
│ │ │ ├── PrometheusServiceExtensions.cs
│ │ │ ├── PrometheusSocketMetrics.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── ReverseProxy.Metrics.Prometheus.Sample.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ ├── prometheus.yml
│ │ ├── run10destinations.cmd
│ │ └── run10destinations.sh
│ ├── README.md
│ ├── ReverseProxy.Auth.Sample/
│ │ ├── Controllers/
│ │ │ └── AccountController.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Auth.Sample.csproj
│ │ ├── TokenService.cs
│ │ ├── Views/
│ │ │ └── Account/
│ │ │ ├── AccessDenied.cshtml
│ │ │ ├── LoggedOut.cshtml
│ │ │ └── Login.cshtml
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.Code.Sample/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Code.Sample.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.Config.Sample/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Config.Sample.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.ConfigFilter.Sample/
│ │ ├── CustomConfigFilter.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.ConfigFilter.Sample.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.Direct.Sample/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Direct.Sample.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.HttpSysDelegation.Sample/
│ │ ├── README.md
│ │ ├── ReverseProxy/
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── launchSettings.json
│ │ │ ├── ReverseProxy.HttpSysDelegation.Sample.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ └── SampleHttpSysServer/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── SampleHttpSysServer.csproj
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.LetsEncrypt.Sample/
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.LetsEncrypt.Sample.csproj
│ │ └── appsettings.json
│ ├── ReverseProxy.Metrics.Sample/
│ │ ├── ForwarderMetricsConsumer.cs
│ │ ├── ForwarderTelemetryConsumer.cs
│ │ ├── HttpClientTelemetryConsumer.cs
│ │ ├── PerRequestMetrics.cs
│ │ ├── PerRequestYarpMetricCollectionMiddleware.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── README.md
│ │ ├── ReverseProxy.Metrics.Sample.csproj
│ │ ├── WebSocketsTelemetryConsumer.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── ReverseProxy.Transforms.Sample/
│ │ ├── MyTransformFactory.cs
│ │ ├── MyTransformProvider.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── launchSettings.json
│ │ ├── ReverseProxy.Transforms.Sample.csproj
│ │ ├── TokenService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ └── SampleServer/
│ ├── Controllers/
│ │ ├── HealthController.cs
│ │ ├── HttpController.cs
│ │ └── WebSocketsController.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── README.md
│ ├── SampleServer.csproj
│ ├── appsettings.Development.json
│ ├── appsettings.json
│ └── wwwroot/
│ └── index.html
├── src/
│ ├── Application/
│ │ ├── Extensions.cs
│ │ ├── Program.cs
│ │ └── Yarp.Application.csproj
│ ├── Common/
│ │ └── Package.targets
│ ├── Directory.Build.props
│ ├── Kubernetes.Controller/
│ │ ├── Caching/
│ │ │ ├── Endpoints.cs
│ │ │ ├── ICache.cs
│ │ │ ├── IngressCache.cs
│ │ │ ├── IngressClassData.cs
│ │ │ ├── IngressData.cs
│ │ │ ├── NamespaceCache.cs
│ │ │ └── ServiceData.cs
│ │ ├── Certificates/
│ │ │ ├── CertificateHelper.cs
│ │ │ ├── ICertificateHelper.cs
│ │ │ ├── IServerCertificateSelector.cs
│ │ │ └── ServerCertificateSelector.cs
│ │ ├── Client/
│ │ │ ├── GroupApiVersionKind.cs
│ │ │ ├── IIngressResourceStatusUpdater.cs
│ │ │ ├── IResourceInformer.cs
│ │ │ ├── IResourceInformerRegistration.cs
│ │ │ ├── KubernetesClientOptions.cs
│ │ │ ├── ResourceInformer.cs
│ │ │ ├── ResourceSelector.cs
│ │ │ ├── V1EndpointsResourceInformer.cs
│ │ │ ├── V1IngressClassResourceInformer.cs
│ │ │ ├── V1IngressResourceInformer.cs
│ │ │ ├── V1IngressResourceStatusUpdater.cs
│ │ │ ├── V1SecretResourceInformer.cs
│ │ │ └── V1ServiceResourceInformer.cs
│ │ ├── ConfigProvider/
│ │ │ ├── IUpdateConfig.cs
│ │ │ └── KubernetesConfigProvider.cs
│ │ ├── Converters/
│ │ │ ├── ClusterTransfer.cs
│ │ │ ├── YarpConfigContext.cs
│ │ │ ├── YarpIngressContext.cs
│ │ │ ├── YarpIngressOptions.cs
│ │ │ └── YarpParser.cs
│ │ ├── Hosting/
│ │ │ ├── BackgroundHostedService.cs
│ │ │ ├── HostedServiceAdapter.cs
│ │ │ └── ServiceCollectionHostedServiceAdapterExtensions.cs
│ │ ├── Management/
│ │ │ ├── KubernetesCoreExtensions.cs
│ │ │ ├── KubernetesReverseProxyServiceCollectionExtensions.cs
│ │ │ └── KubernetesReverseProxyWebHostBuilderExtensions.cs
│ │ ├── NamespacedName.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Protocol/
│ │ │ ├── DispatchActionResult.cs
│ │ │ ├── DispatchConfigProvider.cs
│ │ │ ├── DispatchController.cs
│ │ │ ├── Dispatcher.cs
│ │ │ ├── IDispatchTarget.cs
│ │ │ ├── IDispatcher.cs
│ │ │ ├── Message.cs
│ │ │ ├── MessageConfigProviderExtensions.cs
│ │ │ ├── Receiver.cs
│ │ │ └── ReceiverOptions.cs
│ │ ├── Queues/
│ │ │ ├── IWorkQueue.cs
│ │ │ ├── ProcessingRateLimitedQueue.cs
│ │ │ └── WorkQueue.cs
│ │ ├── Rate/
│ │ │ ├── Limit.cs
│ │ │ ├── Limiter.cs
│ │ │ └── Reservation.cs
│ │ ├── Services/
│ │ │ ├── IReconciler.cs
│ │ │ ├── IngressController.cs
│ │ │ ├── QueueItem.cs
│ │ │ ├── ReconcileData.cs
│ │ │ └── Reconciler.cs
│ │ ├── Yarp.Kubernetes.Controller.csproj
│ │ └── YarpOptions.cs
│ ├── ReverseProxy/
│ │ ├── Configuration/
│ │ │ ├── ActiveHealthCheckConfig.cs
│ │ │ ├── AuthorizationConstants.cs
│ │ │ ├── ClusterConfig.cs
│ │ │ ├── ClusterValidators/
│ │ │ │ ├── DestinationValidator.cs
│ │ │ │ ├── HealthCheckValidator.cs
│ │ │ │ ├── IClusterValidator.cs
│ │ │ │ ├── LoadBalancingValidator.cs
│ │ │ │ ├── ProxyHttpClientValidator.cs
│ │ │ │ ├── ProxyHttpRequestValidator.cs
│ │ │ │ └── SessionAffinityValidator.cs
│ │ │ ├── ConfigProvider/
│ │ │ │ ├── ConfigurationConfigProvider.cs
│ │ │ │ ├── ConfigurationReadingExtensions.cs
│ │ │ │ └── ConfigurationSnapshot.cs
│ │ │ ├── ConfigValidator.cs
│ │ │ ├── CorsConstants.cs
│ │ │ ├── DestinationConfig.cs
│ │ │ ├── HeaderMatchMode.cs
│ │ │ ├── HealthCheckConfig.cs
│ │ │ ├── HttpClientConfig.cs
│ │ │ ├── IConfigChangeListener.cs
│ │ │ ├── IConfigValidator.cs
│ │ │ ├── IProxyConfig.cs
│ │ │ ├── IProxyConfigFilter.cs
│ │ │ ├── IProxyConfigProvider.cs
│ │ │ ├── IYarpOutputCachePolicyProvider.cs
│ │ │ ├── IYarpRateLimiterPolicyProvider.cs
│ │ │ ├── InMemoryConfigProvider.cs
│ │ │ ├── InMemoryConfigProviderExtensions.cs
│ │ │ ├── PassiveHealthCheckConfig.cs
│ │ │ ├── QueryParameterMatchMode.cs
│ │ │ ├── RateLimitingConstants.cs
│ │ │ ├── RouteConfig.cs
│ │ │ ├── RouteHeader.cs
│ │ │ ├── RouteMatch.cs
│ │ │ ├── RouteQueryParameter.cs
│ │ │ ├── RouteValidators/
│ │ │ │ ├── AuthorizationPolicyValidator.cs
│ │ │ │ ├── CorsPolicyValidator.cs
│ │ │ │ ├── HeadersValidator.cs
│ │ │ │ ├── HostValidator.cs
│ │ │ │ ├── IRouteValidator.cs
│ │ │ │ ├── MethodsValidator.cs
│ │ │ │ ├── OutputCachePolicyValidator.cs
│ │ │ │ ├── PathValidator.cs
│ │ │ │ ├── QueryParametersValidator.cs
│ │ │ │ ├── RateLimitPolicyValidator.cs
│ │ │ │ └── TimeoutPolicyValidator.cs
│ │ │ ├── SessionAffinityConfig.cs
│ │ │ ├── SessionAffinityCookieConfig.cs
│ │ │ ├── TimeoutPolicyConstants.cs
│ │ │ └── WebProxyConfig.cs
│ │ ├── ConfigurationSchema.json
│ │ ├── Delegation/
│ │ │ ├── AppBuilderDelegationExtensions.cs
│ │ │ ├── DelegationExtensions.cs
│ │ │ ├── DummyHttpSysDelegator.cs
│ │ │ ├── HttpSysDelegator.cs
│ │ │ ├── HttpSysDelegatorMiddleware.cs
│ │ │ └── IHttpSysDelegator.cs
│ │ ├── Forwarder/
│ │ │ ├── CallbackHttpClientFactory.cs
│ │ │ ├── DirectForwardingHttpClientProvider.cs
│ │ │ ├── EmptyHttpContent.cs
│ │ │ ├── ForwarderError.cs
│ │ │ ├── ForwarderErrorFeature.cs
│ │ │ ├── ForwarderHttpClientContext.cs
│ │ │ ├── ForwarderHttpClientFactory.cs
│ │ │ ├── ForwarderMiddleware.cs
│ │ │ ├── ForwarderRequestConfig.cs
│ │ │ ├── ForwarderStage.cs
│ │ │ ├── ForwarderTelemetry.cs
│ │ │ ├── HttpForwarder.cs
│ │ │ ├── HttpTransformer.cs
│ │ │ ├── IForwarderErrorFeature.cs
│ │ │ ├── IForwarderHttpClientFactory.cs
│ │ │ ├── IHttpForwarder.cs
│ │ │ ├── IHttpForwarderExtensions.cs
│ │ │ ├── ProtocolHelper.cs
│ │ │ ├── RequestTransformer.cs
│ │ │ ├── RequestUtilities.cs
│ │ │ ├── ReverseProxyPropagator.cs
│ │ │ ├── StreamCopier.cs
│ │ │ ├── StreamCopyHttpContent.cs
│ │ │ └── StreamCopyResult.cs
│ │ ├── Health/
│ │ │ ├── ActiveHealthCheckMonitor.Log.cs
│ │ │ ├── ActiveHealthCheckMonitor.cs
│ │ │ ├── ActiveHealthCheckMonitorOptions.cs
│ │ │ ├── AppBuilderHealthExtensions.cs
│ │ │ ├── ClusterDestinationsUpdater.cs
│ │ │ ├── ConsecutiveFailuresHealthPolicy.cs
│ │ │ ├── ConsecutiveFailuresHealthPolicyOptions.cs
│ │ │ ├── DefaultProbingRequestFactory.cs
│ │ │ ├── DestinationHealthUpdater.cs
│ │ │ ├── DestinationProbingResult.cs
│ │ │ ├── EntityActionScheduler.cs
│ │ │ ├── HealthCheckConstants.cs
│ │ │ ├── HealthyAndUnknownDestinationsPolicy.cs
│ │ │ ├── HealthyOrPanicDestinationsPolicy.cs
│ │ │ ├── IActiveHealthCheckMonitor.cs
│ │ │ ├── IActiveHealthCheckPolicy.cs
│ │ │ ├── IAvailableDestinationsPolicy.cs
│ │ │ ├── IClusterDestinationsUpdater.cs
│ │ │ ├── IDestinationHealthUpdater.cs
│ │ │ ├── IPassiveHealthCheckPolicy.cs
│ │ │ ├── IProbingRequestFactory.cs
│ │ │ ├── NewActiveDestinationHealth.cs
│ │ │ ├── PassiveHealthCheckMiddleware.cs
│ │ │ ├── TransportFailureRateHealthPolicy.cs
│ │ │ └── TransportFailureRateHealthPolicyOptions.cs
│ │ ├── Limits/
│ │ │ └── LimitsMiddleware.cs
│ │ ├── LoadBalancing/
│ │ │ ├── AppBuilderLoadBalancingExtensions.cs
│ │ │ ├── FirstLoadBalancingPolicy.cs
│ │ │ ├── ILoadBalancingPolicy.cs
│ │ │ ├── LeastRequestsLoadBalancingPolicy.cs
│ │ │ ├── LoadBalancingMiddleware.cs
│ │ │ ├── LoadBalancingPolicies.cs
│ │ │ ├── PowerOfTwoChoicesLoadBalancingPolicy.cs
│ │ │ ├── RandomLoadBalancingPolicy.cs
│ │ │ └── RoundRobinLoadBalancingPolicy.cs
│ │ ├── Management/
│ │ │ ├── IProxyStateLookup.cs
│ │ │ ├── IReverseProxyBuilder.cs
│ │ │ ├── IReverseProxyBuilderExtensions.cs
│ │ │ ├── ProxyConfigManager.cs
│ │ │ ├── ReverseProxyBuilder.cs
│ │ │ └── ReverseProxyServiceCollectionExtensions.cs
│ │ ├── Model/
│ │ │ ├── ClusterDestinationsState.cs
│ │ │ ├── ClusterModel.cs
│ │ │ ├── ClusterState.cs
│ │ │ ├── DestinationHealth.cs
│ │ │ ├── DestinationHealthState.cs
│ │ │ ├── DestinationModel.cs
│ │ │ ├── DestinationState.cs
│ │ │ ├── HttpContextFeaturesExtensions.cs
│ │ │ ├── IClusterChangeListener.cs
│ │ │ ├── IReverseProxyApplicationBuilder.cs
│ │ │ ├── IReverseProxyFeature.cs
│ │ │ ├── ProxyPipelineInitializerMiddleware.cs
│ │ │ ├── README.md
│ │ │ ├── ReverseProxyApplicationBuilder.cs
│ │ │ ├── ReverseProxyFeature.cs
│ │ │ ├── RouteModel.cs
│ │ │ └── RouteState.cs
│ │ ├── README.md
│ │ ├── Routing/
│ │ │ ├── DirectForwardingIEndpointRouteBuilderExtensions.cs
│ │ │ ├── HeaderMatcher.cs
│ │ │ ├── HeaderMatcherPolicy.cs
│ │ │ ├── HeaderMetadata.cs
│ │ │ ├── IHeaderMetadata.cs
│ │ │ ├── IQueryParameterMetadata.cs
│ │ │ ├── ProxyEndpointFactory.cs
│ │ │ ├── QueryParameterMatcher.cs
│ │ │ ├── QueryParameterMatcherPolicy.cs
│ │ │ ├── QueryParameterMetadata.cs
│ │ │ ├── ReverseProxyConventionBuilder.cs
│ │ │ └── ReverseProxyIEndpointRouteBuilderExtensions.cs
│ │ ├── ServiceDiscovery/
│ │ │ ├── DnsDestinationResolver.cs
│ │ │ ├── DnsDestinationResolverOptions.cs
│ │ │ ├── IDestinationResolver.cs
│ │ │ ├── NoOpDestinationResolver.cs
│ │ │ └── ResolvedDestinationCollection.cs
│ │ ├── SessionAffinity/
│ │ │ ├── AffinitizeTransform.cs
│ │ │ ├── AffinitizeTransformProvider.cs
│ │ │ ├── AffinityHelpers.cs
│ │ │ ├── AffinityResult.cs
│ │ │ ├── AffinityStatus.cs
│ │ │ ├── AppBuilderSessionAffinityExtensions.cs
│ │ │ ├── ArrCookieSessionAffinityPolicy.cs
│ │ │ ├── BaseEncryptedSessionAffinityPolicy.cs
│ │ │ ├── BaseHashCookieSessionAffinityPolicy.cs
│ │ │ ├── CookieSessionAffinityPolicy.cs
│ │ │ ├── CustomHeaderSessionAffinityPolicy.cs
│ │ │ ├── HashCookieSessionAffinityPolicy.cs
│ │ │ ├── IAffinityFailurePolicy.cs
│ │ │ ├── ISessionAffinityPolicy.cs
│ │ │ ├── Log.cs
│ │ │ ├── RedistributeAffinityFailurePolicy.cs
│ │ │ ├── Return503ErrorAffinityFailurePolicy.cs
│ │ │ ├── SessionAffinityConstants.cs
│ │ │ └── SessionAffinityMiddleware.cs
│ │ ├── Transforms/
│ │ │ ├── Builder/
│ │ │ │ ├── ActionTransformProvider.cs
│ │ │ │ ├── ITransformBuilder.cs
│ │ │ │ ├── ITransformFactory.cs
│ │ │ │ ├── ITransformProvider.cs
│ │ │ │ ├── StructuredTransformer.cs
│ │ │ │ ├── TransformBuilder.cs
│ │ │ │ ├── TransformBuilderContext.cs
│ │ │ │ ├── TransformClusterValidationContext.cs
│ │ │ │ ├── TransformHelpers.cs
│ │ │ │ └── TransformRouteValidationContext.cs
│ │ │ ├── ForwardedTransformActions.cs
│ │ │ ├── ForwardedTransformExtensions.cs
│ │ │ ├── ForwardedTransformFactory.cs
│ │ │ ├── HttpMethodChangeTransform.cs
│ │ │ ├── HttpMethodTransformExtensions.cs
│ │ │ ├── HttpMethodTransformFactory.cs
│ │ │ ├── NodeFormat.cs
│ │ │ ├── PathRouteValuesTransform.cs
│ │ │ ├── PathStringTransform.cs
│ │ │ ├── PathTransformExtensions.cs
│ │ │ ├── PathTransformFactory.cs
│ │ │ ├── QueryParameterFromRouteTransform.cs
│ │ │ ├── QueryParameterFromStaticTransform.cs
│ │ │ ├── QueryParameterRemoveTransform.cs
│ │ │ ├── QueryParameterTransform.cs
│ │ │ ├── QueryTransformContext.cs
│ │ │ ├── QueryTransformExtensions.cs
│ │ │ ├── QueryTransformFactory.cs
│ │ │ ├── RequestFuncTransform.cs
│ │ │ ├── RequestHeaderClientCertTransform.cs
│ │ │ ├── RequestHeaderForwardedTransform.cs
│ │ │ ├── RequestHeaderOriginalHostTransform.cs
│ │ │ ├── RequestHeaderRemoveTransform.cs
│ │ │ ├── RequestHeaderRouteValueTransform.cs
│ │ │ ├── RequestHeaderTransform.cs
│ │ │ ├── RequestHeaderValueTransform.cs
│ │ │ ├── RequestHeaderXForwardedForTransform.cs
│ │ │ ├── RequestHeaderXForwardedHostTransform.cs
│ │ │ ├── RequestHeaderXForwardedPrefixTransform.cs
│ │ │ ├── RequestHeaderXForwardedProtoTransform.cs
│ │ │ ├── RequestHeadersAllowedTransform.cs
│ │ │ ├── RequestHeadersTransformExtensions.cs
│ │ │ ├── RequestHeadersTransformFactory.cs
│ │ │ ├── RequestTransform.cs
│ │ │ ├── RequestTransformContext.cs
│ │ │ ├── ResponseCondition.cs
│ │ │ ├── ResponseFuncTransform.cs
│ │ │ ├── ResponseHeaderRemoveTransform.cs
│ │ │ ├── ResponseHeaderValueTransform.cs
│ │ │ ├── ResponseHeadersAllowedTransform.cs
│ │ │ ├── ResponseTrailerRemoveTransform.cs
│ │ │ ├── ResponseTrailerValueTransform.cs
│ │ │ ├── ResponseTrailersAllowedTransform.cs
│ │ │ ├── ResponseTrailersFuncTransform.cs
│ │ │ ├── ResponseTrailersTransform.cs
│ │ │ ├── ResponseTrailersTransformContext.cs
│ │ │ ├── ResponseTransform.cs
│ │ │ ├── ResponseTransformContext.cs
│ │ │ ├── ResponseTransformExtensions.cs
│ │ │ ├── ResponseTransformFactory.cs
│ │ │ ├── RouteConfigTransformExtensions.cs
│ │ │ └── TransformBuilderContextFuncExtensions.cs
│ │ ├── Utilities/
│ │ │ ├── ActivityCancellationTokenSource.cs
│ │ │ ├── AtomicCounter.cs
│ │ │ ├── CaseInsensitiveEqualHelper.cs
│ │ │ ├── CaseSensitiveEqualHelper.cs
│ │ │ ├── CollectionEqualityHelper.cs
│ │ │ ├── ConcurrentDictionaryExtensions.cs
│ │ │ ├── DelegatingStream.cs
│ │ │ ├── EventIds.cs
│ │ │ ├── IClock.cs
│ │ │ ├── IRandomFactory.cs
│ │ │ ├── NullRandomFactory.cs
│ │ │ ├── Observability.cs
│ │ │ ├── ParsedMetadataEntry.cs
│ │ │ ├── RandomFactory.cs
│ │ │ ├── ServiceLookupHelper.cs
│ │ │ ├── SkipLocalsInit.cs
│ │ │ ├── TaskUtilities.cs
│ │ │ ├── TlsFrameHelper.cs
│ │ │ ├── ValueStopwatch.cs
│ │ │ └── ValueStringBuilder.cs
│ │ ├── WebSocketsTelemetry/
│ │ │ ├── HttpConnectFeatureWrapper.cs
│ │ │ ├── HttpUpgradeFeatureWrapper.cs
│ │ │ ├── WebSocketCloseReason.cs
│ │ │ ├── WebSocketsParser.cs
│ │ │ ├── WebSocketsTelemetry.cs
│ │ │ ├── WebSocketsTelemetryExtensions.cs
│ │ │ ├── WebSocketsTelemetryMiddleware.cs
│ │ │ └── WebSocketsTelemetryStream.cs
│ │ └── Yarp.ReverseProxy.csproj
│ └── TelemetryConsumption/
│ ├── EventListenerService.cs
│ ├── Forwarder/
│ │ ├── ForwarderEventListenerService.cs
│ │ ├── ForwarderMetrics.cs
│ │ ├── ForwarderStage.cs
│ │ └── IForwarderTelemetryConsumer.cs
│ ├── Http/
│ │ ├── HttpEventListenerService.cs
│ │ ├── HttpMetrics.cs
│ │ └── IHttpTelemetryConsumer.cs
│ ├── IMetricsConsumer.cs
│ ├── Kestrel/
│ │ ├── IKestrelTelemetryConsumer.cs
│ │ ├── KestrelEventListenerService.cs
│ │ └── KestrelMetrics.cs
│ ├── MetricsOptions.cs
│ ├── NameResolution/
│ │ ├── INameResolutionTelemetryConsumer.cs
│ │ ├── NameResolutionEventListenerService.cs
│ │ └── NameResolutionMetrics.cs
│ ├── NetSecurity/
│ │ ├── INetSecurityTelemetryConsumer.cs
│ │ ├── NetSecurityEventListenerService.cs
│ │ └── NetSecurityMetrics.cs
│ ├── README.md
│ ├── Sockets/
│ │ ├── ISocketsTelemetryConsumer.cs
│ │ ├── SocketsEventListenerService.cs
│ │ └── SocketsMetrics.cs
│ ├── TelemetryConsumptionExtensions.cs
│ ├── WebSockets/
│ │ ├── IWebSocketsTelemetryConsumer.cs
│ │ ├── WebSocketCloseReason.cs
│ │ └── WebSocketsEventListenerService.cs
│ └── Yarp.Telemetry.Consumption.csproj
├── startvs.cmd
├── test/
│ ├── Directory.Build.props
│ ├── Kubernetes.Tests/
│ │ ├── Certificates/
│ │ │ ├── CertificateHelperTests.cs
│ │ │ ├── cert.der
│ │ │ ├── cert.pem
│ │ │ ├── key.der
│ │ │ └── key.pem
│ │ ├── Client/
│ │ │ ├── ResourceInformerTests.cs
│ │ │ ├── SyncResourceInformer.cs
│ │ │ ├── V1DeploymentResourceInformer.cs
│ │ │ └── V1PodResourceInformer.cs
│ │ ├── Hosting/
│ │ │ ├── BackgroundHostedServiceTests.cs
│ │ │ └── Fakes/
│ │ │ ├── FakeBackgroundHostedService.cs
│ │ │ ├── FakeServer.cs
│ │ │ ├── TestLatch.cs
│ │ │ └── TestLatches.cs
│ │ ├── IngressCacheTests.cs
│ │ ├── IngressControllerTests.cs
│ │ ├── IngressConversionTests.cs
│ │ ├── KubeResourceGenerator.cs
│ │ ├── Management/
│ │ │ └── KubernetesCoreExtensionsTests.cs
│ │ ├── NamespacedNameTests.cs
│ │ ├── Queues/
│ │ │ └── WorkQueueTests.cs
│ │ ├── Rate/
│ │ │ ├── LimitTests.cs
│ │ │ ├── LimiterTests.cs
│ │ │ └── ReservationTests.cs
│ │ ├── ReconcilerTests.cs
│ │ ├── TestCluster/
│ │ │ ├── Controllers/
│ │ │ │ ├── ResourceApiController.cs
│ │ │ │ └── ResourceApiGroupController.cs
│ │ │ ├── ITestCluster.cs
│ │ │ ├── ITestClusterHost.cs
│ │ │ ├── Models/
│ │ │ │ ├── ListParameters.cs
│ │ │ │ ├── ListResult.cs
│ │ │ │ └── ResourceObject.cs
│ │ │ ├── TestCluster.cs
│ │ │ ├── TestClusterHost.cs
│ │ │ ├── TestClusterHostBuilder.cs
│ │ │ ├── TestClusterOptions.cs
│ │ │ └── TestClusterStartup.cs
│ │ ├── Utils/
│ │ │ ├── ResourceSerializers.cs
│ │ │ └── TestLogger.cs
│ │ ├── Yarp.Kubernetes.Tests.csproj
│ │ └── testassets/
│ │ ├── annotations/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── basic-ingress/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── exact-match/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── external-name-ingress/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── hostname-routing/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── https/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── https-service-port-protocol/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── ingress-class-not-set/
│ │ │ └── ingress.yaml
│ │ ├── ingress-class-set/
│ │ │ └── ingress.yaml
│ │ ├── mapped-port/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── missing-svc/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-endpoints-ports/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-endpoints-same-port/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-hosts/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-ingresses/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-ingresses-one-svc/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── multiple-namespaces/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── port-diff-name/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── port-mismatch/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── resource-informer/
│ │ │ ├── ResourcesAreListedWhenReadyAsyncIsComplete/
│ │ │ │ ├── resources.yaml
│ │ │ │ └── shouldbe.yaml
│ │ │ └── ResourcesWithApiGroupAreListed/
│ │ │ ├── resources.yaml
│ │ │ └── shouldbe.yaml
│ │ ├── route-headers/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── route-metadata/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── route-methods/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ ├── route-order/
│ │ │ ├── clusters.json
│ │ │ ├── ingress.yaml
│ │ │ └── routes.json
│ │ └── route-queryparameters/
│ │ ├── clusters.json
│ │ ├── ingress.yaml
│ │ └── routes.json
│ ├── ReverseProxy.FunctionalTests/
│ │ ├── Common/
│ │ │ ├── Helpers.cs
│ │ │ ├── HttpSysTestEnvironment.cs
│ │ │ ├── TestEnvironment.cs
│ │ │ └── TestUrlHelper.cs
│ │ ├── DistributedTracingTests.cs
│ │ ├── Expect100ContinueTests.cs
│ │ ├── HeaderTests.cs
│ │ ├── HttpForwarderCancellationTests.cs
│ │ ├── HttpProxyCookieTests.cs
│ │ ├── HttpSysDelegationTests.cs
│ │ ├── PassiveHealthCheckTests.cs
│ │ ├── TelemetryConsumptionTests.cs
│ │ ├── TelemetryEnumTests.cs
│ │ ├── WebSocketTests.cs
│ │ ├── WebSocketsTelemetryTests.cs
│ │ └── Yarp.ReverseProxy.FunctionalTests.csproj
│ ├── ReverseProxy.Tests/
│ │ ├── Common/
│ │ │ ├── EventAssertExtensions.cs
│ │ │ ├── HttpContentExtensions.cs
│ │ │ ├── MockHttpHandler.cs
│ │ │ ├── TaskExtensions.cs
│ │ │ ├── TestEventListener.cs
│ │ │ ├── TestResources.cs
│ │ │ └── TestTrailersFeature.cs
│ │ ├── Configuration/
│ │ │ ├── ActiveHealthCheckConfigTests.cs
│ │ │ ├── ClusterConfigTests.cs
│ │ │ ├── ConfigProvider/
│ │ │ │ ├── ConfigurationConfigProviderTests.cs
│ │ │ │ └── ConfigurationReadingExtensionsTests.cs
│ │ │ ├── ConfigValidatorTests.cs
│ │ │ ├── DestinationConfigTests.cs
│ │ │ ├── HealthCheckConfigTests.cs
│ │ │ ├── HttpClientConfigTests.cs
│ │ │ ├── PassiveHealthCheckConfigTests.cs
│ │ │ ├── RouteConfigTests.cs
│ │ │ ├── RouteHeaderTests.cs
│ │ │ ├── RouteMatchTests.cs
│ │ │ ├── RouteQueryParameterTests.cs
│ │ │ ├── SessionAffinityConfigTests.cs
│ │ │ ├── YarpOutputCachePolicyProviderTests.cs
│ │ │ └── YarpRateLimiterPolicyProviderTests.cs
│ │ ├── Delegation/
│ │ │ ├── HttpSysDelegatorMiddlewareTests.cs
│ │ │ └── HttpSysDelegatorTests.cs
│ │ ├── Forwarder/
│ │ │ ├── ForwarderHttpClientFactoryTests.cs
│ │ │ ├── ForwarderMiddlewareTests.cs
│ │ │ ├── HttpForwarderTests.cs
│ │ │ ├── HttpTransformerTests.cs
│ │ │ ├── RequestUtilitiesTests.cs
│ │ │ ├── ReverseProxyServiceCollectionTests.cs
│ │ │ ├── StreamCopierTests.cs
│ │ │ └── StreamCopyHttpContentTests.cs
│ │ ├── Health/
│ │ │ ├── ActiveHealthCheckMonitorTests.cs
│ │ │ ├── ClusterDestinationsUpdaterTests.cs
│ │ │ ├── ConsecutiveFailuresHealthPolicyTests.cs
│ │ │ ├── DefaultProbingRequestFactoryTests.cs
│ │ │ ├── DestinationHealthUpdaterTests.cs
│ │ │ ├── EntityActionSchedulerTests.cs
│ │ │ ├── HealthyAndUnknownDestinationsPolicyTests.cs
│ │ │ ├── HealthyOrPanicDestinationsPolicyTests.cs
│ │ │ ├── PassiveHealthCheckMiddlewareTests.cs
│ │ │ └── TransportFailureRateHealthPolicyTests.cs
│ │ ├── Limits/
│ │ │ └── LimitsMiddlewareTests.cs
│ │ ├── LoadBalancing/
│ │ │ ├── LoadBalancerMiddlewareTests.cs
│ │ │ └── LoadBalancingPoliciesTests.cs
│ │ ├── Management/
│ │ │ └── ProxyConfigManagerTests.cs
│ │ ├── Model/
│ │ │ ├── DestinationStateTests.cs
│ │ │ ├── HttpContextFeaturesExtensions.cs
│ │ │ └── ProxyPipelineInitializerMiddlewareTests.cs
│ │ ├── Routing/
│ │ │ ├── HeaderMatcherPolicyTests.cs
│ │ │ ├── ProxyEndpointFactoryTests.cs
│ │ │ ├── QueryMatcherPolicyTests.cs
│ │ │ ├── ReverseProxyConventionBuilderTests.cs
│ │ │ └── RoutingTests.cs
│ │ ├── SessionAffinity/
│ │ │ ├── AffinitizeTransformProviderTests.cs
│ │ │ ├── AffinitizeTransformTests.cs
│ │ │ ├── AffinityTestHelper.cs
│ │ │ ├── ArrCookieSessionAffinityPolicyTests.cs
│ │ │ ├── BaseSessionAffinityPolicyTests.cs
│ │ │ ├── CookieSessionAffinityPolicyTests.cs
│ │ │ ├── CustomHeaderSessionAffinityPolicyTests.cs
│ │ │ ├── HashCookieSessionAffinityPolicyTests.cs
│ │ │ ├── RedistributeAffinityFailurePolicyTests.cs
│ │ │ ├── Return503ErrorAffinityFailurePolicyTests.cs
│ │ │ └── SessionAffinityMiddlewareTests.cs
│ │ ├── Transforms/
│ │ │ ├── Builder/
│ │ │ │ └── TransformBuilderTests.cs
│ │ │ ├── DestinationPrefixTransformTests.cs
│ │ │ ├── ForwardedTransformExtensionsTests.cs
│ │ │ ├── HttpMethodChangeTransformTests.cs
│ │ │ ├── HttpMethodTransformExtensionsTests.cs
│ │ │ ├── PathRouteValuesTransformTests.cs
│ │ │ ├── PathStringTransformTests.cs
│ │ │ ├── PathTransformExtensionsTests.cs
│ │ │ ├── QueryParameterFromRouteTransformTests.cs
│ │ │ ├── QueryParameterFromStaticTransformTests.cs
│ │ │ ├── QueryParameterRemoveTransformTests.cs
│ │ │ ├── QueryTransformContextTests.cs
│ │ │ ├── QueryTransformExtensionsTests.cs
│ │ │ ├── RequestHeaderClientCertTransformTests.cs
│ │ │ ├── RequestHeaderForwardedTransformTests.cs
│ │ │ ├── RequestHeaderRemoveTransformTests.cs
│ │ │ ├── RequestHeaderRouteValueTransformTests.cs
│ │ │ ├── RequestHeaderValueTransformTests.cs
│ │ │ ├── RequestHeaderXForwardedForTransformTests.cs
│ │ │ ├── RequestHeaderXForwardedHostTransformTests.cs
│ │ │ ├── RequestHeaderXForwardedPrefixTransformTests.cs
│ │ │ ├── RequestHeaderXForwardedProtoTransformTests.cs
│ │ │ ├── RequestHeadersAllowedTransformTests.cs
│ │ │ ├── RequestHeadersTransformExtensionsTests.cs
│ │ │ ├── RequestTransformTests.cs
│ │ │ ├── ResponseHeaderRemoveTransformTests.cs
│ │ │ ├── ResponseHeaderValueTransformTests.cs
│ │ │ ├── ResponseHeadersAllowedTransformTests.cs
│ │ │ ├── ResponseTrailerRemoveTransformTests.cs
│ │ │ ├── ResponseTrailerValueTransformTests.cs
│ │ │ ├── ResponseTrailersAllowedTransformTests.cs
│ │ │ ├── ResponseTrailersTransformTests.cs
│ │ │ ├── ResponseTransformExtensionsTests.cs
│ │ │ ├── ResponseTransformTests.cs
│ │ │ ├── TransformBuilderContextFuncExtensionsTests.cs
│ │ │ └── TransformExtensionsTestsBase.cs
│ │ ├── Utilities/
│ │ │ ├── ActivityCancellationTokenSourceTests.cs
│ │ │ ├── AtomicCounterTests.cs
│ │ │ ├── CaseInsensitiveEqualHelperTests.cs
│ │ │ ├── RandomFactoryTests.cs
│ │ │ └── TlsFrameHelperTests.cs
│ │ ├── WebSocketsTelemetry/
│ │ │ └── WebSocketsParserTests.cs
│ │ ├── Yarp.ReverseProxy.Tests.csproj
│ │ └── validSelfSignedClientEkuCertificate.cer
│ ├── TestCertificates/
│ │ └── testCert.pfx
│ └── Tests.Common/
│ ├── TestAutoMockBase.cs
│ ├── TestLogger.cs
│ ├── TestLoggerProvider.cs
│ ├── TestRandom.cs
│ ├── TestRandomFactory.cs
│ ├── TestTimeProvider.cs
│ ├── XunitLoggerFactoryExtensions.cs
│ ├── XunitLoggerProvider.cs
│ └── Yarp.Tests.Common.csproj
├── test.cmd
├── test.sh
└── testassets/
├── BenchmarkApp/
│ ├── BenchmarkApp.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── README.md
│ ├── appsettings.json
│ └── testCert.pfx
├── Directory.Build.props
├── ReverseProxy.Code/
│ ├── Controllers/
│ │ └── HealthController.cs
│ ├── ForwarderMetricsConsumer.cs
│ ├── ForwarderTelemetryConsumer.cs
│ ├── MyTransformFactory.cs
│ ├── MyTransformProvider.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── ReverseProxy.Code.csproj
│ ├── TokenService.cs
│ ├── appsettings.Development.json
│ └── appsettings.json
├── ReverseProxy.Config/
│ ├── Controllers/
│ │ └── HealthController.cs
│ ├── CustomConfigFilter.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── ReverseProxy.Config.csproj
│ ├── appsettings.Development.json
│ └── appsettings.json
├── ReverseProxy.Direct/
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── ReverseProxy.Direct.csproj
│ ├── TlsFilter.cs
│ ├── appsettings.Development.json
│ └── appsettings.json
├── TestClient/
│ ├── CommandLineArgs.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── launchSettings.json
│ ├── Scenarios/
│ │ ├── Http1Scenario.cs
│ │ ├── Http2PostExpectContinueScenario.cs
│ │ ├── Http2Scenario.cs
│ │ ├── IScenario.cs
│ │ ├── RawUpgradeScenario.cs
│ │ ├── SessionAffinityScenario.cs
│ │ └── WebSocketsScenario.cs
│ └── TestClient.csproj
└── TestServer/
├── AssemblyInfo.cs
├── Controllers/
│ ├── HealthController.cs
│ ├── HttpController.cs
│ ├── UpgradeController.cs
│ └── WebSocketsController.cs
├── Program.cs
├── Properties/
│ └── launchSettings.json
├── TestServer.csproj
├── appsettings.Development.json
└── appsettings.json
Showing preview only (326K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3075 symbols across 560 files)
FILE: eng/common/cross/install-debs.py
function download_file (line 19) | async def download_file(session, url, dest_path, max_retries=3, retry_de...
function download_deb_files_parallel (line 42) | async def download_deb_files_parallel(mirror, packages, tmp_dir):
function download_package_index_parallel (line 58) | async def download_package_index_parallel(mirror, arch, suites):
function fetch_and_decompress (line 80) | async def fetch_and_decompress(session, url):
function parse_debian_version (line 95) | def parse_debian_version(version):
function compare_upstream_version (line 103) | def compare_upstream_version(v1, v2):
function compare_debian_versions (line 121) | def compare_debian_versions(version1, version2):
function resolve_dependencies (line 135) | def resolve_dependencies(packages, aliases, desired_packages):
function parse_package_index (line 160) | def parse_package_index(content):
function install_packages (line 196) | def install_packages(mirror, packages_info, aliases, tmp_dir, extract_di...
function extract_deb_file (line 230) | def extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool):
function finalize_setup (line 273) | def finalize_setup(rootfsdir):
FILE: samples/KubernetesIngress.Sample/backend/Program.cs
class BackendInfo (line 29) | internal sealed class BackendInfo
FILE: samples/Prometheus/ReverseProxy.Metrics-Prometheus.Sample/PrometheusDnsMetrics.cs
class PrometheusDnsMetrics (line 9) | public sealed class PrometheusDnsMetrics : IMetricsConsumer<NameResoluti...
method OnMetrics (line 21) | public void OnMetrics(NameResolutionMetrics previous, NameResolutionMe...
FILE: samples/Prometheus/ReverseProxy.Metrics-Prometheus.Sample/PrometheusForwarderMetrics.cs
class PrometheusForwarderMetrics (line 9) | public sealed class PrometheusForwarderMetrics : IMetricsConsumer<Forwar...
method OnMetrics (line 26) | public void OnMetrics(ForwarderMetrics previous, ForwarderMetrics curr...
FILE: samples/Prometheus/ReverseProxy.Metrics-Prometheus.Sample/PrometheusKestrelMetrics.cs
class PrometheusKestrelMetrics (line 9) | public sealed class PrometheusKestrelMetrics : IMetricsConsumer<KestrelM...
method OnMetrics (line 46) | public void OnMetrics(KestrelMetrics previous, KestrelMetrics current)
FILE: samples/Prometheus/ReverseProxy.Metrics-Prometheus.Sample/PrometheusOutboundHttpMetrics.cs
class PrometheusOutboundHttpMetrics (line 13) | public sealed class PrometheusOutboundHttpMetrics : IMetricsConsumer<Htt...
method OnMetrics (line 58) | public void OnMetrics(HttpMetrics previous, HttpMetrics current)
FILE: samples/Prometheus/ReverseProxy.Metrics-Prometheus.Sample/PrometheusServiceExtensions.cs
class PrometheusServiceExtensions (line 9) | public static class PrometheusServiceExtensions
method AddPrometheusForwarderMetrics (line 11) | public static IServiceCollection AddPrometheusForwarderMetrics(this IS...
method AddPrometheusDnsMetrics (line 18) | public static IServiceCollection AddPrometheusDnsMetrics(this IService...
method AddPrometheusKestrelMetrics (line 25) | public static IServiceCollection AddPrometheusKestrelMetrics(this ISer...
method AddPrometheusOutboundHttpMetrics (line 32) | public static IServiceCollection AddPrometheusOutboundHttpMetrics(this...
method AddPrometheusSocketsMetrics (line 39) | public static IServiceCollection AddPrometheusSocketsMetrics(this ISer...
method AddAllPrometheusMetrics (line 46) | public static IServiceCollection AddAllPrometheusMetrics(this IService...
FILE: samples/Prometheus/ReverseProxy.Metrics-Prometheus.Sample/PrometheusSocketMetrics.cs
class PrometheusSocketMetrics (line 9) | public sealed class PrometheusSocketMetrics : IMetricsConsumer<SocketsMe...
method OnMetrics (line 41) | public void OnMetrics(SocketsMetrics previous, SocketsMetrics current)
FILE: samples/ReverseProxy.Auth.Sample/Controllers/AccountController.cs
class AccountController (line 12) | [AllowAnonymous]
method Login (line 16) | [HttpGet]
method Login (line 25) | [HttpPost]
method Logout (line 43) | [HttpPost]
method LoggedOut (line 52) | [HttpGet]
method AccessDenied (line 58) | [HttpGet]
FILE: samples/ReverseProxy.Auth.Sample/TokenService.cs
class TokenService (line 10) | internal sealed class TokenService
method GetAuthTokenAsync (line 12) | internal Task<string> GetAuthTokenAsync(ClaimsPrincipal user)
FILE: samples/ReverseProxy.ConfigFilter.Sample/CustomConfigFilter.cs
class CustomConfigFilter (line 13) | public class CustomConfigFilter : IProxyConfigFilter
method ConfigureClusterAsync (line 24) | public ValueTask<ClusterConfig> ConfigureClusterAsync(ClusterConfig or...
method ConfigureRouteAsync (line 55) | public ValueTask<RouteConfig> ConfigureRouteAsync(RouteConfig route, C...
FILE: samples/ReverseProxy.Direct.Sample/Program.cs
class CustomTransformer (line 80) | internal sealed class CustomTransformer : HttpTransformer
method TransformRequestAsync (line 94) | public override async ValueTask TransformRequestAsync(HttpContext http...
FILE: samples/ReverseProxy.Metrics.Sample/ForwarderMetricsConsumer.cs
class ForwarderMetricsConsumer (line 9) | public sealed class ForwarderMetricsConsumer : IMetricsConsumer<Forwarde...
method OnMetrics (line 11) | public void OnMetrics(ForwarderMetrics previous, ForwarderMetrics curr...
FILE: samples/ReverseProxy.Metrics.Sample/ForwarderTelemetryConsumer.cs
class ForwarderTelemetryConsumer (line 10) | public sealed class ForwarderTelemetryConsumer : IForwarderTelemetryCons...
method OnForwarderStart (line 12) | public void OnForwarderStart(DateTime timestamp, string destinationPre...
method OnForwarderStop (line 18) | public void OnForwarderStop(DateTime timestamp, int statusCode)
method OnForwarderFailed (line 24) | public void OnForwarderFailed(DateTime timestamp, ForwarderError error)
method OnContentTransferred (line 30) | public void OnContentTransferred(DateTime timestamp, bool isRequest, l...
method OnForwarderInvoke (line 49) | public void OnForwarderInvoke(DateTime timestamp, string clusterId, st...
FILE: samples/ReverseProxy.Metrics.Sample/HttpClientTelemetryConsumer.cs
class HttpClientTelemetryConsumer (line 10) | public sealed class HttpClientTelemetryConsumer : IHttpTelemetryConsumer
method OnRequestStart (line 12) | public void OnRequestStart(DateTime timestamp, string scheme, string h...
method OnRequestStop (line 18) | public void OnRequestStop(DateTime timestamp)
method OnConnectionEstablished (line 24) | public void OnConnectionEstablished(DateTime timestamp, int versionMaj...
method OnRequestLeftQueue (line 30) | public void OnRequestLeftQueue(DateTime timestamp, TimeSpan timeOnQueu...
method OnRequestHeadersStart (line 36) | public void OnRequestHeadersStart(DateTime timestamp)
method OnRequestHeadersStop (line 42) | public void OnRequestHeadersStop(DateTime timestamp)
method OnRequestContentStart (line 48) | public void OnRequestContentStart(DateTime timestamp)
method OnRequestContentStop (line 54) | public void OnRequestContentStop(DateTime timestamp, long contentLength)
method OnResponseHeadersStart (line 60) | public void OnResponseHeadersStart(DateTime timestamp)
method OnResponseHeadersStop (line 66) | public void OnResponseHeadersStop(DateTime timestamp)
FILE: samples/ReverseProxy.Metrics.Sample/PerRequestMetrics.cs
class PerRequestMetrics (line 11) | public class PerRequestMetrics
method PerRequestMetrics (line 17) | private PerRequestMetrics() { }
method ToJson (line 56) | public string ToJson()
method CalcOffset (line 61) | public float CalcOffset(DateTime timestamp)
FILE: samples/ReverseProxy.Metrics.Sample/PerRequestYarpMetricCollectionMiddleware.cs
class PerRequestYarpMetricCollectionMiddleware (line 15) | public class PerRequestYarpMetricCollectionMiddleware
method PerRequestYarpMetricCollectionMiddleware (line 22) | public PerRequestYarpMetricCollectionMiddleware(RequestDelegate next, ...
method InvokeAsync (line 31) | public async Task InvokeAsync(HttpContext context)
class YarpMetricCollectionMiddlewareHelper (line 49) | public static class YarpMetricCollectionMiddlewareHelper
method UsePerRequestMetricCollection (line 51) | public static IApplicationBuilder UsePerRequestMetricCollection(
FILE: samples/ReverseProxy.Metrics.Sample/WebSocketsTelemetryConsumer.cs
class WebSocketsTelemetryConsumer (line 10) | public sealed class WebSocketsTelemetryConsumer : IWebSocketsTelemetryCo...
method WebSocketsTelemetryConsumer (line 14) | public WebSocketsTelemetryConsumer(ILogger<WebSocketsTelemetryConsumer...
method OnWebSocketClosed (line 20) | public void OnWebSocketClosed(DateTime timestamp, DateTime established...
FILE: samples/ReverseProxy.Transforms.Sample/MyTransformFactory.cs
class MyTransformFactory (line 12) | internal sealed class MyTransformFactory : ITransformFactory
method Validate (line 14) | public bool Validate(TransformRouteValidationContext context, IReadOnl...
method Build (line 28) | public bool Build(TransformBuilderContext context, IReadOnlyDictionary...
FILE: samples/ReverseProxy.Transforms.Sample/MyTransformProvider.cs
class MyTransformProvider (line 11) | internal sealed class MyTransformProvider : ITransformProvider
method ValidateRoute (line 13) | public void ValidateRoute(TransformRouteValidationContext context)
method ValidateCluster (line 25) | public void ValidateCluster(TransformClusterValidationContext context)
method Apply (line 37) | public void Apply(TransformBuilderContext transformBuildContext)
FILE: samples/ReverseProxy.Transforms.Sample/TokenService.cs
class TokenService (line 9) | internal sealed class TokenService
method GetAuthTokenAsync (line 11) | internal Task<string> GetAuthTokenAsync(ClaimsPrincipal user)
FILE: samples/SampleServer/Controllers/HealthController.cs
class HealthController (line 11) | [ApiController]
method CheckHealth (line 18) | [HttpGet]
FILE: samples/SampleServer/Controllers/HttpController.cs
class HttpController (line 16) | [ApiController]
method NoOp (line 22) | [HttpGet]
method Dump (line 31) | [HttpGet, HttpPost]
method Status (line 55) | [HttpGet]
method Headers (line 65) | [HttpGet]
FILE: samples/SampleServer/Controllers/WebSocketsController.cs
class WebSocketsController (line 17) | [ApiController]
method WebSocketsController (line 25) | public WebSocketsController(ILogger<WebSocketsController> logger)
method WebSockets (line 33) | [HttpGet]
method RunPingPongAsync (line 53) | private static async Task RunPingPongAsync(WebSocket webSocket, Cancel...
FILE: src/Application/Extensions.cs
class Extensions (line 21) | public static class Extensions
method AddServiceDefaults (line 23) | public static TBuilder AddServiceDefaults<TBuilder>(this TBuilder buil...
method ConfigureOpenTelemetry (line 34) | public static TBuilder ConfigureOpenTelemetry<TBuilder>(this TBuilder ...
method AddDefaultHealthChecks (line 87) | public static TBuilder AddDefaultHealthChecks<TBuilder>(this TBuilder ...
FILE: src/Kubernetes.Controller/Caching/Endpoints.cs
type Endpoints (line 13) | public struct Endpoints
method Endpoints (line 15) | public Endpoints(V1Endpoints endpoints)
FILE: src/Kubernetes.Controller/Caching/ICache.cs
type ICache (line 16) | public interface ICache
method Update (line 18) | void Update(WatchEventType eventType, V1IngressClass ingressClass);
method Update (line 19) | bool Update(WatchEventType eventType, V1Ingress ingress);
method Update (line 20) | ImmutableList<string> Update(WatchEventType eventType, V1Service servi...
method Update (line 21) | ImmutableList<string> Update(WatchEventType eventType, V1Endpoints end...
method Update (line 22) | void Update(WatchEventType eventType, V1Secret secret);
method TryGetReconcileData (line 23) | bool TryGetReconcileData(NamespacedName key, out ReconcileData data);
method GetKeys (line 24) | void GetKeys(List<NamespacedName> keys);
method GetIngresses (line 25) | IEnumerable<IngressData> GetIngresses();
FILE: src/Kubernetes.Controller/Caching/IngressCache.cs
class IngressCache (line 21) | public class IngressCache : ICache
method IngressCache (line 33) | public IngressCache(IOptions<YarpOptions> options, IServerCertificateS...
method Update (line 46) | public void Update(WatchEventType eventType, V1IngressClass ingressClass)
method Update (line 75) | public bool Update(WatchEventType eventType, V1Ingress ingress)
method Update (line 83) | public ImmutableList<string> Update(WatchEventType eventType, V1Servic...
method Update (line 90) | public ImmutableList<string> Update(WatchEventType eventType, V1Endpoi...
method Update (line 95) | public void Update(WatchEventType eventType, V1Secret secret)
method TryGetReconcileData (line 123) | public bool TryGetReconcileData(NamespacedName key, out ReconcileData ...
method GetKeys (line 128) | public void GetKeys(List<NamespacedName> keys)
method GetIngresses (line 139) | public IEnumerable<IngressData> GetIngresses()
method IsYarpIngress (line 154) | private bool IsYarpIngress(IngressData ingress)
method Namespace (line 167) | private NamespaceCache Namespace(string key)
FILE: src/Kubernetes.Controller/Caching/IngressClassData.cs
type IngressClassData (line 12) | public struct IngressClassData
method IngressClassData (line 14) | public IngressClassData(V1IngressClass ingressClass)
method GetDefaultAnnotation (line 26) | private static bool GetDefaultAnnotation(V1IngressClass ingressClass)
FILE: src/Kubernetes.Controller/Caching/IngressData.cs
type IngressData (line 12) | public struct IngressData
method IngressData (line 14) | public IngressData(V1Ingress ingress)
FILE: src/Kubernetes.Controller/Caching/NamespaceCache.cs
class NamespaceCache (line 18) | public class NamespaceCache
method Update (line 27) | public void Update(WatchEventType eventType, V1Ingress ingress)
method Update (line 119) | public ImmutableList<string> Update(WatchEventType eventType, V1Servic...
method GetKeys (line 146) | public void GetKeys(string ns, List<NamespacedName> keys)
method Update (line 159) | public ImmutableList<string> Update(WatchEventType eventType, V1Endpoi...
method GetIngresses (line 186) | public IEnumerable<IngressData> GetIngresses()
method IngressExists (line 191) | public bool IngressExists(V1Ingress ingress)
method TryLookup (line 196) | public bool TryLookup(NamespacedName key, out ReconcileData data)
FILE: src/Kubernetes.Controller/Caching/ServiceData.cs
type ServiceData (line 12) | public struct ServiceData
method ServiceData (line 14) | public ServiceData(V1Service service)
FILE: src/Kubernetes.Controller/Certificates/CertificateHelper.cs
class CertificateHelper (line 13) | public class CertificateHelper : ICertificateHelper
method CertificateHelper (line 20) | public CertificateHelper(ILogger<CertificateHelper> logger)
method ConvertCertificate (line 26) | public X509Certificate2 ConvertCertificate(NamespacedName namespacedNa...
method EnsurePemFormat (line 68) | private static string EnsurePemFormat(byte[] data, string pemType)
FILE: src/Kubernetes.Controller/Certificates/ICertificateHelper.cs
type ICertificateHelper (line 9) | public interface ICertificateHelper
method ConvertCertificate (line 11) | X509Certificate2 ConvertCertificate(NamespacedName namespacedName, V1S...
FILE: src/Kubernetes.Controller/Certificates/IServerCertificateSelector.cs
type IServerCertificateSelector (line 12) | public interface IServerCertificateSelector
method GetCertificate (line 20) | X509Certificate2 GetCertificate(ConnectionContext connectionContext, s...
method AddCertificate (line 27) | void AddCertificate(NamespacedName certificateName, X509Certificate2 c...
method RemoveCertificate (line 33) | void RemoveCertificate(NamespacedName certificateName);
FILE: src/Kubernetes.Controller/Certificates/ServerCertificateSelector.cs
class ServerCertificateSelector (line 9) | internal class ServerCertificateSelector : IServerCertificateSelector
method AddCertificate (line 13) | public void AddCertificate(NamespacedName certificateName, X509Certifi...
method GetCertificate (line 18) | public X509Certificate2 GetCertificate(ConnectionContext connectionCon...
method RemoveCertificate (line 23) | public void RemoveCertificate(NamespacedName certificateName)
FILE: src/Kubernetes.Controller/Client/GroupApiVersionKind.cs
type GroupApiVersionKind (line 10) | public struct GroupApiVersionKind : IEquatable<GroupApiVersionKind>
method GroupApiVersionKind (line 12) | public GroupApiVersionKind(string group, string apiVersion, string kind)
method From (line 25) | public static GroupApiVersionKind From<TResource>() => From(typeof(TRe...
method From (line 27) | public static GroupApiVersionKind From(Type resourceType)
method Equals (line 37) | public override bool Equals(object obj)
method Equals (line 42) | public bool Equals(GroupApiVersionKind other)
method GetHashCode (line 48) | public override int GetHashCode()
method ToString (line 53) | public override string ToString()
FILE: src/Kubernetes.Controller/Client/IIngressResourceStatusUpdater.cs
type IIngressResourceStatusUpdater (line 9) | public interface IIngressResourceStatusUpdater
method UpdateStatusAsync (line 14) | Task UpdateStatusAsync(CancellationToken cancellationToken);
FILE: src/Kubernetes.Controller/Client/IResourceInformer.cs
type IResourceInformer (line 31) | public interface IResourceInformer<TResource> : IHostedService, IResourc...
method Register (line 41) | IResourceInformerRegistration Register(ResourceInformerCallback<TResou...
method StartWatching (line 49) | void StartWatching();
method ReadyAsync (line 58) | Task ReadyAsync(CancellationToken cancellationToken);
method Register (line 67) | IResourceInformerRegistration Register(ResourceInformerCallback<IKuber...
type IResourceInformer (line 44) | public interface IResourceInformer
method Register (line 41) | IResourceInformerRegistration Register(ResourceInformerCallback<TResou...
method StartWatching (line 49) | void StartWatching();
method ReadyAsync (line 58) | Task ReadyAsync(CancellationToken cancellationToken);
method Register (line 67) | IResourceInformerRegistration Register(ResourceInformerCallback<IKuber...
FILE: src/Kubernetes.Controller/Client/IResourceInformerRegistration.cs
type IResourceInformerRegistration (line 14) | public interface IResourceInformerRegistration : IDisposable
method ReadyAsync (line 23) | Task ReadyAsync(CancellationToken cancellationToken);
FILE: src/Kubernetes.Controller/Client/KubernetesClientOptions.cs
class KubernetesClientOptions (line 11) | public class KubernetesClientOptions
FILE: src/Kubernetes.Controller/Client/ResourceInformer.cs
class ResourceInformer (line 30) | public abstract class ResourceInformer<TResource, TListResource> : Backg...
method ResourceInformer (line 50) | public ResourceInformer(
type EventType (line 65) | private enum EventType
method Dispose (line 80) | protected override void Dispose(bool disposing)
method StartWatching (line 97) | public void StartWatching()
method Register (line 102) | public virtual IResourceInformerRegistration Register(ResourceInformer...
method Register (line 107) | public IResourceInformerRegistration Register(ResourceInformerCallback...
method ReadyAsync (line 113) | public virtual async Task ReadyAsync(CancellationToken cancellationToken)
method RunAsync (line 128) | public override async Task RunAsync(CancellationToken cancellationToken)
method RetrieveResourceListAsync (line 199) | protected abstract Task<HttpOperationResponse<TListResource>> Retrieve...
method WatchResourceListAsync (line 200) | protected abstract Watcher<TResource> WatchResourceListAsync(string re...
method EventId (line 202) | private static EventId EventId(EventType eventType) => new EventId((in...
method ListAsync (line 204) | private async Task ListAsync(CancellationToken cancellationToken)
method WatchAsync (line 285) | private async Task WatchAsync(CancellationToken cancellationToken)
method OnEvent (line 364) | private void OnEvent(WatchEventType watchEventType, TResource item)
method InvokeRegistrationCallbacks (line 407) | private void InvokeRegistrationCallbacks(WatchEventType eventType, TRe...
class Registration (line 430) | internal class Registration : IResourceInformerRegistration
method Registration (line 434) | public Registration(ResourceInformer<TResource, TListResource> resou...
method ReadyAsync (line 453) | public Task ReadyAsync(CancellationToken cancellationToken) => Resou...
method Dispose (line 455) | protected virtual void Dispose(bool disposing)
method Dispose (line 467) | public void Dispose()
FILE: src/Kubernetes.Controller/Client/ResourceSelector.cs
class ResourceSelector (line 12) | public class ResourceSelector<TResource>
method ResourceSelector (line 15) | public ResourceSelector(string fieldSelector)
FILE: src/Kubernetes.Controller/Client/V1EndpointsResourceInformer.cs
class V1EndpointsResourceInformer (line 15) | internal class V1EndpointsResourceInformer : ResourceInformer<V1Endpoint...
method V1EndpointsResourceInformer (line 17) | public V1EndpointsResourceInformer(
method RetrieveResourceListAsync (line 26) | protected override Task<HttpOperationResponse<V1EndpointsList>> Retrie...
method WatchResourceListAsync (line 31) | protected override Watcher<V1Endpoints> WatchResourceListAsync(string ...
FILE: src/Kubernetes.Controller/Client/V1IngressClassResourceInformer.cs
class V1IngressClassResourceInformer (line 15) | internal class V1IngressClassResourceInformer : ResourceInformer<V1Ingre...
method V1IngressClassResourceInformer (line 17) | public V1IngressClassResourceInformer(
method RetrieveResourceListAsync (line 26) | protected override Task<HttpOperationResponse<V1IngressClassList>> Ret...
method WatchResourceListAsync (line 31) | protected override Watcher<V1IngressClass> WatchResourceListAsync(stri...
FILE: src/Kubernetes.Controller/Client/V1IngressResourceInformer.cs
class V1IngressResourceInformer (line 15) | internal class V1IngressResourceInformer : ResourceInformer<V1Ingress, V...
method V1IngressResourceInformer (line 17) | public V1IngressResourceInformer(
method RetrieveResourceListAsync (line 26) | protected override Task<HttpOperationResponse<V1IngressList>> Retrieve...
method WatchResourceListAsync (line 31) | protected override Watcher<V1Ingress> WatchResourceListAsync(string re...
FILE: src/Kubernetes.Controller/Client/V1IngressResourceStatusUpdater.cs
class V1IngressResourceStatusUpdater (line 15) | internal sealed class V1IngressResourceStatusUpdater : IIngressResourceS...
method V1IngressResourceStatusUpdater (line 22) | public V1IngressResourceStatusUpdater(
method UpdateStatusAsync (line 35) | public async Task UpdateStatusAsync(CancellationToken cancellationToken)
FILE: src/Kubernetes.Controller/Client/V1SecretResourceInformer.cs
class V1SecretResourceInformer (line 15) | internal class V1SecretResourceInformer : ResourceInformer<V1Secret, V1S...
method V1SecretResourceInformer (line 17) | public V1SecretResourceInformer(
method RetrieveResourceListAsync (line 26) | protected override Task<HttpOperationResponse<V1SecretList>> RetrieveR...
method WatchResourceListAsync (line 31) | protected override Watcher<V1Secret> WatchResourceListAsync(string res...
FILE: src/Kubernetes.Controller/Client/V1ServiceResourceInformer.cs
class V1ServiceResourceInformer (line 15) | internal class V1ServiceResourceInformer : ResourceInformer<V1Service, V...
method V1ServiceResourceInformer (line 17) | public V1ServiceResourceInformer(
method RetrieveResourceListAsync (line 26) | protected override Task<HttpOperationResponse<V1ServiceList>> Retrieve...
method WatchResourceListAsync (line 31) | protected override Watcher<V1Service> WatchResourceListAsync(string re...
FILE: src/Kubernetes.Controller/ConfigProvider/IUpdateConfig.cs
type IUpdateConfig (line 11) | public interface IUpdateConfig
method UpdateAsync (line 13) | Task UpdateAsync(IReadOnlyList<RouteConfig> routes, IReadOnlyList<Clus...
FILE: src/Kubernetes.Controller/ConfigProvider/KubernetesConfigProvider.cs
class KubernetesConfigProvider (line 13) | internal class KubernetesConfigProvider : IProxyConfigProvider, IUpdateC...
method KubernetesConfigProvider (line 17) | public KubernetesConfigProvider()
method GetConfig (line 22) | public IProxyConfig GetConfig() => _config;
method UpdateAsync (line 24) | public Task UpdateAsync(IReadOnlyList<RouteConfig> routes, IReadOnlyLi...
class MessageConfig (line 33) | private class MessageConfig : IProxyConfig
method MessageConfig (line 37) | public MessageConfig(IReadOnlyList<RouteConfig> routes, IReadOnlyLis...
method MessageConfig (line 41) | public MessageConfig(IReadOnlyList<RouteConfig> routes, IReadOnlyLis...
method SignalChange (line 58) | internal void SignalChange()
FILE: src/Kubernetes.Controller/Converters/ClusterTransfer.cs
class ClusterTransfer (line 10) | internal sealed class ClusterTransfer
FILE: src/Kubernetes.Controller/Converters/YarpConfigContext.cs
class YarpConfigContext (line 10) | internal class YarpConfigContext
method BuildClusterConfig (line 15) | public List<ClusterConfig> BuildClusterConfig()
FILE: src/Kubernetes.Controller/Converters/YarpIngressContext.cs
class YarpIngressContext (line 9) | internal sealed class YarpIngressContext
method YarpIngressContext (line 11) | public YarpIngressContext(IngressData ingress, List<ServiceData> servi...
FILE: src/Kubernetes.Controller/Converters/YarpIngressOptions.cs
class YarpIngressOptions (line 11) | internal sealed class YarpIngressOptions
class RouteHeaderWrapper (line 33) | internal sealed class RouteHeaderWrapper
method ToRouteHeader (line 40) | public RouteHeader ToRouteHeader()
class RouteQueryParameterWrapper (line 52) | internal sealed class RouteQueryParameterWrapper
method ToRouteQueryParameter (line 59) | public RouteQueryParameter ToRouteQueryParameter()
FILE: src/Kubernetes.Controller/Converters/YarpParser.cs
class YarpParser (line 17) | internal static class YarpParser
method ConvertFromKubernetesIngress (line 22) | internal static void ConvertFromKubernetesIngress(YarpIngressContext i...
method HandleIngressRule (line 43) | private static void HandleIngressRule(YarpIngressContext ingressContex...
method HandleExternalIngressRulePath (line 67) | private static void HandleExternalIngressRulePath(YarpIngressContext i...
method HandleIngressRulePath (line 82) | private static void HandleIngressRulePath(YarpIngressContext ingressCo...
method AddDestination (line 124) | private static void AddDestination(ClusterTransfer cluster, YarpIngres...
method CreateRoute (line 144) | private static RouteConfig CreateRoute(YarpIngressContext ingressConte...
method GetOrAddCluster (line 170) | private static ClusterTransfer GetOrAddCluster(YarpIngressContext ingr...
method UpstreamName (line 185) | private static string UpstreamName(string namespaceName, V1IngressServ...
method FixupPathMatch (line 203) | private static string FixupPathMatch(V1HTTPIngressPath path)
method HandleAnnotations (line 222) | private static YarpIngressOptions HandleAnnotations(YarpIngressContext...
method MatchesPort (line 320) | private static bool MatchesPort(Corev1EndpointPort port1, V1ServicePor...
method MatchesPort (line 337) | private static bool MatchesPort(V1ServicePort port1, V1ServiceBackendP...
FILE: src/Kubernetes.Controller/Hosting/BackgroundHostedService.cs
class BackgroundHostedService (line 20) | public abstract class BackgroundHostedService : IHostedService, IDisposable
method BackgroundHostedService (line 34) | protected BackgroundHostedService(
method StartAsync (line 69) | public Task StartAsync(CancellationToken cancellationToken)
method StopAsync (line 129) | public async Task StopAsync(CancellationToken cancellationToken)
method RunAsync (line 158) | public abstract Task RunAsync(CancellationToken cancellationToken);
method Dispose (line 160) | protected virtual void Dispose(bool disposing)
method Dispose (line 189) | public void Dispose()
FILE: src/Kubernetes.Controller/Hosting/HostedServiceAdapter.cs
class HostedServiceAdapter (line 14) | public class HostedServiceAdapter<TService> : IHostedService
method HostedServiceAdapter (line 23) | public HostedServiceAdapter(TService service) => _service = service;
method StartAsync (line 25) | public Task StartAsync(CancellationToken cancellationToken) => _servic...
method StopAsync (line 27) | public Task StopAsync(CancellationToken cancellationToken) => _service...
FILE: src/Kubernetes.Controller/Hosting/ServiceCollectionHostedServiceAdapterExtensions.cs
class ServiceCollectionHostedServiceAdapterExtensions (line 13) | public static class ServiceCollectionHostedServiceAdapterExtensions
method RegisterHostedService (line 21) | public static IServiceCollection RegisterHostedService<TService>(this ...
FILE: src/Kubernetes.Controller/Management/KubernetesCoreExtensions.cs
class KubernetesCoreExtensions (line 14) | public static class KubernetesCoreExtensions
method AddKubernetesCore (line 21) | public static IServiceCollection AddKubernetesCore(this IServiceCollec...
FILE: src/Kubernetes.Controller/Management/KubernetesReverseProxyServiceCollectionExtensions.cs
class KubernetesReverseProxyServiceCollectionExtensions (line 26) | public static class KubernetesReverseProxyServiceCollectionExtensions
method AddKubernetesReverseProxy (line 34) | public static IReverseProxyBuilder AddKubernetesReverseProxy(this ISer...
method AddKubernetesIngressMonitor (line 53) | public static IServiceCollection AddKubernetesIngressMonitor(this ISer...
method AddKubernetesDispatchController (line 70) | public static IMvcBuilder AddKubernetesDispatchController(this IMvcBui...
method AddKubernetesControllerRuntime (line 75) | public static IServiceCollection AddKubernetesControllerRuntime(this I...
method RegisterResourceInformer (line 111) | public static IServiceCollection RegisterResourceInformer<TResource, T...
method RegisterResourceInformer (line 126) | public static IServiceCollection RegisterResourceInformer<TResource, [...
FILE: src/Kubernetes.Controller/Management/KubernetesReverseProxyWebHostBuilderExtensions.cs
class KubernetesReverseProxyWebHostBuilderExtensions (line 14) | public static class KubernetesReverseProxyWebHostBuilderExtensions
method UseKubernetesReverseProxyCertificateSelector (line 21) | public static IWebHostBuilder UseKubernetesReverseProxyCertificateSele...
FILE: src/Kubernetes.Controller/NamespacedName.cs
type NamespacedName (line 18) | public struct NamespacedName : IEquatable<NamespacedName>
method NamespacedName (line 25) | [JsonConstructor]
method NamespacedName (line 36) | public NamespacedName(string name)
method From (line 81) | public static NamespacedName From(IKubernetesObject<V1ObjectMeta> reso...
method From (line 95) | public static NamespacedName From(V1ObjectMeta metadata, [NotNull] V1O...
method Equals (line 105) | public override bool Equals(object obj)
method Equals (line 110) | public bool Equals([AllowNull] NamespacedName other)
method GetHashCode (line 115) | public override int GetHashCode()
method ToString (line 124) | public override string ToString()
FILE: src/Kubernetes.Controller/Protocol/DispatchActionResult.cs
class DispatchActionResult (line 20) | public class DispatchActionResult : IActionResult, IDispatchTarget
method DispatchActionResult (line 29) | public DispatchActionResult(IDispatcher dispatcher)
method ToString (line 34) | public override string ToString()
method ExecuteResultAsync (line 39) | public async Task ExecuteResultAsync(ActionContext context)
method SendAsync (line 75) | public async Task SendAsync(byte[] bytes, CancellationToken cancellati...
FILE: src/Kubernetes.Controller/Protocol/DispatchConfigProvider.cs
class DispatchConfigProvider (line 17) | public class DispatchConfigProvider : IUpdateConfig
method DispatchConfigProvider (line 21) | public DispatchConfigProvider(IDispatcher dispatcher)
method UpdateAsync (line 27) | public async Task UpdateAsync(IReadOnlyList<RouteConfig> routes, IRead...
FILE: src/Kubernetes.Controller/Protocol/DispatchController.cs
class DispatchController (line 14) | [Route("api/dispatch")]
method DispatchController (line 20) | public DispatchController(IDispatcher dispatcher)
method WatchAsync (line 25) | [HttpGet("/api/dispatch")]
FILE: src/Kubernetes.Controller/Protocol/Dispatcher.cs
class Dispatcher (line 15) | public class Dispatcher : IDispatcher
method Dispatcher (line 22) | public Dispatcher(ILogger<Dispatcher> logger)
method AttachAsync (line 27) | public async Task AttachAsync(IDispatchTarget target, CancellationToke...
method Detach (line 42) | public void Detach(IDispatchTarget target)
method SendAsync (line 52) | public async Task SendAsync(byte[] utf8Bytes, CancellationToken cancel...
FILE: src/Kubernetes.Controller/Protocol/IDispatchTarget.cs
type IDispatchTarget (line 13) | public interface IDispatchTarget
method SendAsync (line 15) | public Task SendAsync(byte[] utf8Bytes, CancellationToken cancellation...
FILE: src/Kubernetes.Controller/Protocol/IDispatcher.cs
type IDispatcher (line 13) | public interface IDispatcher
method AttachAsync (line 15) | Task AttachAsync(IDispatchTarget target, CancellationToken cancellatio...
method Detach (line 16) | void Detach(IDispatchTarget target);
method SendAsync (line 17) | Task SendAsync(byte[] utf8Bytes, CancellationToken cancellationToken);
FILE: src/Kubernetes.Controller/Protocol/Message.cs
type MessageType (line 10) | public enum MessageType
type Message (line 17) | public struct Message
FILE: src/Kubernetes.Controller/Protocol/MessageConfigProviderExtensions.cs
class MessageConfigProviderExtensions (line 11) | public static class MessageConfigProviderExtensions
method LoadFromMessages (line 13) | public static IReverseProxyBuilder LoadFromMessages(this IReverseProxy...
FILE: src/Kubernetes.Controller/Protocol/Receiver.cs
class Receiver (line 19) | public class Receiver : BackgroundHostedService
method Receiver (line 25) | public Receiver(
method RunAsync (line 45) | public override async Task RunAsync(CancellationToken cancellationToken)
FILE: src/Kubernetes.Controller/Protocol/ReceiverOptions.cs
class ReceiverOptions (line 9) | public class ReceiverOptions
FILE: src/Kubernetes.Controller/Queues/IWorkQueue.cs
type IWorkQueue (line 18) | public interface IWorkQueue<TItem> : IDisposable
method Add (line 24) | void Add(TItem item);
method Len (line 30) | int Len();
method GetAsync (line 37) | Task<(TItem item, bool shutdown)> GetAsync(CancellationToken cancellat...
method Done (line 44) | void Done(TItem item);
method ShutDown (line 49) | void ShutDown();
method ShuttingDown (line 55) | bool ShuttingDown();
FILE: src/Kubernetes.Controller/Queues/ProcessingRateLimitedQueue.cs
class ProcessingRateLimitedQueue (line 10) | public class ProcessingRateLimitedQueue<TItem> : WorkQueue<TItem>
method ProcessingRateLimitedQueue (line 14) | public ProcessingRateLimitedQueue(double perSecond, int burst)
method OnGetAsync (line 19) | protected override async Task OnGetAsync(CancellationToken cancellatio...
FILE: src/Kubernetes.Controller/Queues/WorkQueue.cs
class WorkQueue (line 17) | public class WorkQueue<TItem> : IWorkQueue<TItem>
method Dispose (line 30) | public void Dispose()
method Add (line 41) | public void Add(TItem item)
method GetAsync (line 71) | public async Task<(TItem item, bool shutdown)> GetAsync(CancellationTo...
method Done (line 113) | public void Done(TItem item)
method Len (line 129) | public int Len()
method ShutDown (line 140) | public void ShutDown()
method ShuttingDown (line 153) | public bool ShuttingDown()
method Dispose (line 162) | protected virtual void Dispose(bool disposing)
method OnGetAsync (line 180) | protected virtual Task OnGetAsync(CancellationToken cancellationToken)
FILE: src/Kubernetes.Controller/Rate/Limit.cs
type Limit (line 17) | public struct Limit : IEquatable<Limit>
method Limit (line 25) | public Limit(double perSecond)
method TokensFromDuration (line 65) | public double TokensFromDuration(TimeSpan duration)
method DurationFromTokens (line 79) | public TimeSpan DurationFromTokens(double tokens)
method Equals (line 89) | public override bool Equals(object obj)
method Equals (line 99) | public bool Equals([AllowNull] Limit other)
method GetHashCode (line 108) | public override int GetHashCode()
FILE: src/Kubernetes.Controller/Rate/Limiter.cs
class Limiter (line 40) | public class Limiter
method Limiter (line 66) | public Limiter(Limit limit, int burst, TimeProvider timeProvider = def...
method Allow (line 77) | public bool Allow()
method AllowN (line 89) | public bool AllowN(DateTimeOffset now, int number)
method Reserve (line 98) | public Reservation Reserve()
method Reserve (line 121) | public Reservation Reserve(DateTimeOffset now, int count)
method WaitAsync (line 131) | public Task WaitAsync(CancellationToken cancellationToken)
method WaitAsync (line 143) | public async Task WaitAsync(int count, CancellationToken cancellationT...
method ReserveImpl (line 193) | private Reservation ReserveImpl(DateTimeOffset now, int number, TimeSp...
method Advance (line 261) | private (DateTimeOffset newNow, DateTimeOffset newLast, double newToke...
FILE: src/Kubernetes.Controller/Rate/Reservation.cs
class Reservation (line 15) | public class Reservation
method Reservation (line 31) | public Reservation(
method Delay (line 63) | public TimeSpan Delay()
method DelayFrom (line 73) | public TimeSpan DelayFrom(DateTimeOffset now)
FILE: src/Kubernetes.Controller/Services/IReconciler.cs
type IReconciler (line 13) | public interface IReconciler
method ProcessAsync (line 15) | Task ProcessAsync(CancellationToken cancellationToken);
FILE: src/Kubernetes.Controller/Services/IngressController.cs
class IngressController (line 26) | public class IngressController : BackgroundHostedService
method IngressController (line 36) | public IngressController(
method Dispose (line 99) | protected override void Dispose(bool disposing)
method Notification (line 119) | private void Notification(WatchEventType eventType, V1Ingress resource)
method NotificationIngressChanged (line 127) | private void NotificationIngressChanged()
method Notification (line 142) | private void Notification(WatchEventType eventType, V1Service resource)
method Notification (line 156) | private void Notification(WatchEventType eventType, V1Endpoints resource)
method Notification (line 170) | private void Notification(WatchEventType eventType, V1IngressClass res...
method Notification (line 180) | private void Notification(WatchEventType eventType, V1Secret resource)
method RunAsync (line 191) | public override async Task RunAsync(CancellationToken cancellationToken)
FILE: src/Kubernetes.Controller/Services/QueueItem.cs
type QueueItem (line 11) | public struct QueueItem : IEquatable<QueueItem>
method QueueItem (line 13) | public QueueItem(string change)
method Equals (line 23) | public override bool Equals(object obj)
method Equals (line 28) | public bool Equals(QueueItem other)
method GetHashCode (line 33) | public override int GetHashCode()
FILE: src/Kubernetes.Controller/Services/ReconcileData.cs
type ReconcileData (line 13) | public struct ReconcileData
method ReconcileData (line 15) | public ReconcileData(IngressData ingress, List<ServiceData> services, ...
FILE: src/Kubernetes.Controller/Services/Reconciler.cs
class Reconciler (line 21) | public partial class Reconciler : IReconciler
method Reconciler (line 28) | public Reconciler(ICache cache, IUpdateConfig updateConfig, IIngressRe...
method ProcessAsync (line 40) | public async Task ProcessAsync(CancellationToken cancellationToken)
FILE: src/Kubernetes.Controller/YarpOptions.cs
class YarpOptions (line 6) | public class YarpOptions
FILE: src/ReverseProxy/Configuration/ActiveHealthCheckConfig.cs
type ActiveHealthCheckConfig (line 11) | public sealed record ActiveHealthCheckConfig
FILE: src/ReverseProxy/Configuration/AuthorizationConstants.cs
class AuthorizationConstants (line 6) | internal static class AuthorizationConstants
FILE: src/ReverseProxy/Configuration/ClusterConfig.cs
type ClusterConfig (line 14) | public sealed record ClusterConfig
FILE: src/ReverseProxy/Configuration/ClusterValidators/DestinationValidator.cs
class DestinationValidator (line 10) | internal sealed class DestinationValidator : IClusterValidator
method ValidateAsync (line 12) | public ValueTask ValidateAsync(ClusterConfig cluster, IList<Exception>...
FILE: src/ReverseProxy/Configuration/ClusterValidators/HealthCheckValidator.cs
class HealthCheckValidator (line 13) | internal sealed class HealthCheckValidator : IClusterValidator
method HealthCheckValidator (line 19) | public HealthCheckValidator(IEnumerable<IAvailableDestinationsPolicy> ...
method ValidateAsync (line 32) | public ValueTask ValidateAsync(ClusterConfig cluster, IList<Exception>...
method ValidateActiveHealthCheck (line 52) | private void ValidateActiveHealthCheck(ClusterConfig cluster, IList<Ex...
method ValidatePassiveHealthCheck (line 83) | private void ValidatePassiveHealthCheck(ClusterConfig cluster, IList<E...
FILE: src/ReverseProxy/Configuration/ClusterValidators/IClusterValidator.cs
type IClusterValidator (line 13) | public interface IClusterValidator
method ValidateAsync (line 22) | public ValueTask ValidateAsync(ClusterConfig cluster, IList<Exception>...
FILE: src/ReverseProxy/Configuration/ClusterValidators/LoadBalancingValidator.cs
class LoadBalancingValidator (line 13) | internal sealed class LoadBalancingValidator : IClusterValidator
method LoadBalancingValidator (line 16) | public LoadBalancingValidator(IEnumerable<ILoadBalancingPolicy> loadBa...
method ValidateAsync (line 22) | public ValueTask ValidateAsync(ClusterConfig cluster, IList<Exception>...
FILE: src/ReverseProxy/Configuration/ClusterValidators/ProxyHttpClientValidator.cs
class ProxyHttpClientValidator (line 11) | internal sealed class ProxyHttpClientValidator : IClusterValidator
method ValidateAsync (line 13) | public ValueTask ValidateAsync(ClusterConfig cluster, IList<Exception>...
FILE: src/ReverseProxy/Configuration/ClusterValidators/ProxyHttpRequestValidator.cs
class ProxyHttpRequestValidator (line 12) | internal sealed class ProxyHttpRequestValidator(ILogger<ConfigValidator>...
method ValidateAsync (line 14) | public ValueTask ValidateAsync(ClusterConfig cluster, IList<Exception>...
class Log (line 39) | private static class Log
method Http10Version (line 46) | public static void Http10Version(ILogger logger)
FILE: src/ReverseProxy/Configuration/ClusterValidators/SessionAffinityValidator.cs
class SessionAffinityValidator (line 13) | internal sealed class SessionAffinityValidator : IClusterValidator
method SessionAffinityValidator (line 17) | public SessionAffinityValidator(IEnumerable<IAffinityFailurePolicy> af...
method ValidateAsync (line 23) | public ValueTask ValidateAsync(ClusterConfig cluster, IList<Exception>...
FILE: src/ReverseProxy/Configuration/ConfigProvider/ConfigurationConfigProvider.cs
class ConfigurationConfigProvider (line 24) | internal sealed class ConfigurationConfigProvider : IProxyConfigProvider...
method ConfigurationConfigProvider (line 34) | public ConfigurationConfigProvider(
method Dispose (line 44) | public void Dispose()
method GetConfig (line 54) | public IProxyConfig GetConfig()
method UpdateSnapshot (line 66) | [MemberNotNull(nameof(_snapshot))]
method CreateCluster (line 117) | private static ClusterConfig CreateCluster(IConfigurationSection section)
method CreateRoute (line 138) | private static RouteConfig CreateRoute(IConfigurationSection section)
method CreateTransforms (line 163) | private static Dictionary<string, string>[]? CreateTransforms(IConfigu...
method CreateRouteMatch (line 175) | private static RouteMatch CreateRouteMatch(IConfigurationSection section)
method CreateRouteHeaders (line 192) | private static RouteHeader[]? CreateRouteHeaders(IConfigurationSection...
method CreateRouteHeader (line 202) | private static RouteHeader CreateRouteHeader(IConfigurationSection sec...
method CreateRouteQueryParameters (line 213) | private static RouteQueryParameter[]? CreateRouteQueryParameters(IConf...
method CreateRouteQueryParameter (line 223) | private static RouteQueryParameter CreateRouteQueryParameter(IConfigur...
method CreateSessionAffinityConfig (line 234) | private static SessionAffinityConfig? CreateSessionAffinityConfig(ICon...
method CreateSessionAffinityCookieConfig (line 251) | private static SessionAffinityCookieConfig? CreateSessionAffinityCooki...
method CreateHealthCheckConfig (line 271) | private static HealthCheckConfig? CreateHealthCheckConfig(IConfigurati...
method CreatePassiveHealthCheckConfig (line 286) | private static PassiveHealthCheckConfig? CreatePassiveHealthCheckConfi...
method CreateActiveHealthCheckConfig (line 301) | private static ActiveHealthCheckConfig? CreateActiveHealthCheckConfig(...
method CreateHttpClientConfig (line 319) | private static HttpClientConfig? CreateHttpClientConfig(IConfiguration...
method CreateProxyRequestConfig (line 363) | private static ForwarderRequestConfig? CreateProxyRequestConfig(IConfi...
method CreateDestination (line 379) | private static DestinationConfig CreateDestination(IConfigurationSecti...
class Log (line 390) | private static class Log
method ErrorSignalingChange (line 407) | public static void ErrorSignalingChange(ILogger logger, Exception ex...
method LoadData (line 412) | public static void LoadData(ILogger logger)
method ConfigurationDataConversionFailed (line 417) | public static void ConfigurationDataConversionFailed(ILogger logger,...
FILE: src/ReverseProxy/Configuration/ConfigProvider/ConfigurationReadingExtensions.cs
class ConfigurationReadingExtensions (line 12) | internal static class ConfigurationReadingExtensions
method ReadInt32 (line 14) | internal static int? ReadInt32(this IConfiguration configuration, stri...
method ReadInt64 (line 19) | internal static long? ReadInt64(this IConfiguration configuration, str...
method ReadDouble (line 24) | internal static double? ReadDouble(this IConfiguration configuration, ...
method ReadTimeSpan (line 29) | internal static TimeSpan? ReadTimeSpan(this IConfiguration configurati...
method ReadUri (line 36) | internal static Uri? ReadUri(this IConfiguration configuration, string...
method ReadEnum (line 41) | internal static TEnum? ReadEnum<TEnum>(this IConfiguration configurati...
method ReadBool (line 46) | internal static bool? ReadBool(this IConfiguration configuration, stri...
method ReadVersion (line 51) | internal static Version? ReadVersion(this IConfiguration configuration...
method ReadStringDictionary (line 56) | internal static IReadOnlyDictionary<string, string>? ReadStringDiction...
method ReadStringArray (line 66) | internal static string[]? ReadStringArray(this IConfigurationSection s...
FILE: src/ReverseProxy/Configuration/ConfigProvider/ConfigurationSnapshot.cs
class ConfigurationSnapshot (line 9) | internal sealed class ConfigurationSnapshot : IProxyConfig
FILE: src/ReverseProxy/Configuration/ConfigValidator.cs
class ConfigValidator (line 14) | internal sealed class ConfigValidator : IConfigValidator
method ConfigValidator (line 20) | public ConfigValidator(ITransformBuilder transformBuilder,
method ValidateRouteAsync (line 34) | public async ValueTask<IList<Exception>> ValidateRouteAsync(RouteConfi...
method ValidateClusterAsync (line 66) | public async ValueTask<IList<Exception>> ValidateClusterAsync(ClusterC...
FILE: src/ReverseProxy/Configuration/CorsConstants.cs
class CorsConstants (line 6) | internal static class CorsConstants
FILE: src/ReverseProxy/Configuration/DestinationConfig.cs
type DestinationConfig (line 13) | public sealed record DestinationConfig
FILE: src/ReverseProxy/Configuration/HeaderMatchMode.cs
type HeaderMatchMode (line 9) | public enum HeaderMatchMode
FILE: src/ReverseProxy/Configuration/HealthCheckConfig.cs
type HealthCheckConfig (line 11) | public sealed record HealthCheckConfig
FILE: src/ReverseProxy/Configuration/HttpClientConfig.cs
type HttpClientConfig (line 19) | public sealed record HttpClientConfig
FILE: src/ReverseProxy/Configuration/IConfigChangeListener.cs
type IConfigChangeListener (line 12) | public interface IConfigChangeListener
method ConfigurationLoadingFailed (line 19) | void ConfigurationLoadingFailed(IProxyConfigProvider configProvider, E...
method ConfigurationLoaded (line 25) | void ConfigurationLoaded(IReadOnlyList<IProxyConfig> proxyConfigs);
method ConfigurationApplyingFailed (line 32) | void ConfigurationApplyingFailed(IReadOnlyList<IProxyConfig> proxyConf...
method ConfigurationApplied (line 38) | void ConfigurationApplied(IReadOnlyList<IProxyConfig> proxyConfigs);
FILE: src/ReverseProxy/Configuration/IConfigValidator.cs
type IConfigValidator (line 13) | public interface IConfigValidator
method ValidateRouteAsync (line 18) | ValueTask<IList<Exception>> ValidateRouteAsync(RouteConfig route);
method ValidateClusterAsync (line 23) | ValueTask<IList<Exception>> ValidateClusterAsync(ClusterConfig cluster);
FILE: src/ReverseProxy/Configuration/IProxyConfig.cs
type IProxyConfig (line 14) | public interface IProxyConfig
FILE: src/ReverseProxy/Configuration/IProxyConfigFilter.cs
type IProxyConfigFilter (line 12) | public interface IProxyConfigFilter
method ConfigureClusterAsync (line 19) | ValueTask<ClusterConfig> ConfigureClusterAsync(ClusterConfig cluster, ...
method ConfigureRouteAsync (line 27) | ValueTask<RouteConfig> ConfigureRouteAsync(RouteConfig route, ClusterC...
FILE: src/ReverseProxy/Configuration/IProxyConfigProvider.cs
type IProxyConfigProvider (line 9) | public interface IProxyConfigProvider
method GetConfig (line 15) | IProxyConfig GetConfig();
FILE: src/ReverseProxy/Configuration/IYarpOutputCachePolicyProvider.cs
type IYarpOutputCachePolicyProvider (line 17) | internal interface IYarpOutputCachePolicyProvider
method GetPolicyAsync (line 19) | ValueTask<object?> GetPolicyAsync(string policyName);
class YarpOutputCachePolicyProvider (line 22) | internal sealed class YarpOutputCachePolicyProvider : IYarpOutputCachePo...
method YarpOutputCachePolicyProvider (line 32) | public YarpOutputCachePolicyProvider(IOptions<OutputCacheOptions> outp...
method GetPolicyAsync (line 45) | public ValueTask<object?> GetPolicyAsync(string policyName)
FILE: src/ReverseProxy/Configuration/IYarpRateLimiterPolicyProvider.cs
type IYarpRateLimiterPolicyProvider (line 16) | internal interface IYarpRateLimiterPolicyProvider
method GetPolicyAsync (line 18) | ValueTask<object?> GetPolicyAsync(string policyName);
class YarpRateLimiterPolicyProvider (line 21) | internal sealed class YarpRateLimiterPolicyProvider : IYarpRateLimiterPo...
method YarpRateLimiterPolicyProvider (line 27) | public YarpRateLimiterPolicyProvider(IOptions<RateLimiterOptions> rate...
method GetPolicyAsync (line 40) | public ValueTask<object?> GetPolicyAsync(string policyName)
FILE: src/ReverseProxy/Configuration/InMemoryConfigProvider.cs
class InMemoryConfigProvider (line 14) | public sealed class InMemoryConfigProvider : IProxyConfigProvider
method InMemoryConfigProvider (line 22) | public InMemoryConfigProvider(IReadOnlyList<RouteConfig> routes, IRead...
method InMemoryConfigProvider (line 29) | public InMemoryConfigProvider(IReadOnlyList<RouteConfig> routes, IRead...
method GetConfig (line 38) | public IProxyConfig GetConfig() => _config;
method Update (line 43) | public void Update(IReadOnlyList<RouteConfig> routes, IReadOnlyList<Cl...
method Update (line 52) | public void Update(IReadOnlyList<RouteConfig> routes, IReadOnlyList<Cl...
method UpdateInternal (line 58) | private void UpdateInternal(InMemoryConfig newConfig)
class InMemoryConfig (line 67) | private sealed class InMemoryConfig : IProxyConfig
method InMemoryConfig (line 72) | public InMemoryConfig(IReadOnlyList<RouteConfig> routes, IReadOnlyLi...
method InMemoryConfig (line 76) | public InMemoryConfig(IReadOnlyList<RouteConfig> routes, IReadOnlyLi...
method SignalChange (line 103) | internal void SignalChange()
FILE: src/ReverseProxy/Configuration/InMemoryConfigProviderExtensions.cs
class InMemoryConfigProviderExtensions (line 9) | public static class InMemoryConfigProviderExtensions
method LoadFromMemory (line 14) | public static IReverseProxyBuilder LoadFromMemory(this IReverseProxyBu...
FILE: src/ReverseProxy/Configuration/PassiveHealthCheckConfig.cs
type PassiveHealthCheckConfig (line 12) | public sealed record PassiveHealthCheckConfig
FILE: src/ReverseProxy/Configuration/QueryParameterMatchMode.cs
type QueryParameterMatchMode (line 9) | public enum QueryParameterMatchMode
FILE: src/ReverseProxy/Configuration/RateLimitingConstants.cs
class RateLimitingConstants (line 6) | internal static class RateLimitingConstants
FILE: src/ReverseProxy/Configuration/RouteConfig.cs
type RouteConfig (line 16) | public sealed record RouteConfig
FILE: src/ReverseProxy/Configuration/RouteHeader.cs
type RouteHeader (line 13) | public sealed record RouteHeader
FILE: src/ReverseProxy/Configuration/RouteMatch.cs
type RouteMatch (line 13) | public sealed record RouteMatch
FILE: src/ReverseProxy/Configuration/RouteQueryParameter.cs
type RouteQueryParameter (line 13) | public sealed record RouteQueryParameter
FILE: src/ReverseProxy/Configuration/RouteValidators/AuthorizationPolicyValidator.cs
class AuthorizationPolicyValidator (line 11) | internal sealed class AuthorizationPolicyValidator
method ValidateAsync (line 14) | public async ValueTask ValidateAsync(RouteConfig routeConfig, IList<Ex...
FILE: src/ReverseProxy/Configuration/RouteValidators/CorsPolicyValidator.cs
class CorsPolicyValidator (line 12) | internal sealed class CorsPolicyValidator(ICorsPolicyProvider corsPolicy...
method ValidateAsync (line 14) | public async ValueTask ValidateAsync(RouteConfig routeConfig, IList<Ex...
FILE: src/ReverseProxy/Configuration/RouteValidators/HeadersValidator.cs
class HeadersValidator (line 10) | internal sealed class HeadersValidator : IRouteValidator
method ValidateAsync (line 12) | public ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exceptio...
FILE: src/ReverseProxy/Configuration/RouteValidators/HostValidator.cs
class HostValidator (line 10) | internal sealed class HostValidator : IRouteValidator
method ValidateAsync (line 12) | public ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exceptio...
FILE: src/ReverseProxy/Configuration/RouteValidators/IRouteValidator.cs
type IRouteValidator (line 13) | public interface IRouteValidator
method ValidateAsync (line 21) | public ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exceptio...
FILE: src/ReverseProxy/Configuration/RouteValidators/MethodsValidator.cs
class MethodsValidator (line 10) | internal sealed class MethodsValidator : IRouteValidator
method ValidateAsync (line 17) | public ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exceptio...
FILE: src/ReverseProxy/Configuration/RouteValidators/OutputCachePolicyValidator.cs
class OutputCachePolicyValidator (line 10) | internal sealed class OutputCachePolicyValidator : IRouteValidator
method OutputCachePolicyValidator (line 14) | public OutputCachePolicyValidator(IYarpOutputCachePolicyProvider outpu...
method ValidateAsync (line 19) | public async ValueTask ValidateAsync(RouteConfig routeConfig, IList<Ex...
FILE: src/ReverseProxy/Configuration/RouteValidators/PathValidator.cs
class PathValidator (line 11) | internal sealed class PathValidator : IRouteValidator
method ValidateAsync (line 13) | public ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exceptio...
FILE: src/ReverseProxy/Configuration/RouteValidators/QueryParametersValidator.cs
class QueryParametersValidator (line 10) | internal sealed class QueryParametersValidator : IRouteValidator
method ValidateAsync (line 12) | public ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exceptio...
FILE: src/ReverseProxy/Configuration/RouteValidators/RateLimitPolicyValidator.cs
class RateLimitPolicyValidator (line 10) | internal sealed class RateLimitPolicyValidator : IRouteValidator
method RateLimitPolicyValidator (line 14) | public RateLimitPolicyValidator(IYarpRateLimiterPolicyProvider rateLim...
method ValidateAsync (line 19) | public async ValueTask ValidateAsync(RouteConfig routeConfig, IList<Ex...
FILE: src/ReverseProxy/Configuration/RouteValidators/TimeoutPolicyValidator.cs
class TimeoutPolicyValidator (line 12) | internal sealed class TimeoutPolicyValidator : IRouteValidator
method TimeoutPolicyValidator (line 16) | public TimeoutPolicyValidator(IOptionsMonitor<RequestTimeoutOptions> t...
method ValidateAsync (line 21) | public ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exceptio...
FILE: src/ReverseProxy/Configuration/SessionAffinityConfig.cs
type SessionAffinityConfig (line 11) | public sealed record SessionAffinityConfig
FILE: src/ReverseProxy/Configuration/SessionAffinityCookieConfig.cs
type SessionAffinityCookieConfig (line 14) | public sealed record SessionAffinityCookieConfig
FILE: src/ReverseProxy/Configuration/TimeoutPolicyConstants.cs
class TimeoutPolicyConstants (line 6) | internal static class TimeoutPolicyConstants
FILE: src/ReverseProxy/Configuration/WebProxyConfig.cs
type WebProxyConfig (line 11) | public sealed record WebProxyConfig : IEquatable<WebProxyConfig>
FILE: src/ReverseProxy/Delegation/AppBuilderDelegationExtensions.cs
class AppBuilderDelegationExtensions (line 15) | public static class AppBuilderDelegationExtensions
method UseHttpSysDelegation (line 25) | public static IReverseProxyApplicationBuilder UseHttpSysDelegation(thi...
FILE: src/ReverseProxy/Delegation/DelegationExtensions.cs
class DelegationExtensions (line 8) | internal static class DelegationExtensions
method GetHttpSysDelegationQueue (line 12) | public static string? GetHttpSysDelegationQueue(this DestinationState?...
method ShouldUseHttpSysDelegation (line 19) | public static bool ShouldUseHttpSysDelegation(this DestinationState de...
FILE: src/ReverseProxy/Delegation/DummyHttpSysDelegator.cs
class DummyHttpSysDelegator (line 7) | internal sealed class DummyHttpSysDelegator : IHttpSysDelegator
method ResetQueue (line 9) | public void ResetQueue(string queueName, string urlPrefix) { }
FILE: src/ReverseProxy/Delegation/HttpSysDelegator.cs
class HttpSysDelegator (line 20) | internal sealed class HttpSysDelegator : IHttpSysDelegator, IClusterChan...
method HttpSysDelegator (line 29) | public HttpSysDelegator(
method ResetQueue (line 44) | public void ResetQueue(string queueName, string urlPrefix)
method DelegateRequest (line 57) | public void DelegateRequest(HttpContext context, DestinationState dest...
method OnClusterAdded (line 134) | void IClusterChangeListener.OnClusterAdded(ClusterState cluster)
method OnClusterChanged (line 139) | void IClusterChangeListener.OnClusterChanged(ClusterState cluster)
method OnClusterRemoved (line 145) | void IClusterChangeListener.OnClusterRemoved(ClusterState cluster)
method AddOrUpdateRules (line 150) | private void AddOrUpdateRules(ClusterState cluster)
method RemoveDeadQueueReferences (line 213) | private void RemoveDeadQueueReferences()
class DelegationQueue (line 224) | private sealed class DelegationQueue
method DelegationQueue (line 232) | public DelegationQueue(string queueName, string urlPrefix)
method Initialize (line 239) | public DelegationQueueState Initialize(IServerDelegationFeature dele...
method Detach (line 266) | public DelegationQueueState? Detach(DelegationQueueState? state = null)
method Equals (line 287) | public bool Equals(QueueKey queueKey)
method ShouldRetryInitialization (line 292) | private static bool ShouldRetryInitialization(Exception? exception)
class DelegationQueueState (line 303) | private sealed class DelegationQueueState
method DelegationQueueState (line 305) | public DelegationQueueState()
method DelegationQueueState (line 310) | public DelegationQueueState(DelegationRule rule)
method DelegationQueueState (line 316) | public DelegationQueueState(Exception ex)
type QueueKey (line 337) | private readonly struct QueueKey : IEquatable<QueueKey>
method QueueKey (line 341) | public QueueKey(string queueName, string urlPrefix)
method Equals (line 354) | public bool Equals(QueueKey other)
method Equals (line 361) | public override bool Equals([NotNullWhen(true)] object? obj)
method GetHashCode (line 366) | public override int GetHashCode() => _hashCode;
class Log (line 369) | private static class Log
method QueueInitFailed (line 411) | public static void QueueInitFailed(ILogger logger, string destinatio...
method QueueNotFound (line 416) | public static void QueueNotFound(ILogger logger, DestinationState de...
method QueueNotInitialized (line 421) | public static void QueueNotInitialized(ILogger logger, DestinationSt...
method QueueReset (line 426) | public static void QueueReset(ILogger logger, string queueName, stri...
method QueueNoLongerExists (line 431) | public static void QueueNoLongerExists(ILogger logger, string? queue...
method QueueDisposed (line 436) | public static void QueueDisposed(ILogger logger, string? queueName, ...
method DelegatingRequest (line 441) | public static void DelegatingRequest(ILogger logger, DestinationStat...
method DelegationFailed (line 446) | public static void DelegationFailed(ILogger logger, DestinationState...
FILE: src/ReverseProxy/Delegation/HttpSysDelegatorMiddleware.cs
class HttpSysDelegatorMiddleware (line 14) | internal sealed class HttpSysDelegatorMiddleware
method HttpSysDelegatorMiddleware (line 21) | public HttpSysDelegatorMiddleware(
method Invoke (line 37) | public Task Invoke(HttpContext context)
class Log (line 73) | private static class Log
method MultipleDestinationsAvailable (line 80) | public static void MultipleDestinationsAvailable(ILogger logger, str...
FILE: src/ReverseProxy/Delegation/IHttpSysDelegator.cs
type IHttpSysDelegator (line 6) | public interface IHttpSysDelegator
method ResetQueue (line 17) | void ResetQueue(string queueName, string urlPrefix);
FILE: src/ReverseProxy/Forwarder/CallbackHttpClientFactory.cs
class CallbackHttpClientFactory (line 10) | internal sealed class CallbackHttpClientFactory : ForwarderHttpClientFac...
method CallbackHttpClientFactory (line 14) | internal CallbackHttpClientFactory(ILogger<ForwarderHttpClientFactory>...
method ConfigureHandler (line 21) | protected override void ConfigureHandler(ForwarderHttpClientContext co...
FILE: src/ReverseProxy/Forwarder/DirectForwardingHttpClientProvider.cs
class DirectForwardingHttpClientProvider (line 9) | internal sealed class DirectForwardingHttpClientProvider
method DirectForwardingHttpClientProvider (line 13) | public DirectForwardingHttpClientProvider() : this(new ForwarderHttpCl...
method DirectForwardingHttpClientProvider (line 15) | public DirectForwardingHttpClientProvider(IForwarderHttpClientFactory ...
FILE: src/ReverseProxy/Forwarder/EmptyHttpContent.cs
class EmptyHttpContent (line 12) | internal sealed class EmptyHttpContent : HttpContent
method SerializeToStreamAsync (line 14) | protected override Task SerializeToStreamAsync(Stream stream, Transpor...
method SerializeToStreamAsync (line 16) | protected override Task SerializeToStreamAsync(Stream stream, Transpor...
method TryComputeLength (line 18) | protected override bool TryComputeLength(out long length)
FILE: src/ReverseProxy/Forwarder/ForwarderError.cs
type ForwarderError (line 9) | public enum ForwarderError : int
FILE: src/ReverseProxy/Forwarder/ForwarderErrorFeature.cs
class ForwarderErrorFeature (line 8) | internal sealed class ForwarderErrorFeature : IForwarderErrorFeature
method ForwarderErrorFeature (line 10) | internal ForwarderErrorFeature(ForwarderError error, Exception? ex)
FILE: src/ReverseProxy/Forwarder/ForwarderHttpClientContext.cs
class ForwarderHttpClientContext (line 14) | public class ForwarderHttpClientContext
FILE: src/ReverseProxy/Forwarder/ForwarderHttpClientFactory.cs
class ForwarderHttpClientFactory (line 18) | public class ForwarderHttpClientFactory : IForwarderHttpClientFactory
method ForwarderHttpClientFactory (line 25) | public ForwarderHttpClientFactory() : this(NullLogger<ForwarderHttpCli...
method ForwarderHttpClientFactory (line 30) | public ForwarderHttpClientFactory(ILogger<ForwarderHttpClientFactory> ...
method CreateClient (line 37) | public HttpMessageInvoker CreateClient(ForwarderHttpClientContext cont...
method CanReuseOldClient (line 71) | protected virtual bool CanReuseOldClient(ForwarderHttpClientContext co...
method ConfigureHandler (line 83) | protected virtual void ConfigureHandler(ForwarderHttpClientContext con...
method TryCreateWebProxy (line 123) | private static WebProxy? TryCreateWebProxy(WebProxyConfig? webProxyCon...
method WrapHandler (line 141) | protected virtual HttpMessageHandler WrapHandler(ForwarderHttpClientCo...
class Log (line 146) | private static class Log
method ClientCreated (line 158) | public static void ClientCreated(ILogger logger, string clusterId)
method ClientReused (line 163) | public static void ClientReused(ILogger logger, string clusterId)
FILE: src/ReverseProxy/Forwarder/ForwarderMiddleware.cs
class ForwarderMiddleware (line 17) | internal sealed class ForwarderMiddleware
method ForwarderMiddleware (line 24) | public ForwarderMiddleware(RequestDelegate next, ILogger<ForwarderMidd...
method Invoke (line 37) | public async Task Invoke(HttpContext context)
class Log (line 98) | private static class Log
method NoAvailableDestinations (line 110) | public static void NoAvailableDestinations(ILogger logger, string cl...
method MultipleDestinationsAvailable (line 115) | public static void MultipleDestinationsAvailable(ILogger logger, str...
FILE: src/ReverseProxy/Forwarder/ForwarderRequestConfig.cs
type ForwarderRequestConfig (line 14) | public sealed record ForwarderRequestConfig
FILE: src/ReverseProxy/Forwarder/ForwarderStage.cs
type ForwarderStage (line 6) | internal enum ForwarderStage : int
FILE: src/ReverseProxy/Forwarder/ForwarderTelemetry.cs
class ForwarderTelemetry (line 12) | [EventSource(Name = "Yarp.ReverseProxy")]
method ForwarderStart (line 26) | [Event(1, Level = EventLevel.Informational)]
method ForwarderStop (line 37) | [Event(2, Level = EventLevel.Informational)]
method ForwarderFailed (line 48) | [Event(3, Level = EventLevel.Informational)]
method ForwarderStage (line 60) | [Event(4, Level = EventLevel.Informational)]
method ContentTransferring (line 70) | [Event(5, Level = EventLevel.Informational)]
method ContentTransferred (line 79) | [Event(6, Level = EventLevel.Informational)]
method ForwarderInvoke (line 88) | [Event(7, Level = EventLevel.Informational)]
method OnEventCommand (line 97) | protected override void OnEventCommand(EventCommandEventArgs command)
method WriteEvent (line 124) | [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUn...
method WriteEvent (line 161) | [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUn...
FILE: src/ReverseProxy/Forwarder/HttpForwarder.cs
class HttpForwarder (line 25) | internal sealed class HttpForwarder : IHttpForwarder
method HttpForwarder (line 34) | public HttpForwarder(ILogger<HttpForwarder> logger, TimeProvider timeP...
method SendAsync (line 88) | public ValueTask<ForwarderError> SendAsync(
method SendAsync (line 96) | public async ValueTask<ForwarderError> SendAsync(
method CreateRequestMessageAsync (line 354) | private async ValueTask<(HttpRequestMessage, StreamCopyHttpContent?, b...
method FixupUpgradeRequestHeaders (line 477) | private void FixupUpgradeRequestHeaders(HttpContext context, HttpReque...
method SetupRequestBodyCopy (line 540) | private StreamCopyHttpContent? SetupRequestBodyCopy(HttpContext contex...
method HandleRequestBodyFailure (line 602) | private ForwarderError HandleRequestBodyFailure(HttpContext context, S...
method HandleRequestFailureAsync (line 643) | private async ValueTask<ForwarderError> HandleRequestFailureAsync(Http...
method CopyResponseStatusAndHeadersAsync (line 723) | private static ValueTask<bool> CopyResponseStatusAndHeadersAsync(HttpR...
method HandleUpgradedResponse (line 740) | private async ValueTask<ForwarderError> HandleUpgradedResponse(HttpCon...
method FixupUpgradeResponseHeaders (line 851) | private ForwarderError FixupUpgradeResponseHeaders(HttpContext context...
method HandleResponseBodyErrorAsync (line 909) | private async ValueTask<ForwarderError> HandleResponseBodyErrorAsync(H...
method CopyResponseTrailingHeadersAsync (line 954) | private static ValueTask CopyResponseTrailingHeadersAsync(HttpResponse...
method ReportProxyError (line 960) | private void ReportProxyError(HttpContext context, ForwarderError erro...
method ResetOrAbort (line 967) | private static void ResetOrAbort(HttpContext context, bool isCancelled)
class Log (line 982) | private static class Log
method ResponseReceived (line 1024) | public static void ResponseReceived(ILogger logger, HttpResponseMess...
method Proxying (line 1029) | public static void Proxying(ILogger logger, HttpRequestMessage msg, ...
method NotProxying (line 1041) | public static void NotProxying(ILogger logger, int statusCode)
method InvalidSecWebSocketKeyHeader (line 1046) | public static void InvalidSecWebSocketKeyHeader(ILogger logger, stri...
method ErrorProxying (line 1051) | public static void ErrorProxying(ILogger logger, ForwarderError erro...
method RetryingWebSocketDowngradeNoConnect (line 1072) | public static void RetryingWebSocketDowngradeNoConnect(ILogger logger)
method RetryingWebSocketDowngradeNoHttp2 (line 1077) | public static void RetryingWebSocketDowngradeNoHttp2(ILogger logger)
method GetMessage (line 1082) | private static string GetMessage(ForwarderError error)
FILE: src/ReverseProxy/Forwarder/HttpTransformer.cs
class HttpTransformer (line 20) | public class HttpTransformer
method HttpTransformer (line 37) | protected HttpTransformer() { }
method IsBodylessStatusCode (line 39) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
method TransformRequestAsync (line 72) | public virtual ValueTask TransformRequestAsync(HttpContext httpContext...
method TransformRequestAsync (line 90) | [Obsolete("This overload of TransformRequestAsync is obsolete. Overrid...
method TransformResponseAsync (line 155) | public virtual ValueTask<bool> TransformResponseAsync(HttpContext http...
method TransformResponseAsync (line 171) | [Obsolete("This overload of TransformResponseAsync is obsolete. Overri...
method TransformResponseTrailersAsync (line 221) | public virtual ValueTask TransformResponseTrailersAsync(HttpContext ht...
method TransformResponseTrailersAsync (line 232) | [Obsolete("This overload of TransformResponseTrailersAsync is obsolete...
method CopyResponseHeaders (line 249) | private static void CopyResponseHeaders(HttpHeaders source, IHeaderDic...
FILE: src/ReverseProxy/Forwarder/IForwarderErrorFeature.cs
type IForwarderErrorFeature (line 11) | public interface IForwarderErrorFeature
FILE: src/ReverseProxy/Forwarder/IForwarderHttpClientFactory.cs
type IForwarderHttpClientFactory (line 17) | public interface IForwarderHttpClientFactory
method CreateClient (line 33) | HttpMessageInvoker CreateClient(ForwarderHttpClientContext context);
FILE: src/ReverseProxy/Forwarder/IHttpForwarder.cs
type IHttpForwarder (line 14) | public interface IHttpForwarder
method SendAsync (line 26) | ValueTask<ForwarderError> SendAsync(HttpContext context, string destin...
method SendAsync (line 40) | ValueTask<ForwarderError> SendAsync(HttpContext context, string destin...
FILE: src/ReverseProxy/Forwarder/IHttpForwarderExtensions.cs
class IHttpForwarderExtensions (line 15) | public static class IHttpForwarderExtensions
method SendAsync (line 26) | public static ValueTask<ForwarderError> SendAsync(this IHttpForwarder ...
method SendAsync (line 47) | public static ValueTask<ForwarderError> SendAsync(this IHttpForwarder ...
method SendAsync (line 64) | public static ValueTask<ForwarderError> SendAsync(this IHttpForwarder ...
method SendAsync (line 81) | public static ValueTask<ForwarderError> SendAsync(this IHttpForwarder ...
method SendAsync (line 97) | public static ValueTask<ForwarderError> SendAsync(this IHttpForwarder ...
FILE: src/ReverseProxy/Forwarder/ProtocolHelper.cs
class ProtocolHelper (line 15) | internal static class ProtocolHelper
method IsHttp2OrGreater (line 22) | public static bool IsHttp2OrGreater(string protocol) => HttpProtocol.I...
method GetVersionPolicy (line 24) | public static string GetVersionPolicy(HttpVersionPolicy policy)
method IsGrpcContentType (line 38) | public static bool IsGrpcContentType(string? contentType) =>
method CreateSecWebSocketKey (line 47) | internal static string CreateSecWebSocketKey()
method CheckSecWebSocketKey (line 59) | internal static bool CheckSecWebSocketKey(string? key)
method CreateSecWebSocketAccept (line 69) | internal static string CreateSecWebSocketAccept(string? key)
FILE: src/ReverseProxy/Forwarder/RequestTransformer.cs
class RequestTransformer (line 12) | internal sealed class RequestTransformer : HttpTransformer
method RequestTransformer (line 16) | public RequestTransformer(Func<HttpContext, HttpRequestMessage, ValueT...
method TransformRequestAsync (line 21) | public override async ValueTask TransformRequestAsync(HttpContext http...
FILE: src/ReverseProxy/Forwarder/RequestUtilities.cs
class RequestUtilities (line 23) | public static class RequestUtilities
method GetHttpMethod (line 39) | internal static HttpMethod GetHttpMethod(string method) => method switch
method ShouldSkipRequestHeader (line 54) | internal static bool ShouldSkipRequestHeader(string headerName)
method ShouldSkipResponseHeader (line 70) | internal static bool ShouldSkipResponseHeader(string headerName)
method MakeDestinationAddress (line 120) | public static Uri MakeDestinationAddress(string destinationPrefix, Pat...
method EncodePath (line 136) | internal static string EncodePath(PathString path)
method EncodePath (line 153) | private static string EncodePath(string value, int i)
method AddHeader (line 215) | internal static void AddHeader(HttpRequestMessage request, string head...
method RemoveHeader (line 276) | internal static void RemoveHeader(HttpRequestMessage request, string h...
method Concat (line 288) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
method TryGetValues (line 326) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
method IsResponseSet (line 358) | internal static bool IsResponseSet(HttpResponse response)
FILE: src/ReverseProxy/Forwarder/ReverseProxyPropagator.cs
class ReverseProxyPropagator (line 15) | public sealed class ReverseProxyPropagator : DistributedContextPropagator
method ReverseProxyPropagator (line 23) | public ReverseProxyPropagator(DistributedContextPropagator innerPropag...
method Inject (line 30) | public override void Inject(Activity? activity, object? carrier, Propa...
method ExtractTraceIdAndState (line 45) | public override void ExtractTraceIdAndState(object? carrier, Propagato...
method ExtractBaggage (line 48) | public override IEnumerable<KeyValuePair<string, string?>>? ExtractBag...
FILE: src/ReverseProxy/Forwarder/StreamCopier.cs
class StreamCopier (line 18) | internal static class StreamCopier
method CopyAsync (line 24) | public static ValueTask<(StreamCopyResult, Exception?)> CopyAsync(bool...
method CopyAsync (line 27) | public static ValueTask<(StreamCopyResult, Exception?)> CopyAsync(bool...
method CopyAsync (line 42) | private static async ValueTask<(StreamCopyResult, Exception?)> CopyAsy...
class StreamCopierTelemetry (line 147) | private sealed class StreamCopierTelemetry
method StreamCopierTelemetry (line 159) | public StreamCopierTelemetry(bool isRequest, TimeProvider timeProvider)
method AfterRead (line 173) | public void AfterRead(long contentLength)
method AfterWrite (line 188) | public void AfterWrite()
method Stop (line 209) | public void Stop()
FILE: src/ReverseProxy/Forwarder/StreamCopyHttpContent.cs
class StreamCopyHttpContent (line 43) | internal sealed class StreamCopyHttpContent : HttpContent
method StreamCopyHttpContent (line 55) | public StreamCopyHttpContent(HttpContext context, bool isStreamingRequ...
method SerializeToStreamAsync (line 129) | protected override Task SerializeToStreamAsync(Stream stream, Transpor...
method SerializeToStreamAsync (line 134) | protected override async Task SerializeToStreamAsync(Stream stream, Tr...
method CreateContentReadStreamAsync (line 216) | protected override Task<Stream> CreateContentReadStreamAsync()
method TryComputeLength (line 222) | protected override bool TryComputeLength(out long length)
method DisableMinRequestBodyDataRateAndMaxRequestBodySize (line 239) | private void DisableMinRequestBodyDataRateAndMaxRequestBodySize(HttpCo...
FILE: src/ReverseProxy/Forwarder/StreamCopyResult.cs
type StreamCopyResult (line 6) | internal enum StreamCopyResult
FILE: src/ReverseProxy/Health/ActiveHealthCheckMonitor.Log.cs
class ActiveHealthCheckMonitor (line 9) | internal partial class ActiveHealthCheckMonitor
class Log (line 11) | private static class Log
method ExplicitActiveCheckOfAllClustersHealthFailed (line 63) | public static void ExplicitActiveCheckOfAllClustersHealthFailed(ILog...
method ActiveHealthProbingFailedOnCluster (line 68) | public static void ActiveHealthProbingFailedOnCluster(ILogger logger...
method ErrorOccurredDuringActiveHealthProbingShutdownOnCluster (line 73) | public static void ErrorOccurredDuringActiveHealthProbingShutdownOnC...
method ActiveHealthProbeConstructionFailedOnCluster (line 78) | public static void ActiveHealthProbeConstructionFailedOnCluster(ILog...
method ActiveHealthProbeCancelledOnDestination (line 83) | public static void ActiveHealthProbeCancelledOnDestination(ILogger l...
method StartingActiveHealthProbingOnCluster (line 88) | public static void StartingActiveHealthProbingOnCluster(ILogger logg...
method StoppedActiveHealthProbingOnCluster (line 93) | public static void StoppedActiveHealthProbingOnCluster(ILogger logge...
method DestinationProbingCompleted (line 98) | public static void DestinationProbingCompleted(ILogger logger, strin...
method DestinationProbingFailed (line 103) | public static void DestinationProbingFailed(ILogger logger, string d...
method SendingHealthProbeToEndpointOfDestination (line 108) | public static void SendingHealthProbeToEndpointOfDestination(ILogger...
FILE: src/ReverseProxy/Health/ActiveHealthCheckMonitor.cs
class ActiveHealthCheckMonitor (line 18) | internal partial class ActiveHealthCheckMonitor : IActiveHealthCheckMoni...
method ActiveHealthCheckMonitor (line 25) | public ActiveHealthCheckMonitor(
method CheckHealthAsync (line 48) | public Task CheckHealthAsync(IEnumerable<ClusterState> clusters)
method OnClusterAdded (line 78) | public void OnClusterAdded(ClusterState cluster)
method OnClusterChanged (line 87) | public void OnClusterChanged(ClusterState cluster)
method OnClusterRemoved (line 100) | public void OnClusterRemoved(ClusterState cluster)
method Dispose (line 105) | public void Dispose()
method ProbeCluster (line 110) | private async Task ProbeCluster(ClusterState cluster)
method ProbeDestinationAsync (line 169) | private async Task<DestinationProbingResult> ProbeDestinationAsync(Clu...
FILE: src/ReverseProxy/Health/ActiveHealthCheckMonitorOptions.cs
class ActiveHealthCheckMonitorOptions (line 11) | public class ActiveHealthCheckMonitorOptions
FILE: src/ReverseProxy/Health/AppBuilderHealthExtensions.cs
class AppBuilderHealthExtensions (line 11) | public static class AppBuilderHealthExtensions
method UsePassiveHealthChecks (line 16) | public static IReverseProxyApplicationBuilder UsePassiveHealthChecks(t...
FILE: src/ReverseProxy/Health/ClusterDestinationsUpdater.cs
class ClusterDestinationsUpdater (line 14) | internal sealed class ClusterDestinationsUpdater : IClusterDestinationsU...
method ClusterDestinationsUpdater (line 19) | public ClusterDestinationsUpdater(IEnumerable<IAvailableDestinationsPo...
method UpdateAvailableDestinations (line 25) | public void UpdateAvailableDestinations(ClusterState cluster)
method UpdateAllDestinations (line 36) | public void UpdateAllDestinations(ClusterState cluster)
method UpdateInternal (line 44) | private void UpdateInternal(ClusterState cluster, IReadOnlyList<Destin...
FILE: src/ReverseProxy/Health/ConsecutiveFailuresHealthPolicy.cs
class ConsecutiveFailuresHealthPolicy (line 15) | internal sealed class ConsecutiveFailuresHealthPolicy : IActiveHealthChe...
method ConsecutiveFailuresHealthPolicy (line 24) | public ConsecutiveFailuresHealthPolicy(IOptions<ConsecutiveFailuresHea...
method ProbingCompleted (line 32) | public void ProbingCompleted(ClusterState cluster, IReadOnlyList<Desti...
method GetFailureThreshold (line 55) | private double GetFailureThreshold(ClusterState cluster)
method EvaluateHealthState (line 61) | private static DestinationHealth EvaluateHealthState(double threshold,...
method TryParse (line 80) | private static bool TryParse(string stringValue, out double parsedValue)
FILE: src/ReverseProxy/Health/ConsecutiveFailuresHealthPolicyOptions.cs
class ConsecutiveFailuresHealthPolicyOptions (line 9) | public class ConsecutiveFailuresHealthPolicyOptions
FILE: src/ReverseProxy/Health/DefaultProbingRequestFactory.cs
class DefaultProbingRequestFactory (line 16) | internal sealed class DefaultProbingRequestFactory : IProbingRequestFactory
method CreateRequest (line 21) | public HttpRequestMessage CreateRequest(ClusterModel cluster, Destinat...
method CreateRequestAsync (line 45) | public ValueTask<HttpRequestMessage> CreateRequestAsync(ClusterState c...
FILE: src/ReverseProxy/Health/DestinationHealthUpdater.cs
class DestinationHealthUpdater (line 13) | internal sealed class DestinationHealthUpdater : IDestinationHealthUpdat...
method DestinationHealthUpdater (line 19) | public DestinationHealthUpdater(
method SetActive (line 32) | public void SetActive(ClusterState cluster, IEnumerable<NewActiveDesti...
method SetPassive (line 62) | public void SetPassive(ClusterState cluster, DestinationState destinat...
method SetPassiveAsync (line 67) | internal Task SetPassiveAsync(ClusterState cluster, DestinationState d...
method UpdateDestinations (line 79) | private void UpdateDestinations(object cluster)
method ScheduleReactivation (line 84) | private void ScheduleReactivation(ClusterState cluster, DestinationSta...
method Dispose (line 93) | public void Dispose()
method Reactivate (line 98) | private Task Reactivate(ClusterState cluster, DestinationState destina...
class Log (line 111) | private static class Log
method ActiveDestinationHealthStateIsSetToUnhealthy (line 133) | public static void ActiveDestinationHealthStateIsSetToUnhealthy(ILog...
method ActiveDestinationHealthStateIsSet (line 138) | public static void ActiveDestinationHealthStateIsSet(ILogger logger,...
method UnhealthyDestinationIsScheduledForReactivation (line 143) | public static void UnhealthyDestinationIsScheduledForReactivation(IL...
method PassiveDestinationHealthResetToUnknownState (line 148) | public static void PassiveDestinationHealthResetToUnknownState(ILogg...
FILE: src/ReverseProxy/Health/DestinationProbingResult.cs
type DestinationProbingResult (line 13) | public readonly struct DestinationProbingResult
method DestinationProbingResult (line 15) | public DestinationProbingResult(DestinationState destination, HttpResp...
FILE: src/ReverseProxy/Health/EntityActionScheduler.cs
class EntityActionScheduler (line 25) | internal sealed class EntityActionScheduler<T> : IDisposable where T : n...
method EntityActionScheduler (line 38) | public EntityActionScheduler(Func<T, Task> action, bool autoStart, boo...
method Dispose (line 50) | public void Dispose()
method Start (line 60) | public void Start()
method ScheduleEntity (line 73) | public void ScheduleEntity(T entity, TimeSpan period)
method ChangePeriod (line 94) | public void ChangePeriod(T entity, TimeSpan newPeriod)
method UnscheduleEntity (line 108) | public void UnscheduleEntity(T entity)
method IsScheduled (line 116) | public bool IsScheduled(T entity)
class SchedulerEntry (line 121) | private sealed class SchedulerEntry : IDisposable
method SchedulerEntry (line 130) | public SchedulerEntry(WeakReference<EntityActionScheduler<T>> schedu...
method ChangePeriod (line 157) | public void ChangePeriod(TimeSpan newPeriod)
method EnsureStarted (line 169) | public void EnsureStarted()
method SetTimer (line 180) | private void SetTimer()
method Dispose (line 198) | public void Dispose()
method TimerCallback (line 205) | private static async Task TimerCallback(object? state)
FILE: src/ReverseProxy/Health/HealthCheckConstants.cs
class HealthCheckConstants (line 6) | public static class HealthCheckConstants
class PassivePolicy (line 8) | public static class PassivePolicy
class ActivePolicy (line 13) | public static class ActivePolicy
class AvailableDestinations (line 18) | public static class AvailableDestinations
FILE: src/ReverseProxy/Health/HealthyAndUnknownDestinationsPolicy.cs
class HealthyAndUnknownDestinationsPolicy (line 13) | internal class HealthyAndUnknownDestinationsPolicy : IAvailableDestinati...
method GetAvailableDestinations (line 17) | public virtual IReadOnlyList<DestinationState> GetAvailableDestination...
FILE: src/ReverseProxy/Health/HealthyOrPanicDestinationsPolicy.cs
class HealthyOrPanicDestinationsPolicy (line 10) | internal sealed class HealthyOrPanicDestinationsPolicy : HealthyAndUnkno...
method GetAvailableDestinations (line 14) | public override IReadOnlyList<DestinationState> GetAvailableDestinatio...
FILE: src/ReverseProxy/Health/IActiveHealthCheckMonitor.cs
type IActiveHealthCheckMonitor (line 13) | public interface IActiveHealthCheckMonitor
method CheckHealthAsync (line 30) | Task CheckHealthAsync(IEnumerable<ClusterState> clusters);
FILE: src/ReverseProxy/Health/IActiveHealthCheckPolicy.cs
type IActiveHealthCheckPolicy (line 12) | public interface IActiveHealthCheckPolicy
method ProbingCompleted (line 24) | void ProbingCompleted(ClusterState cluster, IReadOnlyList<DestinationP...
FILE: src/ReverseProxy/Health/IAvailableDestinationsPolicy.cs
type IAvailableDestinationsPolicy (line 13) | public interface IAvailableDestinationsPolicy
method GetAvailableDestinations (line 26) | IReadOnlyList<DestinationState> GetAvailableDestinations(ClusterConfig...
FILE: src/ReverseProxy/Health/IClusterDestinationsUpdater.cs
type IClusterDestinationsUpdater (line 11) | public interface IClusterDestinationsUpdater
method UpdateAvailableDestinations (line 18) | void UpdateAvailableDestinations(ClusterState cluster);
method UpdateAllDestinations (line 26) | void UpdateAllDestinations(ClusterState cluster);
FILE: src/ReverseProxy/Health/IDestinationHealthUpdater.cs
type IDestinationHealthUpdater (line 14) | public interface IDestinationHealthUpdater
method SetPassive (line 25) | void SetPassive(ClusterState cluster, DestinationState destination, De...
method SetActive (line 32) | void SetActive(ClusterState cluster, IEnumerable<NewActiveDestinationH...
FILE: src/ReverseProxy/Health/IPassiveHealthCheckPolicy.cs
type IPassiveHealthCheckPolicy (line 12) | public interface IPassiveHealthCheckPolicy
method RequestProxied (line 25) | void RequestProxied(HttpContext context, ClusterState cluster, Destina...
FILE: src/ReverseProxy/Health/IProbingRequestFactory.cs
type IProbingRequestFactory (line 14) | public interface IProbingRequestFactory
method CreateRequest (line 22) | HttpRequestMessage CreateRequest(ClusterModel cluster, DestinationMode...
method CreateRequestAsync (line 31) | ValueTask<HttpRequestMessage> CreateRequestAsync(ClusterState cluster,...
FILE: src/ReverseProxy/Health/NewActiveDestinationHealth.cs
type NewActiveDestinationHealth (line 11) | public readonly struct NewActiveDestinationHealth
method NewActiveDestinationHealth (line 13) | public NewActiveDestinationHealth(DestinationState destination, Destin...
FILE: src/ReverseProxy/Health/PassiveHealthCheckMiddleware.cs
class PassiveHealthCheckMiddleware (line 13) | public class PassiveHealthCheckMiddleware
method PassiveHealthCheckMiddleware (line 18) | public PassiveHealthCheckMiddleware(RequestDelegate next, IEnumerable<...
method Invoke (line 26) | public async Task Invoke(HttpContext context)
FILE: src/ReverseProxy/Health/TransportFailureRateHealthPolicy.cs
class TransportFailureRateHealthPolicy (line 26) | internal sealed class TransportFailureRateHealthPolicy : IPassiveHealthC...
method TransportFailureRateHealthPolicy (line 37) | public TransportFailureRateHealthPolicy(
method RequestProxied (line 51) | public void RequestProxied(HttpContext context, ClusterState cluster, ...
method EvaluateProxiedRequest (line 60) | private DestinationHealth EvaluateProxiedRequest(ClusterState cluster,...
method TryParse (line 76) | private static bool TryParse(string stringValue, out double parsedValue)
method DetermineIfDestinationFailed (line 81) | private static bool DetermineIfDestinationFailed(HttpContext context)
class ProxiedRequestHistory (line 105) | private sealed class ProxiedRequestHistory
method AddNew (line 114) | public double AddNew(TimeProvider timeProvider, TimeSpan detectionWi...
type HistoryRecord (line 153) | private readonly struct HistoryRecord
method HistoryRecord (line 155) | public HistoryRecord(long recordedAt, long totalCount, long failed...
FILE: src/ReverseProxy/Health/TransportFailureRateHealthPolicyOptions.cs
class TransportFailureRateHealthPolicyOptions (line 11) | public class TransportFailureRateHealthPolicyOptions
FILE: src/ReverseProxy/Limits/LimitsMiddleware.cs
class LimitsMiddleware (line 18) | internal sealed class LimitsMiddleware
method LimitsMiddleware (line 23) | public LimitsMiddleware(RequestDelegate next, ILogger<LimitsMiddleware...
method Invoke (line 33) | public Task Invoke(HttpContext context)
class Log (line 55) | private static class Log
method MaxRequestBodySizeSet (line 62) | public static void MaxRequestBodySizeSet(ILogger logger, long? limit)
FILE: src/ReverseProxy/LoadBalancing/AppBuilderLoadBalancingExtensions.cs
class AppBuilderLoadBalancingExtensions (line 11) | public static class AppBuilderLoadBalancingExtensions
method UseLoadBalancing (line 16) | public static IReverseProxyApplicationBuilder UseLoadBalancing(this IR...
FILE: src/ReverseProxy/LoadBalancing/FirstLoadBalancingPolicy.cs
class FirstLoadBalancingPolicy (line 14) | internal sealed class FirstLoadBalancingPolicy : ILoadBalancingPolicy
method PickDestination (line 18) | public DestinationState? PickDestination(HttpContext context, ClusterS...
FILE: src/ReverseProxy/LoadBalancing/ILoadBalancingPolicy.cs
type ILoadBalancingPolicy (line 14) | public interface ILoadBalancingPolicy
method PickDestination (line 24) | DestinationState? PickDestination(HttpContext context, ClusterState cl...
FILE: src/ReverseProxy/LoadBalancing/LeastRequestsLoadBalancingPolicy.cs
class LeastRequestsLoadBalancingPolicy (line 10) | internal sealed class LeastRequestsLoadBalancingPolicy : ILoadBalancingP...
method PickDestination (line 14) | public DestinationState? PickDestination(HttpContext context, ClusterS...
FILE: src/ReverseProxy/LoadBalancing/LoadBalancingMiddleware.cs
class LoadBalancingMiddleware (line 18) | internal sealed class LoadBalancingMiddleware
method LoadBalancingMiddleware (line 24) | public LoadBalancingMiddleware(
method Invoke (line 37) | public Task Invoke(HttpContext context)
class Log (line 74) | private static class Log
method NoAvailableDestinations (line 81) | public static void NoAvailableDestinations(ILogger logger, string cl...
FILE: src/ReverseProxy/LoadBalancing/LoadBalancingPolicies.cs
class LoadBalancingPolicies (line 9) | public static class LoadBalancingPolicies
FILE: src/ReverseProxy/LoadBalancing/PowerOfTwoChoicesLoadBalancingPolicy.cs
class PowerOfTwoChoicesLoadBalancingPolicy (line 11) | internal sealed class PowerOfTwoChoicesLoadBalancingPolicy : ILoadBalanc...
method PowerOfTwoChoicesLoadBalancingPolicy (line 15) | public PowerOfTwoChoicesLoadBalancingPolicy(IRandomFactory randomFactory)
method PickDestination (line 22) | public DestinationState? PickDestination(HttpContext context, ClusterS...
FILE: src/ReverseProxy/LoadBalancing/RandomLoadBalancingPolicy.cs
class RandomLoadBalancingPolicy (line 11) | internal sealed class RandomLoadBalancingPolicy : ILoadBalancingPolicy
method RandomLoadBalancingPolicy (line 15) | public RandomLoadBalancingPolicy(IRandomFactory randomFactory)
method PickDestination (line 22) | public DestinationState? PickDestination(HttpContext context, ClusterS...
FILE: src/ReverseProxy/LoadBalancing/RoundRobinLoadBalancingPolicy.cs
class RoundRobinLoadBalancingPolicy (line 12) | internal sealed class RoundRobinLoadBalancingPolicy : ILoadBalancingPolicy
method PickDestination (line 18) | public DestinationState? PickDestination(HttpContext context, ClusterS...
FILE: src/ReverseProxy/Management/IProxyStateLookup.cs
type IProxyStateLookup (line 13) | public interface IProxyStateLookup
method TryGetRoute (line 18) | bool TryGetRoute(string id, [NotNullWhen(true)] out RouteModel? route);
method GetRoutes (line 23) | IEnumerable<RouteModel> GetRoutes();
method TryGetCluster (line 28) | bool TryGetCluster(string id, [NotNullWhen(true)] out ClusterState? cl...
method GetClusters (line 33) | IEnumerable<ClusterState> GetClusters();
FILE: src/ReverseProxy/Management/IReverseProxyBuilder.cs
type IReverseProxyBuilder (line 9) | public interface IReverseProxyBuilder
FILE: src/ReverseProxy/Management/IReverseProxyBuilderExtensions.cs
class IReverseProxyBuilderExtensions (line 24) | internal static class IReverseProxyBuilderExtensions
method AddConfigBuilder (line 26) | public static IReverseProxyBuilder AddConfigBuilder(this IReverseProxy...
method AddRuntimeStateManagers (line 59) | public static IReverseProxyBuilder AddRuntimeStateManagers(this IRever...
method AddConfigManager (line 71) | public static IReverseProxyBuilder AddConfigManager(this IReverseProxy...
method AddProxy (line 78) | public static IReverseProxyBuilder AddProxy(this IReverseProxyBuilder ...
method AddLoadBalancingPolicies (line 86) | public static IReverseProxyBuilder AddLoadBalancingPolicies(this IReve...
method AddSessionAffinityPolicies (line 101) | public static IReverseProxyBuilder AddSessionAffinityPolicies(this IRe...
method AddActiveHealthChecks (line 118) | public static IReverseProxyBuilder AddActiveHealthChecks(this IReverse...
method AddPassiveHealthCheck (line 136) | public static IReverseProxyBuilder AddPassiveHealthCheck(this IReverse...
method AddHttpSysDelegation (line 142) | public static IReverseProxyBuilder AddHttpSysDelegation(this IReverseP...
method AddDestinationResolver (line 151) | public static IReverseProxyBuilder AddDestinationResolver(this IRevers...
FILE: src/ReverseProxy/Management/ProxyConfigManager.cs
class ProxyConfigManager (line 34) | internal sealed class ProxyConfigManager : EndpointDataSource, IProxySta...
method ProxyConfigManager (line 61) | public ProxyConfigManager(
method CreateEndpoints (line 139) | [MemberNotNull(nameof(_endpoints))]
method GetChangeToken (line 160) | public override IChangeToken GetChangeToken() => Volatile.Read(ref _en...
method ExtractListOfProxyConfigs (line 162) | private static IProxyConfig[] ExtractListOfProxyConfigs(IEnumerable<Co...
method InitialLoadAsync (line 167) | internal async Task<EndpointDataSource> InitialLoadAsync()
method ReloadConfigAsync (line 221) | private async Task ReloadConfigAsync()
method ValidateConfigProperties (line 328) | private static void ValidateConfigProperties(IProxyConfig config)
method LoadConfigAsync (line 341) | private ValueTask<IProxyConfig> LoadConfigAsync(IProxyConfigProvider p...
method LoadConfigAsyncCore (line 354) | private async ValueTask<IProxyConfig> LoadConfigAsyncCore(IProxyConfig...
class ResolvedProxyConfig (line 412) | private sealed class ResolvedProxyConfig : IProxyConfig
method ResolvedProxyConfig (line 416) | public ResolvedProxyConfig(IProxyConfig innerConfig, IReadOnlyList<C...
method ListenForConfigChanges (line 428) | private void ListenForConfigChanges()
method ApplyConfigAsync (line 483) | private async Task<bool> ApplyConfigAsync(IReadOnlyList<RouteConfig> r...
method VerifyRoutesAsync (line 499) | private async Task<(IList<RouteConfig>, IList<Exception>)> VerifyRoute...
method VerifyClustersAsync (line 561) | private async Task<(IReadOnlyDictionary<string, ClusterConfig>, IList<...
method UpdateRuntimeClusters (line 612) | private void UpdateRuntimeClusters(IReadOnlyDictionary<string, Cluster...
method UpdateRuntimeDestinations (line 712) | private bool UpdateRuntimeDestinations(IReadOnlyDictionary<string, Des...
method UpdateRuntimeRoutes (line 768) | private bool UpdateRuntimeRoutes(IList<RouteConfig> incomingRoutes)
method UpdateEndpoints (line 835) | [MemberNotNull(nameof(_endpoints))]
method BuildRouteModel (line 859) | private RouteModel BuildRouteModel(RouteConfig source, ClusterState? c...
method TryGetRoute (line 866) | public bool TryGetRoute(string id, [NotNullWhen(true)] out RouteModel?...
method GetRoutes (line 878) | public IEnumerable<RouteModel> GetRoutes()
method TryGetCluster (line 886) | public bool TryGetCluster(string id, [NotNullWhen(true)] out ClusterSt...
method GetClusters (line 891) | public IEnumerable<ClusterState> GetClusters()
method Dispose (line 899) | public void Dispose()
class ConfigState (line 908) | private sealed class ConfigState
method ConfigState (line 910) | public ConfigState(IProxyConfigProvider provider, IProxyConfig config)
class Log (line 925) | private static class Log
method ClusterAdded (line 982) | public static void ClusterAdded(ILogger logger, string clusterId)
method ClusterChanged (line 987) | public static void ClusterChanged(ILogger logger, string clusterId)
method ClusterRemoved (line 992) | public static void ClusterRemoved(ILogger logger, string clusterId)
method DestinationAdded (line 997) | public static void DestinationAdded(ILogger logger, string destinati...
method DestinationChanged (line 1002) | public static void DestinationChanged(ILogger logger, string destina...
method DestinationRemoved (line 1007) | public static void DestinationRemoved(ILogger logger, string destina...
method RouteAdded (line 1012) | public static void RouteAdded(ILogger logger, string routeId)
method RouteChanged (line 1017) | public static void RouteChanged(ILogger logger, string routeId)
method RouteRemoved (line 1022) | public static void RouteRemoved(ILogger logger, string routeId)
method ErrorReloadingConfig (line 1027) | public static void ErrorReloadingConfig(ILogger logger, Exception ex)
method ErrorApplyingConfig (line 1032) | public static void ErrorApplyingConfig(ILogger logger, Exception ex)
FILE: src/ReverseProxy/Management/ReverseProxyBuilder.cs
class ReverseProxyBuilder (line 12) | internal sealed class ReverseProxyBuilder : IReverseProxyBuilder
method ReverseProxyBuilder (line 18) | public ReverseProxyBuilder(IServiceCollection services)
FILE: src/ReverseProxy/Management/ReverseProxyServiceCollectionExtensions.cs
class ReverseProxyServiceCollectionExtensions (line 26) | public static class ReverseProxyServiceCollectionExtensions
method AddHttpForwarder (line 31) | public static IServiceCollection AddHttpForwarder(this IServiceCollect...
method AddReverseProxy (line 45) | public static IReverseProxyBuilder AddReverseProxy(this IServiceCollec...
method LoadFromConfig (line 85) | public static IReverseProxyBuilder LoadFromConfig(this IReverseProxyBu...
method AddConfigFilter (line 102) | public static IReverseProxyBuilder AddConfigFilter<[DynamicallyAccesse...
method AddTransforms (line 115) | public static IReverseProxyBuilder AddTransforms(this IReverseProxyBui...
method AddTransforms (line 127) | public static IReverseProxyBuilder AddTransforms<[DynamicallyAccessedM...
method AddTransformFactory (line 138) | public static IReverseProxyBuilder AddTransformFactory<[DynamicallyAcc...
method ConfigureHttpClient (line 149) | public static IReverseProxyBuilder ConfigureHttpClient(this IReversePr...
method AddDnsDestinationResolver (line 175) | public static IReverseProxyBuilder AddDnsDestinationResolver(this IRev...
FILE: src/ReverseProxy/Model/ClusterDestinationsState.cs
class ClusterDestinationsState (line 9) | public sealed class ClusterDestinationsState
method ClusterDestinationsState (line 11) | public ClusterDestinationsState(
FILE: src/ReverseProxy/Model/ClusterModel.cs
class ClusterModel (line 20) | public sealed class ClusterModel
method ClusterModel (line 25) | public ClusterModel(
method HasConfigChanged (line 49) | internal bool HasConfigChanged(ClusterModel newModel)
FILE: src/ReverseProxy/Model/ClusterState.cs
class ClusterState (line 14) | public sealed class ClusterState
method ClusterState (line 23) | public ClusterState(string clusterId)
method ClusterState (line 34) | public ClusterState(string clusterId, ClusterModel model) : this(clust...
FILE: src/ReverseProxy/Model/DestinationHealth.cs
type DestinationHealth (line 6) | public enum DestinationHealth
FILE: src/ReverseProxy/Model/DestinationHealthState.cs
class DestinationHealthState (line 9) | public class DestinationHealthState
FILE: src/ReverseProxy/Model/DestinationModel.cs
class DestinationModel (line 19) | public sealed class DestinationModel
method DestinationModel (line 25) | public DestinationModel(DestinationConfig destination)
method HasChanged (line 36) | internal bool HasChanged(DestinationConfig destination)
FILE: src/ReverseProxy/Model/DestinationState.cs
class DestinationState (line 15) | public sealed class DestinationState : IReadOnlyList<DestinationState>
method DestinationState (line 23) | public DestinationState(string destinationId)
method DestinationState (line 34) | public DestinationState(string destinationId, DestinationModel model) ...
method GetEnumerator (line 76) | private Enumerator GetEnumerator()
method GetEnumerator (line 81) | IEnumerator<DestinationState> IEnumerable<DestinationState>.GetEnumera...
method GetEnumerator (line 86) | IEnumerator IEnumerable.GetEnumerator()
type Enumerator (line 91) | private struct Enumerator : IEnumerator<DestinationState>
method Enumerator (line 95) | internal Enumerator(DestinationState instance)
method MoveNext (line 105) | public bool MoveNext()
method Dispose (line 115) | public void Dispose()
method Reset (line 120) | void IEnumerator.Reset()
FILE: src/ReverseProxy/Model/HttpContextFeaturesExtensions.cs
class HttpContextFeaturesExtensions (line 13) | public static class HttpContextFeaturesExtensions
method GetRouteModel (line 18) | public static RouteModel GetRouteModel(this HttpContext context)
method GetReverseProxyFeature (line 31) | public static IReverseProxyFeature GetReverseProxyFeature(this HttpCon...
method GetForwarderErrorFeature (line 39) | public static IForwarderErrorFeature? GetForwarderErrorFeature(this Ht...
method ReassignProxyRequest (line 49) | public static void ReassignProxyRequest(this HttpContext context, Clus...
method ReassignProxyRequest (line 69) | public static void ReassignProxyRequest(this HttpContext context, Rout...
FILE: src/ReverseProxy/Model/IClusterChangeListener.cs
type IClusterChangeListener (line 9) | public interface IClusterChangeListener
method OnClusterAdded (line 15) | void OnClusterAdded(ClusterState cluster);
method OnClusterChanged (line 21) | void OnClusterChanged(ClusterState cluster);
method OnClusterRemoved (line 27) | void OnClusterRemoved(ClusterState cluster);
FILE: src/ReverseProxy/Model/IReverseProxyApplicationBuilder.cs
type IReverseProxyApplicationBuilder (line 9) | public interface IReverseProxyApplicationBuilder : IApplicationBuilder
FILE: src/ReverseProxy/Model/IReverseProxyFeature.cs
type IReverseProxyFeature (line 11) | public interface IReverseProxyFeature
FILE: src/ReverseProxy/Model/ProxyPipelineInitializerMiddleware.cs
class ProxyPipelineInitializerMiddleware (line 19) | internal sealed class ProxyPipelineInitializerMiddleware
method ProxyPipelineInitializerMiddleware (line 25) | public ProxyPipelineInitializerMiddleware(RequestDelegate next, ILogge...
method Invoke (line 36) | public Task Invoke(HttpContext context)
method AwaitWithActivity (line 71) | private async Task AwaitWithActivity(HttpContext context, Activity act...
method EnsureRequestTimeoutPolicyIsAppliedCorrectly (line 86) | private void EnsureRequestTimeoutPolicyIsAppliedCorrectly(HttpContext ...
method TimeoutPolicyRequestedATimeoutBeSet (line 116) | private bool TimeoutPolicyRequestedATimeoutBeSet(RequestTimeoutAttribu...
class Log (line 144) | private static class Log
method NoClusterFound (line 156) | public static void NoClusterFound(ILogger logger, string routeId)
method TimeoutNotApplied (line 161) | public static void TimeoutNotApplied(ILogger logger, string routeId)
FILE: src/ReverseProxy/Model/ReverseProxyApplicationBuilder.cs
class ReverseProxyApplicationBuilder (line 12) | public class ReverseProxyApplicationBuilder : IReverseProxyApplicationBu...
method ReverseProxyApplicationBuilder (line 16) | public ReverseProxyApplicationBuilder(IApplicationBuilder applicationB...
method Build (line 32) | public RequestDelegate Build() => _applicationBuilder.Build();
method New (line 34) | public IApplicationBuilder New() => _applicationBuilder.New();
method Use (line 36) | public IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> ...
FILE: src/ReverseProxy/Model/ReverseProxyFeature.cs
class ReverseProxyFeature (line 12) | public class ReverseProxyFeature : IReverseProxyFeature
FILE: src/ReverseProxy/Model/RouteModel.cs
class RouteModel (line 19) | public sealed class RouteModel
method RouteModel (line 24) | public RouteModel(
method HasConfigChanged (line 53) | internal bool HasConfigChanged(RouteConfig newConfig, ClusterState? cl...
FILE: src/ReverseProxy/Model/RouteState.cs
class RouteState (line 12) | internal sealed class RouteState
method RouteState (line 16) | public RouteState(string routeId)
FILE: src/ReverseProxy/Routing/DirectForwardingIEndpointRouteBuilderExtensions.cs
class DirectForwardingIEndpointRouteBuilderExtensions (line 18) | public static class DirectForwardingIEndpointRouteBuilderExtensions
method MapForwarder (line 23) | public static IEndpointConventionBuilder MapForwarder(this IEndpointRo...
method MapForwarder (line 32) | public static IEndpointConventionBuilder MapForwarder(this IEndpointRo...
method MapForwarder (line 41) | public static IEndpointConventionBuilder MapForwarder(this IEndpointRo...
method MapForwarder (line 50) | public static IEndpointConventionBuilder MapForwarder(this IEndpointRo...
method MapForwarder (line 59) | public static IEndpointConventionBuilder MapForwarder(this IEndpointRo...
method MapForwarder (line 72) | public static IEndpointConventionBuilder MapForwarder(this IEndpointRo...
method MapForwarder (line 81) | public static IEndpointConventionBuilder MapForwarder(this IEndpointRo...
method MapForwarder (line 92) | public static IEndpointConventionBuilder MapForwarder(this IEndpointRo...
FILE: src/ReverseProxy/Routing/HeaderMatcher.cs
class HeaderMatcher (line 15) | internal sealed class HeaderMatcher
method HeaderMatcher (line 20) | public HeaderMatcher(string name, IReadOnlyList<string>? values, Heade...
FILE: src/ReverseProxy/Routing/HeaderMatcherPolicy.cs
class HeaderMatcherPolicy (line 17) | internal sealed class HeaderMatcherPolicy : MatcherPolicy, IEndpointComp...
method AppliesToEndpoints (line 27) | bool IEndpointSelectorPolicy.AppliesToEndpoints(IReadOnlyList<Endpoint...
method AppliesToEndpointsCore (line 40) | private static bool AppliesToEndpointsCore(IReadOnlyList<Endpoint> end...
method ApplyAsync (line 50) | public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates)
method TryMatchExactOrPrefix (line 98) | private static bool TryMatchExactOrPrefix(HeaderMatcher matcher, Strin...
method TryMatchContainsOrNotContains (line 163) | private static bool TryMatchContainsOrNotContains(HeaderMatcher matche...
class HeaderMetadataEndpointComparer (line 189) | private sealed class HeaderMetadataEndpointComparer : EndpointMetadata...
method CompareMetadata (line 191) | protected override int CompareMetadata(IHeaderMetadata? x, IHeaderMe...
FILE: src/ReverseProxy/Routing/HeaderMetadata.cs
class HeaderMetadata (line 13) | internal sealed class HeaderMetadata : IHeaderMetadata
method HeaderMetadata (line 15) | public HeaderMetadata(IReadOnlyList<HeaderMatcher> matchers)
FILE: src/ReverseProxy/Routing/IHeaderMetadata.cs
type IHeaderMetadata (line 9) | internal interface IHeaderMetadata
FILE: src/ReverseProxy/Routing/IQueryParameterMetadata.cs
type IQueryParameterMetadata (line 9) | internal interface IQueryParameterMetadata
FILE: src/ReverseProxy/Routing/ProxyEndpointFactory.cs
class ProxyEndpointFactory (line 25) | internal sealed class ProxyEndpointFactory
method CreateEndpoint (line 36) | public Endpoint CreateEndpoint(RouteModel route, IReadOnlyList<Action<...
method SetProxyPipeline (line 160) | public void SetProxyPipeline(RequestDelegate pipeline)
FILE: src/ReverseProxy/Routing/QueryParameterMatcher.cs
class QueryParameterMatcher (line 14) | internal sealed class QueryParameterMatcher
method QueryParameterMatcher (line 19) | public QueryParameterMatcher(string name, IReadOnlyList<string>? value...
FILE: src/ReverseProxy/Routing/QueryParameterMatcherPolicy.cs
class QueryParameterMatcherPolicy (line 16) | internal sealed class QueryParameterMatcherPolicy : MatcherPolicy, IEndp...
method AppliesToEndpoints (line 26) | bool IEndpointSelectorPolicy.AppliesToEndpoints(IReadOnlyList<Endpoint...
method AppliesToEndpointsCore (line 39) | private static bool AppliesToEndpointsCore(IReadOnlyList<Endpoint> end...
method ApplyAsync (line 49) | public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates)
method TryMatch (line 96) | private static bool TryMatch(QueryParameterMatcher matcher, StringValu...
class QueryParameterMetadataEndpointComparer (line 130) | private sealed class QueryParameterMetadataEndpointComparer : Endpoint...
method CompareMetadata (line 132) | protected override int CompareMetadata(IQueryParameterMetadata? x, I...
FILE: src/ReverseProxy/Routing/QueryParameterMetadata.cs
class QueryParameterMetadata (line 13) | internal sealed class QueryParameterMetadata : IQueryParameterMetadata
method QueryParameterMetadata (line 15) | public QueryParameterMetadata(IReadOnlyList<QueryParameterMatcher> mat...
FILE: src/ReverseProxy/Routing/ReverseProxyConventionBuilder.cs
class ReverseProxyConventionBuilder (line 12) | public class ReverseProxyConventionBuilder : IEndpointConventionBuilder
method ReverseProxyConventionBuilder (line 16) | internal ReverseProxyConventionBuilder(List<Action<EndpointBuilder>> c...
method Add (line 26) | public void Add(Action<EndpointBuilder> convention)
method ConfigureEndpoints (line 38) | public ReverseProxyConventionBuilder ConfigureEndpoints(Action<IEndpoi...
method ConfigureEndpoints (line 58) | public ReverseProxyConventionBuilder ConfigureEndpoints(Action<IEndpoi...
method ConfigureEndpoints (line 79) | public ReverseProxyConventionBuilder ConfigureEndpoints(Action<IEndpoi...
class EndpointBuilderConventionBuilder (line 98) | private sealed class EndpointBuilderConventionBuilder : IEndpointConve...
method EndpointBuilderConventionBuilder (line 102) | public EndpointBuilderConventionBuilder(EndpointBuilder endpointBuil...
method Add (line 107) | public void Add(Action<EndpointBuilder> convention)
FILE: src/ReverseProxy/Routing/ReverseProxyIEndpointRouteBuilderExtensions.cs
class ReverseProxyIEndpointRouteBuilderExtensions (line 20) | public static class ReverseProxyIEndpointRouteBuilderExtensions
method MapReverseProxy (line 25) | public static ReverseProxyConventionBuilder MapReverseProxy(this IEndp...
method MapReverseProxy (line 39) | public static ReverseProxyConventionBuilder MapReverseProxy(this IEndp...
method GetOrCreateDataSource (line 57) | private static ProxyConfigManager GetOrCreateDataSource(IEndpointRoute...
FILE: src/ReverseProxy/ServiceDiscovery/DnsDestinationResolver.cs
class DnsDestinationResolver (line 18) | internal sealed class DnsDestinationResolver : IDestinationResolver
method DnsDestinationResolver (line 26) | public DnsDestinationResolver(IOptionsMonitor<DnsDestinationResolverOp...
method ResolveDestinationsAsync (line 32) | public async ValueTask<ResolvedDestinationCollection> ResolveDestinati...
method ResolveHostAsync (line 61) | private static async Task<List<(string Name, DestinationConfig Config)...
FILE: src/ReverseProxy/ServiceDiscovery/DnsDestinationResolverOptions.cs
class DnsDestinationResolverOptions (line 12) | public class DnsDestinationResolverOptions
FILE: src/ReverseProxy/ServiceDiscovery/IDestinationResolver.cs
type IDestinationResolver (line 14) | public interface IDestinationResolver
method ResolveDestinationsAsync (line 24) | ValueTask<ResolvedDestinationCollection> ResolveDestinationsAsync(
FILE: src/ReverseProxy/ServiceDiscovery/NoOpDestinationResolver.cs
class NoOpDestinationResolver (line 14) | internal sealed class NoOpDestinationResolver : IDestinationResolver
method ResolveDestinationsAsync (line 16) | public ValueTask<ResolvedDestinationCollection> ResolveDestinationsAsy...
FILE: src/ReverseProxy/ServiceDiscovery/ResolvedDestinationCollection.cs
class ResolvedDestinationCollection (line 13) | public sealed class ResolvedDestinationCollection
method ResolvedDestinationCollection (line 15) | public ResolvedDestinationCollection(IReadOnlyDictionary<string, Desti...
FILE: src/ReverseProxy/SessionAffinity/AffinitizeTransform.cs
class AffinitizeTransform (line 16) | internal sealed class AffinitizeTransform : ResponseTransform
method AffinitizeTransform (line 20) | public AffinitizeTransform(ISessionAffinityPolicy sessionAffinityPolicy)
method ApplyAsync (line 26) | public override ValueTask ApplyAsync(ResponseTransformContext context)
FILE: src/ReverseProxy/SessionAffinity/AffinitizeTransformProvider.cs
class AffinitizeTransformProvider (line 12) | internal sealed class AffinitizeTransformProvider : ITransformProvider
method AffinitizeTransformProvider (line 16) | public AffinitizeTransformProvider(IEnumerable<ISessionAffinityPolicy>...
method ValidateRoute (line 22) | public void ValidateRoute(TransformRouteValidationContext context)
method ValidateCluster (line 26) | public void ValidateCluster(TransformClusterValidationContext context)
method Apply (line 47) | public void Apply(TransformBuilderContext context)
FILE: src/ReverseProxy/SessionAffinity/AffinityHelpers.cs
class AffinityHelpers (line 10) | internal static class AffinityHelpers
method CreateCookieOptions (line 12) | internal static CookieOptions CreateCookieOptions(SessionAffinityCooki...
FILE: src/ReverseProxy/SessionAffinity/AffinityResult.cs
type AffinityResult (line 12) | public readonly struct AffinityResult
method AffinityResult (line 18) | public AffinityResult(IReadOnlyList<DestinationState>? destinations, A...
FILE: src/ReverseProxy/SessionAffinity/AffinityStatus.cs
type AffinityStatus (line 9) | public enum AffinityStatus
FILE: src/ReverseProxy/SessionAffinity/AppBuilderSessionAffinityExtensions.cs
class AppBuilderSessionAffinityExtensions (line 11) | public static class AppBuilderSessionAffinityExtensions
method UseSessionAffinity (line 19) | public static IReverseProxyApplicationBuilder UseSessionAffinity(this ...
FILE: src/ReverseProxy/SessionAffinity/ArrCookieSessionAffinityPolicy.cs
class ArrCookieSessionAffinityPolicy (line 13) | internal sealed class ArrCookieSessionAffinityPolicy : BaseHashCookieSes...
method ArrCookieSessionAffinityPolicy (line 17) | public ArrCookieSessionAffinityPolicy(
method GetDestinationHash (line 24) | protected override string GetDestinationHash(DestinationState d)
FILE: src/ReverseProxy/SessionAffinity/BaseEncryptedSessionAffinityPolicy.cs
class BaseEncryptedSessionAffinityPolicy (line 15) | internal abstract class BaseEncryptedSessionAffinityPolicy<T> : ISession...
method BaseEncryptedSessionAffinityPolicy (line 21) | protected BaseEncryptedSessionAffinityPolicy(IDataProtectionProvider d...
method AffinitizeResponse (line 30) | public void AffinitizeResponse(HttpContext context, ClusterState clust...
method FindAffinitizedDestinations (line 51) | public virtual AffinityResult FindAffinitizedDestinations(HttpContext ...
method GetDestinationAffinityKey (line 100) | protected abstract T GetDestinationAffinityKey(DestinationState destin...
method GetRequestAffinityKey (line 102) | protected abstract (T? Key, bool ExtractedSuccessfully) GetRequestAffi...
method SetAffinityKey (line 104) | protected abstract void SetAffinityKey(HttpContext context, ClusterSta...
method Protect (line 106) | protected string Protect(string unencryptedKey)
method Unprotect (line 119) | protected (string? Key, bool ExtractedSuccessfully) Unprotect(string? ...
method Pad (line 146) | private static string Pad(string text)
FILE: src/ReverseProxy/SessionAffinity/BaseHashCookieSessionAffinityPolicy.cs
class BaseHashCookieSessionAffinityPolicy (line 13) | internal abstract class BaseHashCookieSessionAffinityPolicy : ISessionAf...
method BaseHashCookieSessionAffinityPolicy (line 19) | public BaseHashCookieSessionAffinityPolicy(TimeProvider timeProvider, ...
method AffinitizeResponse (line 30) | public void AffinitizeResponse(HttpContext context, ClusterState clust...
method FindAffinitizedDestinations (line 54) | public AffinityResult FindAffinitizedDestinations(HttpContext context,...
method GetDestinationHash (line 90) | protected abstract string GetDestinationHash(DestinationState d);
FILE: src/ReverseProxy/SessionAffinity/CookieSessionAffinityPolicy.cs
class CookieSessionAffinityPolicy (line 13) | internal sealed class CookieSessionAffinityPolicy : BaseEncryptedSession...
method CookieSessionAffinityPolicy (line 17) | public CookieSessionAffinityPolicy(
method GetDestinationAffinityKey (line 29) | protected override string GetDestinationAffinityKey(DestinationState d...
method GetRequestAffinityKey (line 34) | protected override (string? Key, bool ExtractedSuccessfully) GetReques...
method SetAffinityKey (line 40) | protected override void SetAffinityKey(HttpContext context, ClusterSta...
FILE: src/ReverseProxy/SessionAffinity/CustomHeaderSessionAffinityPolicy.cs
class CustomHeaderSessionAffinityPolicy (line 14) | internal sealed class CustomHeaderSessionAffinityPolicy : BaseEncryptedS...
method CustomHeaderSessionAffinityPolicy (line 16) | public CustomHeaderSessionAffinityPolicy(
method GetDestinationAffinityKey (line 24) | protected override string GetDestinationAffinityKey(DestinationState d...
method GetRequestAffinityKey (line 29) | protected override (string? Key, bool ExtractedSuccessfully) GetReques...
method SetAffinityKey (line 50) | protected override void SetAffinityKey(HttpContext context, ClusterSta...
class Log (line 55) | private static class Log
method RequestAffinityHeaderHasMultipleValues (line 62) | public static void RequestAffinityHeaderHasMultipleValues(ILogger lo...
FILE: src/ReverseProxy/SessionAffinity/HashCookieSessionAffinityPolicy.cs
class HashCookieSessionAffinityPolicy (line 13) | internal sealed class HashCookieSessionAffinityPolicy : BaseHashCookieSe...
method HashCookieSessionAffinityPolicy (line 17) | public HashCookieSessionAffinityPolicy(
method GetDestinationHash (line 24) | protected override string GetDestinationHash(DestinationState d)
FILE: src/ReverseProxy/SessionAffinity/IAffinityFailurePolicy.cs
type IAffinityFailurePolicy (line 13) | public interface IAffinityFailurePolicy
method Handle (line 31) | Task<bool> Handle(HttpContext context, ClusterState cluster, AffinityS...
FILE: src/ReverseProxy/SessionAffinity/ISessionAffinityPolicy.cs
type ISessionAffinityPolicy (line 16) | public interface ISessionAffinityPolicy
method FindAffinitizedDestinations (line 31) | AffinityResult FindAffinitizedDestinations(HttpContext context, Cluste...
method FindAffinitizedDestinationsAsync (line 42) | ValueTask<AffinityResult> FindAffinitizedDestinationsAsync(HttpContext...
method AffinitizeResponse (line 56) | void AffinitizeResponse(HttpContext context, ClusterState cluster, Ses...
method AffinitizeResponseAsync (line 66) | ValueTask AffinitizeResponseAsync(HttpContext context, ClusterState cl...
FILE: src/ReverseProxy/SessionAffinity/Log.cs
class Log (line 9) | internal static class Log
method AffinityCannotBeEstablishedBecauseNoDestinationsFound (line 26) | public static void AffinityCannotBeEstablishedBecauseNoDestinationsFou...
method RequestAffinityKeyDecryptionFailed (line 31) | public static void RequestAffinityKeyDecryptionFailed(ILogger logger, ...
method DestinationMatchingToAffinityKeyNotFound (line 36) | public static void DestinationMatchingToAffinityKeyNotFound(ILogger lo...
FILE: src/ReverseProxy/SessionAffinity/RedistributeAffinityFailurePolicy.cs
class RedistributeAffinityFailurePolicy (line 12) | internal sealed class RedistributeAffinityFailurePolicy : IAffinityFailu...
method Handle (line 16) | public Task<bool> Handle(HttpContext context, ClusterState cluster, Af...
FILE: src/ReverseProxy/SessionAffinity/Return503ErrorAffinityFailurePolicy.cs
class Return503ErrorAffinityFailurePolicy (line 12) | internal sealed class Return503ErrorAffinityFailurePolicy : IAffinityFai...
method Handle (line 16) | public Task<bool> Handle(HttpContext context, ClusterState cluster, Af...
FILE: src/ReverseProxy/SessionAffinity/SessionAffinityConstants.cs
class SessionAffinityConstants (line 9) | public static class SessionAffinityConstants
class Policies (line 11) | public static class Policies
class FailurePolicies (line 22) | public static class FailurePolicies
FILE: src/ReverseProxy/SessionAffinity/SessionAffinityMiddleware.cs
class SessionAffinityMiddleware (line 19) | internal sealed class SessionAffinityMiddleware
method SessionAffinityMiddleware (line 26) | public SessionAffinityMiddleware(
method Invoke (line 43) | public Task Invoke(HttpContext context)
method InvokeInternal (line 57) | private async Task InvokeInternal(HttpContext context, IReverseProxyFe...
class Log (line 104) | private static class Log
method AffinityResolutionFailedForCluster (line 116) | public static void AffinityResolutionFailedForCluster(ILogger logger...
method AffinityResolutionFailureWasHandledProcessingWillBeContinued (line 121) | public static void AffinityResolutionFailureWasHandledProcessingWill...
FILE: src/ReverseProxy/Transforms/Builder/ActionTransformProvider.cs
class ActionTransformProvider (line 8) | internal sealed class ActionTransformProvider : ITransformProvider
method ActionTransformProvider (line 12) | public ActionTransformProvider(Action<TransformBuilderContext> action)
method Apply (line 18) | public void Apply(TransformBuilderContext transformBuildContext)
method ValidateRoute (line 23) | public void ValidateRoute(TransformRouteValidationContext context)
method ValidateCluster (line 27) | public void ValidateCluster(TransformClusterValidationContext context)
FILE: src/ReverseProxy/Transforms/Builder/ITransformBuilder.cs
type ITransformBuilder (line 14) | public interface ITransformBuilder
method ValidateRoute (line 20) | IReadOnlyList<Exception> ValidateRoute(RouteConfig route);
method ValidateCluster (line 25) | IReadOnlyList<Exception> ValidateCluster(ClusterConfig cluster);
method Build (line 30) | HttpTransformer Build(RouteConfig route, ClusterConfig? cluster);
method Create (line 32) | HttpTransformer Create(Action<TransformBuilderContext> action);
FILE: src/ReverseProxy/Transforms/Builder/ITransformFactory.cs
type ITransformFactory (line 11) | public interface ITransformFactory
method Validate (line 19) | bool Validate(TransformRouteValidationContext context, IReadOnlyDictio...
method Build (line 28) | bool Build(TransformBuilderContext context, IReadOnlyDictionary<string...
FILE: src/ReverseProxy/Transforms/Builder/ITransformProvider.cs
type ITransformProvider (line 9) | public interface ITransformProvider
method ValidateRoute (line 15) | void ValidateRoute(TransformRouteValidationContext context);
method ValidateCluster (line 21) | void ValidateCluster(TransformClusterValidationContext context);
method Apply (line 28) | void Apply(TransformBuilderContext context);
FILE: src/ReverseProxy/Transforms/Builder/StructuredTransformer.cs
class StructuredTransformer (line 19) | internal sealed class StructuredTransformer : HttpTransformer
method StructuredTransformer (line 24) | internal StructuredTransformer(bool? copyRequestHeaders, bool? copyRes...
method TransformRequestAsync (line 72) | public override ValueTask TransformRequestAsync(HttpContext httpContex...
method TransformResponseAsync (line 75) | public override ValueTask<bool> TransformResponseAsync(HttpContext htt...
method TransformResponseTrailersAsync (line 78) | public override ValueTask TransformResponseTrailersAsync(HttpContext h...
method TransformRequestAsync (line 82) | public override async ValueTask TransformRequestAsync(HttpContext http...
method TransformResponseAsync (line 132) | public override async ValueTask<bool> TransformResponseAsync(HttpConte...
method TransformResponseTrailersAsync (line 167) | public override async ValueTask TransformResponseTrailersAsync(HttpCon...
FILE: src/ReverseProxy/Transforms/Builder/TransformBuilder.cs
class TransformBuilder (line 15) | internal sealed class TransformBuilder : ITransformBuilder
method TransformBuilder (line 24) | public TransformBuilder(IServiceProvider services, IEnumerable<ITransf...
method ValidateRoute (line 36) | public IReadOnlyList<Exception> ValidateRoute(RouteConfig route)
method ValidateCluster (line 77) | public IReadOnlyList<Exception> ValidateCluster(ClusterConfig cluster)
method Build (line 96) | public HttpTransformer Build(RouteConfig route, ClusterConfig? cluster)
method BuildInternal (line 102) | internal StructuredTransformer BuildInternal(RouteConfig route, Cluste...
method Create (line 143) | public HttpTransformer Create(Action<TransformBuilderContext> action)
method CreateInternal (line 148) | internal StructuredTransformer CreateInternal(Action<TransformBuilderC...
method CreateTransformer (line 160) | internal static StructuredTransformer CreateTransformer(TransformBuild...
FILE: src/ReverseProxy/Transforms/Builder/TransformBuilderContext.cs
class TransformBuilderContext (line 13) | public class TransformBuilderContext
FILE: src/ReverseProxy/Transforms/Builder/TransformClusterValidationContext.cs
class TransformClusterValidationContext (line 13) | public class TransformClusterValidationContext
FILE: src/ReverseProxy/Transforms/Builder/TransformHelpers.cs
class TransformHelpers (line 9) | public static class TransformHelpers
method TryCheckTooManyParameters (line 11) | public static void TryCheckTooManyParameters(TransformRouteValidationC...
method CheckTooManyParameters (line 19) | public static void CheckTooManyParameters(IReadOnlyDictionary<string, ...
method RemoveAllXForwardedHeaders (line 27) | internal static void RemoveAllXForwardedHeaders(TransformBuilderContex...
method RemoveForwardedHeader (line 35) | internal static void RemoveForwardedHeader(TransformBuilderContext con...
FILE: src/ReverseProxy/Transforms/Builder/TransformRouteValidationContext.cs
class TransformRouteValidationContext (line 13) | public class TransformRouteValidationContext
FILE: src/ReverseProxy/Transforms/ForwardedTransformActions.cs
type ForwardedTransformActions (line 6) | public enum ForwardedTransformActions
FILE: src/ReverseProxy/Transforms/ForwardedTransformExtensions.cs
class ForwardedTransformExtensions (line 15) | public static class ForwardedTransformExtensions
method WithTransformXForwarded (line 20) | public static RouteConfig WithTransformXForwarded(
method AddXForwardedFor (line 60) | public static TransformBuilderContext AddXForwardedFor(this TransformB...
method AddXForwardedHost (line 74) | public static TransformBuilderContext AddXForwardedHost(this Transform...
method AddXForwardedProto (line 88) | public static TransformBuilderContext AddXForwardedProto(this Transfor...
method AddXForwardedPrefix (line 102) | public static TransformBuilderContext AddXForwardedPrefix(this Transfo...
method AddXForwarded (line 119) | public static TransformBuilderContext AddXForwarded(this TransformBuil...
method WithTransformForwarded (line 138) | public static RouteConfig WithTransformForwarded(this RouteConfig rout...
method AddForwarded (line 186) | public static TransformBuilderContext AddForwarded(this TransformBuild...
method WithTransformClientCertHeader (line 215) | public static RouteConfig WithTransformClientCertHeader(this RouteConf...
method AddClientCertHeader (line 226) | public static TransformBuilderContext AddClientCertHeader(this Transfo...
FILE: src/ReverseProxy/Transforms/ForwardedTransformFactory.cs
class ForwardedTransformFactory (line 11) | internal sealed class ForwardedTransformFactory : ITransformFactory
method ForwardedTransformFactory (line 29) | public ForwardedTransformFactory(IRandomFactory randomFactory)
method Validate (line 35) | public bool Validate(TransformRouteValidationContext context, IReadOnl...
method Build (line 131) | public bool Build(TransformBuilderContext context, IReadOnlyDictionary...
method ValidateAction (line 272) | private static void ValidateAction(TransformRouteValidationContext con...
FILE: src/ReverseProxy/Transforms/HttpMethodChangeTransform.cs
class HttpMethodChangeTransform (line 14) | public class HttpMethodChangeTransform : RequestTransform
method HttpMethodChangeTransform (line 21) | public HttpMethodChangeTransform(string fromMethod, string toMethod)
method ApplyAsync (line 42) | public override ValueTask ApplyAsync(RequestTransformContext context)
method GetCanonicalizedValue (line 52) | private static HttpMethod GetCanonicalizedValue(string method)
FILE: src/ReverseProxy/Transforms/HttpMethodTransformExtensions.cs
class HttpMethodTransformExtensions (line 12) | public static class HttpMethodTransformExtensions
method WithTransformHttpMethodChange (line 17) | public static RouteConfig WithTransformHttpMethodChange(this RouteConf...
method AddHttpMethodChange (line 29) | public static TransformBuilderContext AddHttpMethodChange(this Transfo...
FILE: src/ReverseProxy/Transforms/HttpMethodTransformFactory.cs
class HttpMethodTransformFactory (line 10) | internal sealed class HttpMethodTransformFactory : ITransformFactory
method Validate (line 15) | public bool Validate(TransformRouteValidationContext context, IReadOnl...
method Build (line 33) | public bool Build(TransformBuilderContext context, IReadOnlyDictionary...
FILE: src/ReverseProxy/Transforms/NodeFormat.cs
type NodeFormat (line 9) | public enum NodeFormat
FILE: src/ReverseProxy/Transforms/PathRouteValuesTransform.cs
class PathRouteValuesTransform (line 16) | public class PathRouteValuesTransform : RequestTransform
method PathRouteValuesTransform (line 25) | public PathRouteValuesTransform(
method ApplyAsync (line 37) | public override ValueTask ApplyAsync(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/PathStringTransform.cs
class PathStringTransform (line 13) | public class PathStringTransform : RequestTransform
method PathStringTransform (line 20) | public PathStringTransform(PathTransformMode mode, PathString value)
method ApplyAsync (line 33) | public override ValueTask ApplyAsync(RequestTransformContext context)
type PathTransformMode (line 55) | public enum PathTransformMode
FILE: src/ReverseProxy/Transforms/PathTransformExtensions.cs
class PathTransformExtensions (line 17) | public static class PathTransformExtensions
method WithTransformPathSet (line 22) | public static RouteConfig WithTransformPathSet(this RouteConfig route,...
method AddPathSet (line 35) | public static TransformBuilderContext AddPathSet(this TransformBuilder...
method WithTransformPathPrefix (line 44) | public static RouteConfig WithTransformPathPrefix(this RouteConfig rou...
method AddPathPrefix (line 57) | public static TransformBuilderContext AddPathPrefix(this TransformBuil...
method WithTransformPathRemovePrefix (line 66) | public static RouteConfig WithTransformPathRemovePrefix(this RouteConf...
method AddPathRemovePrefix (line 79) | public static TransformBuilderContext AddPathRemovePrefix(this Transfo...
method WithTransformPathRouteValues (line 88) | public static RouteConfig WithTransformPathRouteValues(this RouteConfi...
method AddPathRouteValues (line 101) | public static TransformBuilderContext AddPathRouteValues(this Transfor...
FILE: src/ReverseProxy/Transforms/PathTransformFactory.cs
class PathTransformFactory (line 12) | internal sealed class PathTransformFactory : ITransformFactory
method PathTransformFactory (line 21) | public PathTransformFactory(TemplateBinderFactory binderFactory)
method Validate (line 27) | public bool Validate(TransformRouteValidationContext context, IReadOnl...
method CheckPathNotNull (line 58) | private static void CheckPathNotNull(TransformRouteValidationContext c...
method Build (line 66) | public bool Build(TransformBuilderContext context, IReadOnlyDictionary...
method MakePathString (line 101) | private static PathString MakePathString(string path)
FILE: src/ReverseProxy/Transforms/QueryParameterFromRouteTransform.cs
class QueryParameterRouteTransform (line 8) | public class QueryParameterRouteTransform : QueryParameterTransform
method QueryParameterRouteTransform (line 10) | public QueryParameterRouteTransform(QueryStringTransformMode mode, str...
method GetValue (line 29) | protected override string? GetValue(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/QueryParameterFromStaticTransform.cs
class QueryParameterFromStaticTransform (line 8) | public class QueryParameterFromStaticTransform : QueryParameterTransform
method QueryParameterFromStaticTransform (line 10) | public QueryParameterFromStaticTransform(QueryStringTransformMode mode...
method GetValue (line 26) | protected override string GetValue(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/QueryParameterRemoveTransform.cs
class QueryParameterRemoveTransform (line 12) | public class QueryParameterRemoveTransform : RequestTransform
method QueryParameterRemoveTransform (line 14) | public QueryParameterRemoveTransform(string key)
method ApplyAsync (line 27) | public override ValueTask ApplyAsync(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/QueryParameterTransform.cs
class QueryParameterTransform (line 10) | public abstract class QueryParameterTransform : RequestTransform
method QueryParameterTransform (line 12) | public QueryParameterTransform(QueryStringTransformMode mode, string key)
method ApplyAsync (line 28) | public override ValueTask ApplyAsync(RequestTransformContext context)
method GetValue (line 56) | protected abstract string? GetValue(RequestTransformContext context);
type QueryStringTransformMode (line 59) | public enum QueryStringTransformMode
FILE: src/ReverseProxy/Transforms/QueryTransformContext.cs
class QueryTransformContext (line 15) | public class QueryTransformContext
method QueryTransformContext (line 21) | public QueryTransformContext(HttpRequest request)
FILE: src/ReverseProxy/Transforms/QueryTransformExtensions.cs
class QueryTransformExtensions (line 12) | public static class QueryTransformExtensions
method WithTransformQueryValue (line 17) | public static RouteConfig WithTransformQueryValue(this RouteConfig rou...
method AddQueryValue (line 30) | public static TransformBuilderContext AddQueryValue(this TransformBuil...
method WithTransformQueryRouteValue (line 41) | public static RouteConfig WithTransformQueryRouteValue(this RouteConfi...
method AddQueryRouteValue (line 54) | public static TransformBuilderContext AddQueryRouteValue(this Transfor...
method WithTransformQueryRemoveKey (line 65) | public static RouteConfig WithTransformQueryRemoveKey(this RouteConfig...
method AddQueryRemoveKey (line 76) | public static TransformBuilderContext AddQueryRemoveKey(this Transform...
FILE: src/ReverseProxy/Transforms/QueryTransformFactory.cs
class QueryTransformFactory (line 10) | internal sealed class QueryTransformFactory : ITransformFactory
method Validate (line 18) | public bool Validate(TransformRouteValidationContext context, IReadOnl...
method Build (line 48) | public bool Build(TransformBuilderContext context, IReadOnlyDictionary...
FILE: src/ReverseProxy/Transforms/RequestFuncTransform.cs
class RequestFuncTransform (line 12) | public class RequestFuncTransform : RequestTransform
method RequestFuncTransform (line 16) | public RequestFuncTransform(Func<RequestTransformContext, ValueTask> f...
method ApplyAsync (line 23) | public override ValueTask ApplyAsync(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/RequestHeaderClientCertTransform.cs
class RequestHeaderClientCertTransform (line 12) | public class RequestHeaderClientCertTransform : RequestTransform
method RequestHeaderClientCertTransform (line 14) | public RequestHeaderClientCertTransform(string headerName)
method ApplyAsync (line 27) | public override ValueTask ApplyAsync(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/RequestHeaderForwardedTransform.cs
class RequestHeaderForwardedTransform (line 17) | public class RequestHeaderForwardedTransform : RequestTransform
method RequestHeaderForwardedTransform (line 28) | public RequestHeaderForwardedTransform(IRandomFactory randomFactory, N...
method ApplyAsync (line 51) | public override ValueTask ApplyAsync(RequestTransformContext context)
method GetHeaderValue (line 78) | private string GetHeaderValue(HttpContext httpContext)
method AppendProto (line 88) | private void AppendProto(HttpContext context, ref ValueStringBuilder b...
method AppendHost (line 98) | private void AppendHost(HttpContext context, ref ValueStringBuilder bu...
method AppendFor (line 113) | private void AppendFor(HttpContext context, ref ValueStringBuilder bui...
method AppendBy (line 126) | private void AppendBy(HttpContext context, ref ValueStringBuilder buil...
method AppendNode (line 140) | private void AppendNode(IPAddress? ipAddress, int port, NodeFormat for...
method AppendRandom (line 214) | private void AppendRandom(ref ValueStringBuilder builder)
FILE: src/ReverseProxy/Transforms/RequestHeaderOriginalHostTransform.cs
class RequestHeaderOriginalHostTransform (line 15) | public class RequestHeaderOriginalHostTransform : RequestTransform
method RequestHeaderOriginalHostTransform (line 26) | private RequestHeaderOriginalHostTransform(bool useOriginalHost)
method ApplyAsync (line 33) | public override ValueTask ApplyAsync(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/RequestHeaderRemoveTransform.cs
class RequestHeaderRemoveTransform (line 12) | public class RequestHeaderRemoveTransform : RequestTransform
method RequestHeaderRemoveTransform (line 14) | public RequestHeaderRemoveTransform(string headerName)
method ApplyAsync (line 27) | public override ValueTask ApplyAsync(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/RequestHeaderRouteValueTransform.cs
class RequestHeaderRouteValueTransform (line 8) | public class RequestHeaderRouteValueTransform : RequestHeaderTransform
method RequestHeaderRouteValueTransform (line 10) | public RequestHeaderRouteValueTransform(string headerName, string rout...
method GetValue (line 28) | protected override string? GetValue(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/RequestHeaderTransform.cs
class RequestHeaderTransform (line 10) | public abstract class RequestHeaderTransform : RequestTransform
method RequestHeaderTransform (line 12) | protected RequestHeaderTransform(string headerName, bool append)
method ApplyAsync (line 26) | public override ValueTask ApplyAsync(RequestTransformContext context)
method GetValue (line 51) | protected abstract string? GetValue(RequestTransformContext context);
FILE: src/ReverseProxy/Transforms/RequestHeaderValueTransform.cs
class RequestHeaderValueTransform (line 12) | public class RequestHeaderValueTransform : RequestHeaderTransform
method RequestHeaderValueTransform (line 14) | public RequestHeaderValueTransform(string headerName, string value, bo...
method ApplyAsync (line 24) | public override ValueTask ApplyAsync(RequestTransformContext context)
method GetValue (line 30) | protected override string GetValue(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/RequestHeaderXForwardedForTransform.cs
class RequestHeaderXForwardedForTransform (line 14) | public class RequestHeaderXForwardedForTransform : RequestTransform
method RequestHeaderXForwardedForTransform (line 21) | public RequestHeaderXForwardedForTransform(string headerName, Forwarde...
method ApplyAsync (line 38) | public override ValueTask ApplyAsync(RequestTransformContext context)
method Append (line 73) | private void Append(RequestTransformContext context, string? remoteIp)
FILE: src/ReverseProxy/Transforms/RequestHeaderXForwardedHostTransform.cs
class RequestHeaderXForwardedHostTransform (line 14) | public class RequestHeaderXForwardedHostTransform : RequestTransform
method RequestHeaderXForwardedHostTransform (line 21) | public RequestHeaderXForwardedHostTransform(string headerName, Forward...
method ApplyAsync (line 34) | public override ValueTask ApplyAsync(RequestTransformContext context)
method Append (line 62) | private void Append(RequestTransformContext context, Microsoft.AspNetC...
FILE: src/ReverseProxy/Transforms/RequestHeaderXForwardedPrefixTransform.cs
class RequestHeaderXForwardedPrefixTransform (line 14) | public class RequestHeaderXForwardedPrefixTransform : RequestTransform
method RequestHeaderXForwardedPrefixTransform (line 16) | public RequestHeaderXForwardedPrefixTransform(string headerName, Forwa...
method ApplyAsync (line 32) | public override ValueTask ApplyAsync(RequestTransformContext context)
method Append (line 60) | private void Append(RequestTransformContext context, Microsoft.AspNetC...
FILE: src/ReverseProxy/Transforms/RequestHeaderXForwardedProtoTransform.cs
class RequestHeaderXForwardedProtoTransform (line 14) | public class RequestHeaderXForwardedProtoTransform : RequestTransform
method RequestHeaderXForwardedProtoTransform (line 21) | public RequestHeaderXForwardedProtoTransform(string headerName, Forwar...
method ApplyAsync (line 37) | public override ValueTask ApplyAsync(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/RequestHeadersAllowedTransform.cs
class RequestHeadersAllowedTransform (line 16) | public class RequestHeadersAllowedTransform : RequestTransform
method RequestHeadersAllowedTransform (line 18) | public RequestHeadersAllowedTransform(string[] allowedHeaders)
method ApplyAsync (line 31) | public override ValueTask ApplyAsync(RequestTransformContext context)
FILE: src/ReverseProxy/Transforms/RequestHeadersTransformExtensions.cs
class RequestHeadersTransformExtensions (line 12) | public static class RequestHeadersTransformExtensions
method WithTransformCopyRequestHeaders (line 17) | public static RouteConfig WithTransformCopyRequestHeaders(this RouteCo...
method WithTransformUseOriginalHostHeader (line 28) | public static RouteConfig WithTransformUseOriginalHostHeader(this Rout...
method WithTransformRequestHeader (line 39) | public static RouteConfig WithTransformRequestHeader(this RouteConfig ...
method WithTransformRequestHeaderRouteValue (line 52) | public static RouteConfig WithTransformRequestHeaderRouteValue(this Ro...
method WithTransformRequestHeaderRemove (line 65) | public static RouteConfig WithTransformRequestHeaderRemove(this RouteC...
method WithTransformRequestHeadersAllowed (line 77) | public static RouteConfig WithTransformRequestHeadersAllowed(this Rout...
method AddRequestHeader (line 88) | public static TransformBuilderContext AddRequestHeader(this TransformB...
method AddRequestHeaderRouteValue (line 97) | public static TransformBuilderContext AddRequestHeaderRouteValue(this ...
method AddRequestHeaderRemove (line 106) | public static TransformBuilderContext AddRequestHeaderRemove(this Tran...
method AddRequestHeadersAllowed (line 116) | public static TransformBuilderContext AddRequestHeadersAllowed(this Tr...
method AddOriginalHost (line 126) | public static TransformBuilderContext AddOriginalHost(this TransformBu...
FILE: src/ReverseProxy/Transforms/RequestHeadersTransformFactory.cs
class RequestHeadersTransformFactory (line 10) | internal sealed class RequestHeadersTransformFactory : ITransformFactory
method Validate (line 21) | public bool Validate(TransformRouteValidationContext context, IReadOnl...
method Build (line 71) | public bool Build(TransformBuilderContext context, IReadOnlyDictionary...
FILE: src/ReverseProxy/Transforms/RequestTransform.cs
class RequestTransform (line 14) | public abstract class RequestTransform
method ApplyAsync (line 19) | public abstract ValueTask ApplyAsync(RequestTransformContext context);
method TakeHeader (line 30) | public static StringValues TakeHeader(RequestTransformContext context,...
method AddHeader (line 58) | public static void AddHeader(RequestTransformContext context, string h...
method RemoveHeader (line 69) | public static void RemoveHeader(RequestTransformContext context, strin...
FILE: src/ReverseProxy/Transforms/RequestTransformContext.cs
class RequestTransformContext (line 13) | public class RequestTransformContext
FILE: src/ReverseProxy/Transforms/ResponseCondition.cs
type ResponseCondition (line 9) | public enum ResponseCondition
FILE: src/ReverseProxy/Transforms/ResponseFuncTransform.cs
class ResponseFuncTransform (line 12) | public class ResponseFuncTransform : ResponseTransform
method ResponseFuncTransform (line 16) | public ResponseFuncTransform(Func<ResponseTransformContext, ValueTask>...
method ApplyAsync (line 23) | public override ValueTask ApplyAsync(ResponseTransformContext context)
FILE: src/ReverseProxy/Transforms/ResponseHeaderRemoveTransform.cs
class ResponseHeaderRemoveTransform (line 12) | public class ResponseHeaderRemoveTransform : ResponseTransform
method ResponseHeaderRemoveTransform (line 14) | public ResponseHeaderRemoveTransform(string headerName, ResponseCondit...
method ApplyAsync (line 31) | public override ValueTask ApplyAsync(ResponseTransformContext context)
FILE: src/ReverseProxy/Transforms/ResponseHeaderValueTransform.cs
class ResponseHeaderValueTransform (line 13) | public class ResponseHeaderValueTransform : ResponseTransform
method ResponseHeaderValueTransform (line 15) | public ResponseHeaderValueTransform(string headerName, string value, b...
method ApplyAsync (line 39) | public override ValueTask ApplyAsync(ResponseTransformContext context)
FILE: src/ReverseProxy/Transforms/ResponseHeadersAllowedTransform.cs
class ResponseHeadersAllowedTransform (line 18) | public class ResponseHeadersAllowedTransform : ResponseTransform
method ResponseHeadersAllowedTransform (line 20) | public ResponseHeadersAllowedTransform(string[] allowedHeaders)
method ApplyAsync (line 33) | public override ValueTask ApplyAsync(ResponseTransformContext context)
method CopyResponseHeaders (line 58) | private void CopyResponseHeaders(HttpHeaders source, IHeaderDictionary...
FILE: src/ReverseProxy/Transforms/ResponseTrailerRemoveTransform.cs
class ResponseTrailerRemoveTransform (line 14) | public class ResponseTrailerRemoveTransform : ResponseTrailersTransform
method ResponseTrailerRemoveTransform (line 16) | public ResponseTrailerRemoveTransform(string headerName, ResponseCondi...
method ApplyAsync (line 33) | public override ValueTask ApplyAsync(ResponseTrailersTransformContext ...
FILE: src/ReverseProxy/Transforms/ResponseTrailerValueTransform.cs
class ResponseTrailerValueTransform (line 13) | public class ResponseTrailerValueTransform : ResponseTrailersTransform
method ResponseTrailerValueTransform (line 15) | public ResponseTrailerValueTransform(string headerName, string value, ...
method ApplyAsync (line 39) | public override ValueTask ApplyAsync(ResponseTrailersTransformContext ...
FILE: src/ReverseProxy/Transforms/ResponseTrailersAllowedTransform.cs
class ResponseTrailersAllowedTransform (line 19) | public class ResponseTrailersAllowedTransform : ResponseTrailersTransform
method ResponseTrailersAllowedTransform (line 21) | public ResponseTrailersAllowedTransform(string[] allowedHeaders)
method ApplyAsync (line 34) | public override ValueTask ApplyAsync(ResponseTrailersTransformContext ...
method CopyResponseHeaders (line 58) | private void CopyResponseHeaders(HttpHeaders source, IHeaderDictionary...
FILE: src/ReverseProxy/Transforms/ResponseTrailersFuncTransform.cs
class ResponseTrailersFuncTransform (line 12) | public class ResponseTrailersFuncTransform : ResponseTrailersTransform
method ResponseTrailersFuncTransform (line 16) | public ResponseTrailersFuncTransform(Func<ResponseTrailersTransformCon...
method ApplyAsync (line 23) | public override ValueTask ApplyAsync(ResponseTrailersTransformContext ...
FILE: src/ReverseProxy/Transforms/ResponseTrailersTransform.cs
class ResponseTrailersTransform (line 17) | public abstract class ResponseTrailersTransform
method ApplyAsync (line 23) | public abstract ValueTask ApplyAsync(ResponseTrailersTransformContext ...
method TakeHeader (line 34) | public static StringValues TakeHeader(ResponseTrailersTransformContext...
method SetHeader (line 62) | public static void SetHeader(ResponseTrailersTransformContext context,...
method Success (line 73) | internal static bool Success(ResponseTrailersTransformContext context)
FILE: src/ReverseProxy/Transforms/ResponseTrailersTransformContext.cs
class ResponseTrailersTransformContext (line 13) | public class ResponseTrailersTransformContext
FILE: src/ReverseProxy/Transforms/ResponseTransform.cs
class ResponseTransform (line 15) | public abstract class ResponseTransform
method ApplyAsync (line 21) | public abstract ValueTask ApplyAsync(ResponseTransformContext context);
method TakeHeader (line 32) | public static StringValues TakeHeader(ResponseTransformContext context...
method SetHeader (line 59) | public static void SetHeader(ResponseTransformContext context, string ...
method Success (line 64) | internal static bool Success(ResponseTransformContext context)
FILE: src/ReverseProxy/Transforms/ResponseTransformContext.cs
class ResponseTransformContext (line 14) | public class ResponseTransformContext
FILE: src/ReverseProxy/Transforms/ResponseTransformExtensions.cs
class ResponseTransformExtensions (line 12) | public static class ResponseTransformExtensions
method WithTransformCopyResponseHeaders (line 17) | public static RouteConfig WithTransformCopyResponseHeaders(this RouteC...
method WithTransformCopyResponseTrailers (line 28) | public static RouteConfig WithTransformCopyResponseTrailers(this Route...
method WithTransformResponseHeader (line 39) | public static RouteConfig WithTransformResponseHeader(this RouteConfig...
method WithTransformResponseHeaderRemove (line 53) | public static RouteConfig WithTransformResponseHeaderRemove(this Route...
method WithTransformResponseHeadersAllowed (line 66) | public static RouteConfig WithTransformResponseHeadersAllowed(this Rou...
method AddResponseHeader (line 77) | public static TransformBuilderContext AddResponseHeader(this Transform...
method AddResponseHeaderRemove (line 86) | public static TransformBuilderContext AddResponseHeaderRemove(this Tra...
method AddResponseHeadersAllowed (line 96) | public static TransformBuilderContext AddResponseHeadersAllowed(this T...
method WithTransformResponseTrailer (line 106) | public static RouteConfig WithTransformResponseTrailer(this RouteConfi...
method AddResponseTrailer (line 120) | public static TransformBuilderContext AddResponseTrailer(this Transfor...
method AddResponseTrailerRemove (line 129) | public static TransformBuilderContext AddResponseTrailerRemove(this Tr...
method WithTransformResponseTrailerRemove (line 138) | public static RouteConfig WithTransformResponseTrailerRemove(this Rout...
method WithTransformResponseTrailersAllowed (line 151) | public static RouteConfig WithTransformResponseTrailersAllowed(this Ro...
method AddResponseTrailersAllowed (line 163) | public static TransformBuilderContext AddResponseTrailersAllowed(this ...
FILE: src/ReverseProxy/Transforms/ResponseTransformFactory.cs
class ResponseTransformFactory (line 10) | internal sealed class ResponseTransformFactory : ITransformFactory
method Validate (line 24) | public bool Validate(TransformRouteValidationContext context, IReadOnl...
method Build (line 128) | public bool Build(TransformBuilderContext context, IReadOnlyDictionary...
FILE: src/ReverseProxy/Transforms/RouteConfigTransformExtensions.cs
class RouteConfigTransformExtensions (line 13) | public static class RouteConfigTransformExtensions
method WithTransform (line 19) | public static RouteConfig WithTransform(this RouteConfig route, Action...
FILE: src/ReverseProxy/Transforms/TransformBuilderContextFuncExtensions.cs
class TransformBuilderContextFuncExtensions (line 13) | public static class TransformBuilderContextFuncExtensions
method AddRequestTransform (line 18) | public static TransformBuilderContext AddRequestTransform(this Transfo...
method AddResponseTransform (line 30) | public static TransformBuilderContext AddResponseTransform(this Transf...
method AddResponseTrailersTransform (line 42) | public static TransformBuilderContext AddResponseTrailersTransform(thi...
FILE: src/ReverseProxy/Utilities/ActivityCancellationTokenSource.cs
class ActivityCancellationTokenSource (line 11) | internal sealed class ActivityCancellationTokenSource : CancellationToke...
method ActivityCancellationTokenSource (line 40) | private ActivityCancellationTokenSource() { }
method StartTimeout (line 44) | private void StartTimeout()
method ResetTimeout (line 50) | public void ResetTimeout()
method Rent (line 62) | public static ActivityCancellationTokenSource Rent(TimeSpan activityTi...
method Return (line 81) | public void Return()
FILE: src/ReverseProxy/Utilities/AtomicCounter.cs
class AtomicCounter (line 8) | internal sealed class AtomicCounter
method Increment (line 24) | public int Increment()
method Decrement (line 32) | public int Decrement()
method Reset (line 40) | public void Reset()
FILE: src/ReverseProxy/Utilities/CaseInsensitiveEqualHelper.cs
class CaseInsensitiveEqualHelper (line 9) | internal static class CaseInsensitiveEqualHelper
method Equals (line 11) | internal static bool Equals(IReadOnlyList<string>? list1, IReadOnlyLis...
method GetHashCode (line 16) | internal static int GetHashCode(IReadOnlyList<string>? values)
FILE: src/ReverseProxy/Utilities/CaseSensitiveEqualHelper.cs
class CaseSensitiveEqualHelper (line 9) | internal static class CaseSensitiveEqualHelper
method Equals (line 11) | internal static bool Equals(IReadOnlyList<string>? list1, IReadOnlyLis...
method Equals (line 16) | internal static bool Equals(IReadOnlyDictionary<string, string>? dicti...
method Equals (line 21) | internal static bool Equals(IReadOnlyList<IReadOnlyDictionary<string, ...
method GetHashCode (line 26) | internal static int GetHashCode(IReadOnlyList<string>? values)
method GetHashCode (line 31) | internal static int GetHashCode(IReadOnlyDictionary<string, string>? d...
method GetHashCode (line 36) | internal static int GetHashCode(IReadOnlyList<IReadOnlyDictionary<stri...
FILE: src/ReverseProxy/Utilities/CollectionEqualityHelper.cs
class CollectionEqualityHelper (line 10) | internal static class CollectionEqualityHelper
method Equals (line 12) | public static bool Equals<T>(IReadOnlyList<T>? list1, IReadOnlyList<T>...
method Equals (line 42) | public static bool Equals<T>(IReadOnlyDictionary<string, T>? dictionar...
method Equals (line 84) | public static bool Equals<T>(IReadOnlyList<IReadOnlyDictionary<string,...
method GetHashCode (line 112) | public static int GetHashCode<T>(IReadOnlyList<T>? values, IEqualityCo...
method GetHashCode (line 129) | public static int GetHashCode<T>(IReadOnlyDictionary<string, T>? dicti...
method GetHashCode (line 160) | public static int GetHashCode<T>(IReadOnlyList<IReadOnlyDictionary<str...
FILE: src/ReverseProxy/Utilities/ConcurrentDictionaryExtensions.cs
class ConcurrentDictionaryExtensions (line 9) | internal static class ConcurrentDictionaryExtensions
method Contains (line 11) | public static bool Contains<TKey, TValue>(this ConcurrentDictionary<TK...
FILE: src/ReverseProxy/Utilities/DelegatingStream.cs
class DelegatingStream (line 14) | internal abstract class DelegatingStream : Stream
method DelegatingStream (line 65) | protected DelegatingStream(Stream innerStream)
method Dispose (line 71) | protected override void Dispose(bool disposing)
method DisposeAsync (line 80) | public override ValueTask DisposeAsync()
method Seek (line 87) | public override long Seek(long offset, SeekOrigin origin)
method Read (line 92) | public override int Read(byte[] buffer, int offset, int count)
method Read (line 97) | public override int Read(Span<byte> buffer)
method ReadByte (line 102) | public override int ReadByte()
method ReadAsync (line 107) | public override Task<int> ReadAsync(byte[] buffer, int offset, int cou...
method ReadAsync (line 112) | public override ValueTask<int> ReadAsync(Memory<byte> buffer, Cancella...
method BeginRead (line 117) | public override IAsyncResult BeginRead(byte[] buffer, int offset, int ...
method EndRead (line 122) | public override int EndRead(IAsyncResult asyncResult)
method Flush (line 131) | public override void Flush()
method FlushAsync (line 136) | public override Task FlushAsync(CancellationToken cancellationToken)
method SetLength (line 141) | public override void SetLength(long value)
method Write (line 146) | public override void Write(byte[] buffer, int offset, int count)
method Write (line 151) | public override void Write(ReadOnlySpan<byte> buffer)
method WriteByte (line 156) | public override void WriteByte(byte value)
method WriteAsync (line 161) | public override Task WriteAsync(byte[] buffer, int offset, int count, ...
method WriteAsync (line 166) | public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer, Canc...
method BeginWrite (line 171) | public override IAsyncResult BeginWrite(byte[] buffer, int offset, int...
method EndWrite (line 176) | public override void EndWrite(IAsyncResult asyncResult)
method CopyToAsync (line 181) | public override Task CopyToAsync(Stream destination, int bufferSize, C...
FILE: src/ReverseProxy/Utilities/EventIds.cs
class EventIds (line 8) | internal static class EventIds
FILE: src/ReverseProxy/Utilities/IClock.cs
type IClock (line 14) | [Obsolete("For testing only. Use TimeProvider instead.")]
method GetUtcNow (line 21) | DateTimeOffset GetUtcNow();
method GetStopwatchTime (line 34) | TimeSpan GetStopwatchTime();
method Delay (line 44) | Task Delay(TimeSpan delay, CancellationToken cancellationToken);
method Delay (line 54) | Task Delay(int millisecondsDelay, CancellationToken cancellationToken);
FILE: src/ReverseProxy/Utilities/IRandomFactory.cs
type IRandomFactory (line 12) | public interface IRandomFactory
method CreateRandomInstance (line 17) | Random CreateRandomInstance();
FILE: src/ReverseProxy/Utilities/NullRandomFactory.cs
class NullRandomFactory (line 8) | internal sealed class NullRandomFactory : IRandomFactory
method CreateRandomInstance (line 10) | public Random CreateRandomInstance()
FILE: src/ReverseProxy/Utilities/Observability.cs
class Observability (line 9) | internal static class Observability
method GetYarpActivity (line 13) | public static Activity? GetYarpActivity(this HttpContext context)
method SetYarpActivity (line 18) | public static void SetYarpActivity(this HttpContext context, Activity?...
method AddError (line 26) | public static void AddError(this Activity activity, string message, st...
class YarpActivity (line 40) | private sealed class YarpActivity
FILE: src/ReverseProxy/Utilities/ParsedMetadataEntry.cs
class ParsedMetadataEntry (line 9) | internal sealed class ParsedMetadataEntry<T>
method ParsedMetadataEntry (line 19) | public ParsedMetadataEntry(Parser parser, ClusterState cluster, string...
method GetParsedOrDefault (line 30) | public T GetParsedOrDefault(T defaultValue)
FILE: src/ReverseProxy/Utilities/RandomFactory.cs
class RandomFactory (line 9) | internal sealed class RandomFactory : IRandomFactory
method CreateRandomInstance (line 12) | public Random CreateRandomInstance()
FILE: src/ReverseProxy/Utilities/ServiceLookupHelper.cs
class ServiceLookupHelper (line 10) | internal static class ServiceLookupHelper
method ToDictionaryByUniqueId (line 12) | public static FrozenDictionary<string, T> ToDictionaryByUniqueId<T>(th...
method GetRequiredServiceById (line 29) | public static T GetRequiredServiceById<T>(this FrozenDictionary<string...
FILE: src/ReverseProxy/Utilities/TaskUtilities.cs
class TaskUtilities (line 8) | internal static class TaskUtilities
FILE: src/ReverseProxy/Utilities/TlsFrameHelper.cs
type TlsContentType (line 16) | public enum TlsContentType : byte
type TlsHandshakeType (line 24) | public enum TlsHandshakeType : byte
type TlsAlertLevel (line 43) | public enum TlsAlertLevel : byte
type TlsAlertDescription (line 49) | public enum TlsAlertDescription : byte
type ExtensionType (line 77) | public enum ExtensionType : ushort
type TlsFrameHeader (line 89) | public struct TlsFrameHeader
method ToString (line 95) | public override string ToString() => $"{Version}:{Type}[{Length}]";
class TlsFrameHelper (line 98) | public static class TlsFrameHelper
type ProcessingOptions (line 102) | [Flags]
type ApplicationProtocolInfo (line 112) | [Flags]
type ParsingStatus (line 121) | public enum ParsingStatus
type TlsFrameInfo (line 129) | public struct TlsFrameInfo
method ToString (line 147) | public override string ToString()
method TryGetFrameHeader (line 192) | public static bool TryGetFrameHeader(ReadOnlySpan<byte> frame, ref Tls...
method GetFrameSize (line 249) | public static int GetFrameSize(ReadOnlySpan<byte> frame)
method TryGetFrameInfo (line 265) | public static bool TryGetFrameInfo(ReadOnlySpan<byte> frame, ref TlsFr...
method GetServerName (line 340) | public static string? GetServerName(ReadOnlySpan<byte> frame)
method TryGetAlertInfo (line 352) | public static bool TryGetAlertInfo(ReadOnlySpan<byte> frame, ref TlsAl...
method CreateProtocolVersionAlert (line 365) | private static byte[] CreateProtocolVersionAlert(SslProtocols version) =>
method CreateAlertFrame (line 380) | public static byte[] CreateAlertFrame(SslProtocols version, TlsAlertDe...
method TryParseHelloFrame (line 410) | private static bool TryParseHelloFrame(ReadOnlySpan<byte> sslHandshake...
method TryParseClientHello (line 473) | private static bool TryParseClientHello(ReadOnlySpan<byte> clientHello...
method TryParseServerHello (line 518) | private static bool TryParseServerHello(ReadOnlySpan<byte> serverHello...
method TryParseHelloExtensions (line 557) | private static bool TryParseHelloExtensions(ReadOnlySpan<byte> extensi...
method TryGetSniFromServerNameList (line 612) | private static bool TryGetSniFromServerNameList(ReadOnlySpan<byte> ser...
method GetSniFromServerName (line 641) | private static string? GetSniFromServerName(ReadOnlySpan<byte> serverN...
method GetSniFromHostNameStruct (line 671) | private static string? GetSniFromHostNameStruct(ReadOnlySpan<byte> hos...
method TryGetSupportedVersionsFromExtension (line 690) | private static bool TryGetSupportedVersionsFromExtension(ReadOnlySpan<...
method TryGetApplicationProtocolsFromExtension (line 729) | private static bool TryGetApplicationProtocolsFromExtension(ReadOnlySp...
method TryGetCipherSuites (line 791) | private static bool TryGetCipherSuites(ReadOnlySpan<byte> bytes, ref T...
method TlsMinorVersionToProtocol (line 816) | private static SslProtocols TlsMinorVersionToProtocol(byte value)
method DecodeString (line 833) | private static string? DecodeString(ReadOnlySpan<byte> bytes)
method ReadUInt24BigEndian (line 872) | private static int ReadUInt24BigEndian(ReadOnlySpan<byte> bytes)
method SkipBytes (line 877) | private static ReadOnlySpan<byte> SkipBytes(ReadOnlySpan<byte> bytes, ...
method SkipOpaqueType1 (line 887) | private static ReadOnlySpan<byte> SkipOpaqueType1(ReadOnlySpan<byte> b...
method SkipOpaqueType2 (line 900) | private static ReadOnlySpan<byte> SkipOpaqueType2(ReadOnlySpan<byte> b...
type NameType (line 913) | private enum NameType : byte
FILE: src/ReverseProxy/Utilities/ValueStopwatch.cs
type ValueStopwatch (line 15) | internal struct ValueStopwatch
method ValueStopwatch (line 21) | private ValueStopwatch(long startTimestamp)
method StartNew (line 50) | public static ValueStopwatch StartNew() => new ValueStopwatch(Stopwatc...
FILE: src/ReverseProxy/WebSocketsTelemetry/HttpConnectFeatureWrapper.cs
class HttpConnectFeatureWrapper (line 13) | internal sealed class HttpConnectFeatureWrapper : IHttpExtendedConnectFe...
method HttpConnectFeatureWrapper (line 27) | public HttpConnectFeatureWrapper(TimeProvider timeProvider, HttpContex...
method AcceptAsync (line 38) | public async ValueTask<Stream> AcceptAsync()
FILE: src/ReverseProxy/WebSocketsTelemetry/HttpUpgradeFeatureWrapper.cs
class HttpUpgradeFeatureWrapper (line 14) | internal sealed class HttpUpgradeFeatureWrapper : IHttpUpgradeFeature
method HttpUpgradeFeatureWrapper (line 26) | public HttpUpgradeFeatureWrapper(TimeProvider timeProvider, HttpContex...
method UpgradeAsync (line 37) | public async Task<Stream> UpgradeAsync()
FILE: src/ReverseProxy/WebSocketsTelemetry/WebSocketCloseReason.cs
type WebSocketCloseReason (line 6) | internal enum WebSocketCloseReason : int
FILE: src/ReverseProxy/WebSocketsTelemetry/WebSocketsParser.cs
type WebSocketsParser (line 9) | internal unsafe struct WebSocketsParser
method WebSocketsParser (line 26) | public WebSocketsParser(TimeProvider timeProvider, bool isServer)
method Consume (line 60) | public void Consume(ReadOnlySpan<byte> buffer)
FILE: src/ReverseProxy/WebSocketsTelemetry/WebSocketsTelemetry.cs
class WebSocketsTelemetry (line 9) | [EventSource(Name = "Yarp.ReverseProxy.WebSockets")]
method WebSocketClosed (line 14) | [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUn...
FILE: src/ReverseProxy/WebSocketsTelemetry/WebSocketsTelemetryExtensions.cs
class WebSocketsTelemetryExtensions (line 13) | public static class WebSocketsTelemetryExtensions
method UseWebSocketsTelemetry (line 19) | public static IApplicationBuilder UseWebSocketsTelemetry(this IApplica...
FILE: src/ReverseProxy/WebSocketsTelemetry/WebSocketsTelemetryMiddleware.cs
class WebSocketsTelemetryMiddleware (line 11) | internal sealed class WebSocketsTelemetryMiddleware
method WebSocketsTelemetryMiddleware (line 16) | public WebSocketsTelemetryMiddleware(RequestDelegate next, TimeProvide...
method InvokeAsync (line 25) | public Task InvokeAsync(HttpContext context)
method InvokeAsyncCore (line 45) | private static async Task InvokeAsyncCore(HttpUpgradeFeatureWrapper up...
method InvokeAsyncCore (line 68) | private static async Task InvokeAsyncCore(HttpConnectFeatureWrapper co...
FILE: src/ReverseProxy/WebSocketsTelemetry/WebSocketsTelemetryStream.cs
class WebSocketsTelemetryStream (line 14) | internal sealed class WebSocketsTelemetryStream : DelegatingStream
method WebSocketsTelemetryStream (line 22) | public WebSocketsTelemetryStream(TimeProvider timeProvider, Stream inn...
method GetCloseReason (line 30) | public WebSocketCloseReason GetCloseReason(HttpContext context)
method ReadAsync (line 75) | public override ValueTask<int> ReadAsync(Memory<byte> buffer, Cancella...
method WriteAsync (line 101) | public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer, Canc...
FILE: src/TelemetryConsumption/EventListenerService.cs
class EventListenerService (line 15) | internal abstract class EventListenerService<TService, TTelemetryConsume...
method OnEvent (line 20) | protected abstract void OnEvent(TTelemetryConsumer[] consumers, EventW...
method TrySaveMetric (line 21) | protected abstract bool TrySaveMetric(TMetrics metrics, string name, d...
method EventListenerService (line 35) | public EventListenerService(
method OnEventSourceCreated (line 75) | protected override void OnEventSourceCreated(EventSource eventSource)
method EnableEventSource (line 92) | private void EnableEventSource(EventSource eventSource)
method OnEventWritten (line 108) | protected sealed override void OnEventWritten(EventWrittenEventArgs ev...
method OnNonUserEvent (line 120) | private void OnNonUserEvent(EventWrittenEventArgs eventData)
method StartAsync (line 191) | public Task StartAsync(CancellationToken cancellationToken) => Task.Co...
method StopAsync (line 193) | public Task StopAsync(CancellationToken cancellationToken) => Task.Com...
FILE: src/TelemetryConsumption/Forwarder/ForwarderEventListenerService.cs
class ForwarderEventListenerService (line 14) | internal sealed class ForwarderEventListenerService : EventListenerServi...
method ForwarderEventListenerService (line 20) | public ForwarderEventListenerService(ILogger<ForwarderEventListenerSer...
method OnEvent (line 24) | protected override void OnEvent(IForwarderTelemetryConsumer[] consumer...
method TrySaveMetric (line 123) | protected override bool TrySaveMetric(ForwarderMetrics metrics, string...
FILE: src/TelemetryConsumption/Forwarder/ForwarderMetrics.cs
class ForwarderMetrics (line 11) | public sealed class ForwarderMetrics
method ForwarderMetrics (line 13) | public ForwarderMetrics() => Timestamp = DateTime.UtcNow;
FILE: src/TelemetryConsumption/Forwarder/ForwarderStage.cs
type ForwarderStage (line 9) | public enum ForwarderStage : int
FILE: src/TelemetryConsumption/Forwarder/IForwarderTelemetryConsumer.cs
type IForwarderTelemetryConsumer (line 12) | public interface IForwarderTelemetryConsumer
method OnForwarderStart (line 19) | void OnForwarderStart(DateTime timestamp, string destinationPrefix) { }
method OnForwarderStop (line 26) | void OnForwarderStop(DateTime timestamp, int statusCode) { }
method OnForwarderFailed (line 33) | void OnForwarderFailed(DateTime timestamp, ForwarderError error) { }
method OnForwarderStage (line 40) | void OnForwarderStage(DateTime timestamp, ForwarderStage stage) { }
method OnContentTransferring (line 51) | void OnContentTransferring(DateTime timestamp, bool isRequest, long co...
method OnContentTransferred (line 63) | void OnContentTransferred(DateTime timestamp, bool isRequest, long con...
method OnForwarderInvoke (line 72) | void OnForwarderInvoke(DateTime timestamp, string clusterId, string ro...
FILE: src/TelemetryConsumption/Http/HttpEventListenerService.cs
class HttpEventListenerService (line 14) | internal sealed class HttpEventListenerService : EventListenerService<Ht...
method HttpEventListenerService (line 20) | public HttpEventListenerService(ILogger<HttpEventListenerService> logg...
method OnEvent (line 24) | protected override void OnEvent(IHttpTelemetryConsumer[] consumers, Ev...
method TrySaveMetric (line 217) | protected override bool TrySaveMetric(HttpMetrics metrics, string name...
FILE: src/TelemetryConsumption/Http/HttpMetrics.cs
class HttpMetrics (line 11) | public sealed class HttpMetrics
method HttpMetrics (line 13) | public HttpMetrics() => Timestamp = DateTime.UtcNow;
FILE: src/TelemetryConsumption/Http/IHttpTelemetryConsumer.cs
type IHttpTelemetryConsumer (line 12) | public interface IHttpTelemetryConsumer
method OnRequestStart (line 25) | void OnRequestStart(DateTime timestamp, string scheme, string host, in...
method OnRequestStop (line 31) | void OnRequestStop(DateTime timestamp) { }
method OnRequestFailed (line 37) | void OnRequestFailed(DateTime timestamp) { }
method OnConnectionEstablished (line 45) | void OnConnectionEstablished(DateTime timestamp, int versionMajor, int...
method OnConnectionClosed (line 53) | void OnConnectionClosed(DateTime timestamp, int versionMajor, int vers...
method OnRequestLeftQueue (line 62) | void OnRequestLeftQueue(DateTime timestamp, TimeSpan timeOnQueue, int ...
method OnRequestHeadersStart (line 68) | void OnRequestHeadersStart(DateTime timestamp) { }
method OnRequestHeadersStop (line 74) | void OnRequestHeadersStop(DateTime timestamp) { }
method OnRequestContentStart (line 80) | void OnRequestContentStart(DateTime timestamp) { }
method OnRequestContentStop (line 87) | void OnRequestContentStop(DateTime timestamp, long contentLength) { }
method OnResponseHeadersStart (line 93) | void OnResponseHeadersStart(DateTime timestamp) { }
method OnResponseHeadersStop (line 99) | void OnResponseHeadersStop(DateTime timestamp) { }
method OnResponseContentStart (line 106) | void OnResponseContentStart(DateTime timestamp) { }
method OnResponseContentStop (line 113) | void OnResponseContentStop(DateTime timestamp) { }
method OnRequestStop (line 120) | void OnRequestStop(DateTime timestamp, int statusCode) =>
method OnRequestFailed (line 128) | void OnRequestFailed(DateTime timestamp, string exceptionMessage) =>
method OnConnectionEstablished (line 142) | void OnConnectionEstablished(DateTime timestamp, int versionMajor, int...
method OnConnectionClosed (line 152) | void OnConnectionClosed(DateTime timestamp, int versionMajor, int vers...
method OnRequestHeadersStart (line 160) | void OnRequestHeadersStart(DateTime timestamp, long connectionId) =>
method OnResponseHeadersStop (line 168) | void OnResponseHeadersStop(DateTime timestamp, int statusCode) =>
method OnRedirect (line 176) | void OnRedirect(DateTime timestamp, string redirectUri) { }
FILE: src/TelemetryConsumption/IMetricsConsumer.cs
type IMetricsConsumer (line 9) | public interface IMetricsConsumer<TMetrics>
method OnMetrics (line 16) | void OnMetrics(TMetrics previous, TMetrics current);
FILE: src/TelemetryConsumption/Kestrel/IKestrelTelemetryConsumer.cs
type IKestrelTelemetryConsumer (line 11) | public interface IKestrelTelemetryConsumer
method OnConnectionStart (line 20) | void OnConnectionStart(DateTime timestamp, string connectionId, string...
method OnConnectionStop (line 27) | void OnConnectionStop(DateTime timestamp, string connectionId) { }
method OnRequestStart (line 38) | void OnRequestStart(DateTime timestamp, string connectionId, string re...
method OnRequestStop (line 49) | void OnRequestStop(DateTime timestamp, string connectionId, string req...
FILE: src/TelemetryConsumption/Kestrel/KestrelEventListenerService.cs
class KestrelEventListenerService (line 12) | internal sealed class KestrelEventListenerService : EventListenerService...
method KestrelEventListenerService (line 18) | public KestrelEventListenerService(ILogger<KestrelEventListenerService...
method OnEvent (line 22) | protected override void OnEvent(IKestrelTelemetryConsumer[] consumers,...
method TrySaveMetric (line 87) | protected override bool TrySaveMetric(KestrelMetrics metrics, string n...
FILE: src/TelemetryConsumption/Kestrel/KestrelMetrics.cs
class KestrelMetrics (line 11) | public sealed class KestrelMetrics
method KestrelMetrics (line 13) | public KestrelMetrics() => Timestamp = DateTime.UtcNow;
FILE: src/TelemetryConsumption/MetricsOptions.cs
class MetricsOptions (line 8) | internal static class MetricsOptions
FILE: src/TelemetryConsumption/NameResolution/INameResolutionTelemetryConsumer.cs
type INameResolutionTelemetryConsumer (line 11) | public interface INameResolutionTelemetryConsumer
method OnResolutionStart (line 18) | void OnResolutionStart(DateTime timestamp, string hostNameOrAddress) { }
method OnResolutionStop (line 24) | void OnResolutionStop(DateTime timestamp) { }
method OnResolutionFailed (line 30) | void OnResolutionFailed(DateTime timestamp) { }
FILE: src/TelemetryConsumption/NameResolution/NameResolutionEventListenerService.cs
class NameResolutionEventListenerService (line 13) | internal sealed class NameResolutionEventListenerService : EventListener...
method NameResolutionEventListenerService (line 19) | public NameResolutionEventListenerService(ILogger<NameResolutionEventL...
method OnEvent (line 23) | protected override void OnEvent(INameResolutionTelemetryConsumer[] con...
method TrySaveMetric (line 65) | protected override bool TrySaveMetric(NameResolutionMetrics metrics, s...
FILE: src/TelemetryConsumption/NameResolution/NameResolutionMetrics.cs
class NameResolutionMetrics (line 11) | public sealed class NameResolutionMetrics
method NameResolutionMetrics (line 13) | public NameResolutionMetrics() => Timestamp = DateTime.UtcNow;
FILE: src/TelemetryConsumption/NetSecurity/INetSecurityTelemetryConsumer.cs
type INetSecurityTelemetryConsumer (line 12) | public interface INetSecurityTelemetryConsumer
method OnHandshakeStart (line 20) | void OnHandshakeStart(DateTime timestamp, bool isServer, string target...
method OnHandshakeStop (line 27) | void OnHandshakeStop(DateTime timestamp, SslProtocols protocol) { }
method OnHandshakeFailed (line 36) | void OnHandshakeFailed(DateTime timestamp, bool isServer, TimeSpan ela...
FILE: src/TelemetryConsumption/NetSecurity/NetSecurityEventListenerService.cs
class NetSecurityEventListenerService (line 14) | internal sealed class NetSecurityEventListenerService : EventListenerSer...
method NetSecurityEventListenerService (line 20) | public NetSecurityEventListenerService(ILogger<NetSecurityEventListene...
method OnEvent (line 24) | protected override void OnEvent(INetSecurityTelemetryConsumer[] consum...
method TrySaveMetric (line 71) | protected override bool TrySaveMetric(NetSecurityMetrics metrics, stri...
FILE: src/TelemetryConsumption/NetSecurity/NetSecurityMetrics.cs
class NetSecurityMetrics (line 11) | public sealed class NetSecurityMetrics
method NetSecurityMetrics (line 13) | public NetSecurityMetrics() => Timestamp = DateTime.UtcNow;
FILE: src/TelemetryConsumption/Sockets/ISocketsTelemetryConsumer.cs
type ISocketsTelemetryConsumer (line 12) | public interface ISocketsTelemetryConsumer
method OnConnectStart (line 19) | void OnConnectStart(DateTime timestamp, string address) { }
method OnConnectStop (line 25) | void OnConnectStop(DateTime timestamp) { }
method OnConnectFailed (line 33) | void OnConnectFailed(DateTime timestamp, SocketError error, string exc...
FILE: src/TelemetryConsumption/Sockets/SocketsEventListenerService.cs
class SocketsEventListenerService (line 13) | internal sealed class SocketsEventListenerService : EventListenerService...
method SocketsEventListenerService (line 19) | public SocketsEventListenerService(ILogger<SocketsEventListenerService...
method OnEvent (line 23) | protected override void OnEvent(ISocketsTelemetryConsumer[] consumers,...
method TrySaveMetric (line 67) | protected override bool TrySaveMetric(SocketsMetrics metrics, string n...
FILE: src/TelemetryConsumption/Sockets/SocketsMetrics.cs
class SocketsMetrics (line 11) | public sealed class SocketsMetrics
method SocketsMetrics (line 13) | public SocketsMetrics() => Timestamp = DateTime.UtcNow;
FILE: src/TelemetryConsumption/TelemetryConsumptionExtensions.cs
class TelemetryConsumptionExtensions (line 11) | public static class TelemetryConsumptionExtensions
method AddTelemetryListeners (line 16) | public static IServiceCollection AddTelemetryListeners(this IServiceCo...
method AddTelemetryConsumer (line 31) | public static IServiceCollection AddTelemetryConsumer(this IServiceCol...
method AddTelemetryConsumer (line 90) | public static IServiceCollection AddTelemetryConsumer<[DynamicallyAcce...
method AddMetricsConsumer (line 152) | public static IServiceCollection AddMetricsConsumer(this IServiceColle...
method AddMetricsConsumer (line 205) | public static IServiceCollection AddMetricsConsumer<[DynamicallyAccess...
FILE: src/TelemetryConsumption/WebSockets/IWebSocketsTelemetryConsumer.cs
type IWebSocketsTelemetryConsumer (line 11) | public interface IWebSocketsTelemetryConsumer
method OnWebSocketClosed (line 21) | void OnWebSocketClosed(DateTime timestamp, DateTime establishedTime, W...
FILE: src/TelemetryConsumption/WebSockets/WebSocketCloseReason.cs
type WebSocketCloseReason (line 9) | public enum WebSocketCloseReason : int
FILE: src/TelemetryConsumption/WebSockets/WebSocketsEventListenerService.cs
class WebSocketsMetrics (line 13) | internal sealed class WebSocketsMetrics { }
class WebSocketsEventListenerService (line 15) | internal sealed class WebSocketsEventListenerService : EventListenerServ...
method WebSocketsEventListenerService (line 21) | public WebSocketsEventListenerService(ILogger<WebSocketsEventListenerS...
method OnEvent (line 25) | protected override void OnEvent(IWebSocketsTelemetryConsumer[] consume...
method TrySaveMetric (line 50) | protected override bool TrySaveMetric(WebSocketsMetrics metrics, strin...
FILE: test/Kubernetes.Tests/Certificates/CertificateHelperTests.cs
class CertificateHelperTests (line 14) | public class CertificateHelperTests
method CertificateHelperTests (line 23) | public CertificateHelperTests()
method CertificateConversionFromPem (line 35) | [Theory]
method CertificateConversionFromDer (line 63) | [Theory]
method ReadManifestData (line 91) | private static byte[] ReadManifestData(string ending)
FILE: test/Kubernetes.Tests/Client/ResourceInformerTests.cs
class ResourceInformerTests (line 20) | public class ResourceInformerTests
method LoadTestResource (line 22) | private static (TResources Resources, TShouldBe ShouldBe) LoadTestReso...
method ResourcesAreListedWhenReadyAsyncIsComplete (line 33) | [Fact]
method ResourcesWithApiGroupAreListed (line 73) | [Fact]
FILE: test/Kubernetes.Tests/Client/SyncResourceInformer.cs
class SyncResourceInformer (line 15) | internal class SyncResourceInformer<TResource> : IResourceInformer<TReso...
method PublishUpdate (line 21) | public void PublishUpdate(WatchEventType eventType, TResource resource)
method ReadyAsync (line 32) | public Task ReadyAsync(CancellationToken cancellationToken)
method Register (line 37) | public IResourceInformerRegistration Register(ResourceInformerCallback...
method Register (line 42) | public IResourceInformerRegistration Register(ResourceInformerCallback...
method StartAsync (line 47) | public Task StartAsync(CancellationToken cancellationToken)
method StartWatching (line 52) | public void StartWatching()
method StopAsync (line 56) | public Task StopAsync(CancellationToken cancellationToken)
class Registration (line 61) | internal class Registration : IResourceInformerRegistration
method Registration (line 65) | public Registration(SyncResourceInformer<TResource> resourceInformer...
method ReadyAsync (line 84) | public Task ReadyAsync(CancellationToken cancellationToken) => Resou...
method Dispose (line 86) | protected virtual void Dispose(bool disposing)
method Dispose (line 98) | public void Dispose()
FILE: test/Kubernetes.Tests/Client/V1DeploymentResourceInformer.cs
class V1DeploymentResourceInformer (line 15) | internal class V1DeploymentResourceInformer : ResourceInformer<V1Deploym...
method V1DeploymentResourceInformer (line 17) | public V1DeploymentResourceInformer(
method RetrieveResourceListAsync (line 26) | protected override Task<HttpOperationResponse<V1DeploymentList>> Retri...
method WatchResourceListAsync (line 31) | protected override Watcher<V1Deployment> WatchResourceListAsync(string...
FILE: test/Kubernetes.Tests/Client/V1PodResourceInformer.cs
class V1PodResourceInformer (line 15) | internal class V1PodResourceInformer : ResourceInformer<V1Pod, V1PodList>
method V1PodResourceInformer (line 17) | public V1PodResourceInformer(
method RetrieveResourceListAsync (line 26) | protected override Task<HttpOperationResponse<V1PodList>> RetrieveReso...
method WatchResourceListAsync (line 31) | protected override Watcher<V1Pod> WatchResourceListAsync(string resour...
FILE: test/Kubernetes.Tests/Hosting/BackgroundHostedServiceTests.cs
class BackgroundHostedServiceTests (line 16) | public class BackgroundHostedServiceTests
method StartAndStopUnderHosting (line 18) | [Fact]
method StartAndStopUnderWebHost (line 39) | [Fact]
method IfRunAsyncThrowsItComesBackFromHost (line 67) | [Fact]
FILE: test/Kubernetes.Tests/Hosting/Fakes/FakeBackgroundHostedService.cs
class FakeBackgroundHostedService (line 12) | public class FakeBackgroundHostedService : BackgroundHostedService
method FakeBackgroundHostedService (line 16) | public FakeBackgroundHostedService(
method RunAsync (line 25) | public override async Task RunAsync(CancellationToken cancellationToken)
FILE: test/Kubernetes.Tests/Hosting/Fakes/FakeServer.cs
class FakeServer (line 11) | public sealed class FakeServer : IServer
method Dispose (line 15) | public void Dispose()
method StartAsync (line 19) | public Task StartAsync<TContext>(IHttpApplication<TContext> applicatio...
method StopAsync (line 24) | public Task StopAsync(CancellationToken cancellationToken)
FILE: test/Kubernetes.Tests/Hosting/Fakes/TestLatch.cs
class TestLatch (line 10) | public class TestLatch
method Signal (line 14) | public void Signal()
method Throw (line 18) | public void Throw(ApplicationException exception)
method WhenSignalAsync (line 23) | public async Task WhenSignalAsync(CancellationToken cancellationToken)
FILE: test/Kubernetes.Tests/Hosting/Fakes/TestLatches.cs
class TestLatches (line 6) | public class TestLatches
FILE: test/Kubernetes.Tests/IngressCacheTests.cs
class IngressCacheTests (line 20) | public class IngressCacheTests
method IngressCacheTests (line 28) | public IngressCacheTests(ITestOutputHelper output)
method IngressWithClassAnnotationTests (line 45) | [Theory]
method IngressWithoutClassAnnotationTests (line 71) | [Theory]
method IngressModifiedToRemoveClass (line 97) | [Fact]
method IngressClassModifiedToAddDefault (line 116) | [Fact]
method IngressClassDeleted (line 136) | [Fact]
method SecretNotMatchDefaultNameIgnored (line 154) | [Fact]
method SecretMatchDefaultNameAdded (line 168) | [Fact]
method SecretMatchDefaultNameModified (line 185) | [Fact]
method SecretMatchDefaultNameRemoved (line 202) | [Fact]
method SecretMatchDefaultNameCantConvertNotAdded (line 219) | [Fact]
FILE: test/Kubernetes.Tests/IngressControllerTests.cs
class IngressControllerTests (line 22) | public class IngressControllerTests
method IngressControllerTests (line 35) | public IngressControllerTests(ITestOutputHelper output)
method ReconciliationContinuesOnReconcilerError (line 48) | [Fact]
FILE: test/Kubernetes.Tests/IngressConversionTests.cs
class IngressConversionTests (line 29) | public class IngressConversionTests
method IngressConversionTests (line 31) | public IngressConversionTests()
method ParsingTests (line 40) | [Theory]
method VerifyClusters (line 83) | private static void VerifyClusters(string clusterJson, string name)
method VerifyRoutes (line 88) | private static void VerifyRoutes(string routesJson, string name)
method StripNullProperties (line 93) | private static string StripNullProperties(string json)
method VerifyJson (line 118) | private static void VerifyJson(string json, string name, string fileName)
method GetKubernetesInfo (line 130) | private async Task<ICache> GetKubernetesInfo(string name, V1IngressCla...
FILE: test/Kubernetes.Tests/KubeResourceGenerator.cs
class KubeResourceGenerator (line 10) | internal static class KubeResourceGenerator
method CreateIngressClass (line 12) | public static V1IngressClass CreateIngressClass(string name, string co...
method CreateIngress (line 35) | public static V1Ingress CreateIngress(string name, string namespaceNam...
method CreateSecret (line 55) | public static V1Secret CreateSecret(string name, string namespaceName,...
FILE: test/Kubernetes.Tests/Management/KubernetesCoreExtensionsTests.cs
class KubernetesCoreExtensionsTests (line 10) | public class KubernetesCoreExtensionsTests
method KubernetesClientIsAdded (line 12) | [Fact]
method ExistingClientIsNotReplaced (line 23) | [Fact]
FILE: test/Kubernetes.Tests/NamespacedNameTests.cs
class NamespacedNameTests (line 10) | public class NamespacedNameTests
method WorksAsDictionaryKey (line 12) | [Fact]
method EqualityAndInequality (line 29) | [Theory]
method NamespaceAndNameFromResource (line 62) | [Fact]
method JustNameFromClusterResource (line 78) | [Fact]
FILE: test/Kubernetes.Tests/Queues/WorkQueueTests.cs
class WorkQueueTests (line 11) | public class WorkQueueTests
method NormalUsageIsAddGetDone (line 15) | [Fact]
method AddingSameItemAgainHasNoEffect (line 40) | [Fact]
method CallingAddWhileItemIsBeingProcessedHasNoEffect (line 56) | [Fact]
method ItemCanBeAddedAgainAfterDoneIsCalled (line 78) | [Fact]
method IfAddWasCalledDuringProcessingThenItemIsRequeuedByDone (line 103) | [Fact]
method GetCompletesOnceAddIsCalled (line 132) | [Fact]
method GetReturnsShutdownTrueAfterShutdownIsCalled (line 150) | [Fact]
method ShuttingDownReturnsTrueAfterShutdownIsCalled (line 168) | [Fact]
FILE: test/Kubernetes.Tests/Rate/LimitTests.cs
class LimitTests (line 9) | public class LimitTests
method TokensFromDuration (line 11) | [Theory]
method DurationFromTokens (line 25) | [Theory]
FILE: test/Kubernetes.Tests/Rate/LimiterTests.cs
class LimiterTests (line 17) | public class LimiterTests
method FirstTokenIsAvailable (line 21) | [Fact]
method AsManyAsBurstTokensAreAvailableRightAway (line 32) | [Theory]
method TokensBecomeAvailableAtLimitPerSecondRate (line 52) | [Fact]
method ReserveTellsYouHowLongToWait (line 79) | [Fact]
method WaitAsyncCausesPauseLikeReserve (line 114) | [Fact(Skip = "https://github.com/dotnet/yarp/issues/1357")]
method ManyWaitsStackUp (line 158) | [Fact(Skip = "https://github.com/dotnet/yarp/issues/1357")]
FILE: test/Kubernetes.Tests/Rate/ReservationTests.cs
class ReservationTests (line 10) | public class ReservationTests
method NotOkayAlwaysReturnsMaxValueDelay (line 14) | [Fact]
method DelayIsZeroWhenTimeToActIsNowOrEarlier (line 35) | [Fact]
method DelayGetsSmallerAsTimePasses (line 58) | [Fact]
method DelayFromNotChangedByTimePassing (line 80) | [Fact]
FILE: test/Kubernetes.Tests/ReconcilerTests.cs
class ReconcilerTests (line 20) | public class ReconcilerTests
method ReconcilerTests (line 27) | public ReconcilerTests(ITestOutputHelper output)
method ReconcilerDoesNotStopOnInvalidIngress (line 33) | [Fact]
FILE: test/Kubernetes.Tests/TestCluster/Controllers/ResourceApiController.cs
class ResourceApiController (line 11) | [Route("api/{version}/{plural}")]
method ResourceApiController (line 16) | public ResourceApiController(ITestCluster testCluster)
method ListAsync (line 27) | [HttpGet]
FILE: test/Kubernetes.Tests/TestCluster/Controllers/ResourceApiGroupController.cs
class ResourceApiGroupController (line 11) | [Route("apis/{group}/{version}/{plural}")]
method ResourceApiGroupController (line 16) | public ResourceApiGroupController(ITestCluster testCluster)
method ListAsync (line 30) | [HttpGet]
FILE: test/Kubernetes.Tests/TestCluster/ITestCluster.cs
type ITestCluster (line 10) | public interface ITestCluster
method UnhandledRequest (line 12) | Task UnhandledRequest(HttpContext context);
method ListResourcesAsync (line 14) | Task<ListResult> ListResourcesAsync(string group, string version, stri...
FILE: test/Kubernetes.Tests/TestCluster/ITestClusterHost.cs
type ITestClusterHost (line 10) | public interface ITestClusterHost : IHost
FILE: test/Kubernetes.Tests/TestCluster/Models/ListParameters.cs
class ListParameters (line 8) | public class ListParameters
FILE: test/Kubernetes.Tests/TestCluster/Models/ListResult.cs
class ListResult (line 8) | public class ListResult
FILE: test/Kubernetes.Tests/TestCluster/Models/ResourceObject.cs
class ResourceObject (line 11) | public class ResourceObject : IKubernetesObject<V1ObjectMeta>
FILE: test/Kubernetes.Tests/TestCluster/TestCluster.cs
class TestCluster (line 15) | public class TestCluster : ITestCluster
method TestCluster (line 19) | public TestCluster(IOptions<TestClusterOptions> options)
method UnhandledRequest (line 29) | public virtual Task UnhandledRequest(HttpContext context)
method ListResourcesAsync (line 34) | public virtual Task<ListResult> ListResourcesAsync(string group, strin...
FILE: test/Kubernetes.Tests/TestCluster/TestClusterHost.cs
class TestClusterHost (line 14) | public class TestClusterHost : ITestClusterHost
method TestClusterHost (line 19) | public TestClusterHost(IHost host, K8SConfiguration kubeConfig, IKuber...
method StartAsync (line 34) | public Task StartAsync(CancellationToken cancellationToken = default) ...
method StopAsync (line 36) | public Task StopAsync(CancellationToken cancellationToken = default) =...
method Dispose (line 38) | protected virtual void Dispose(bool disposing)
method Dispose (line 51) | public void Dispose()
FILE: test/Kubernetes.Tests/TestCluster/TestClusterHostBuilder.cs
class TestClusterHostBuilder (line 16) | public class TestClusterHostBuilder
method Build (line 20) | public ITestClusterHost Build()
method UseInitialResources (line 85) | public TestClusterHostBuilder UseInitialResources(params IKubernetesOb...
method ConfigureServices (line 99) | public TestClusterHostBuilder ConfigureServices(Action<IServiceCollect...
method ConfigureServices (line 105) | public TestClusterHostBuilder ConfigureServices(Action<HostBuilderCont...
method Configure (line 111) | public TestClusterHostBuilder Configure(Action<TestClusterOptions> con...
method AvailablePort (line 117) | private static int AvailablePort()
FILE: test/Kubernetes.Tests/TestCluster/TestClusterOptions.cs
class TestClusterOptions (line 10) | public class TestClusterOptions
FILE: test/Kubernetes.Tests/TestCluster/TestClusterStartup.cs
class TestClusterStartup (line 11) | public cla
Condensed preview — 1031 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,697K chars).
[
{
"path": ".azuredevops/dependabot.yml",
"chars": 182,
"preview": "version: 2\r\n\r\n# Disabling dependabot on Azure DevOps as this is a mirrored repo. Updates should go through github.\r\nenab"
},
{
"path": ".config/CredScanSuppressions.json",
"chars": 425,
"preview": "{\n \"tool\": \"Credential Scanner\",\n \"suppressions\": [\n {\n \"_justification\": \"Legitimate key/cert u"
},
{
"path": ".config/tsaoptions.json",
"chars": 306,
"preview": "{\n \"areaPath\": \"DevDiv\\\\ASP.NET Core\\\\YARP\",\n \"codebaseName\": \"ReverseProxy\",\n \"instanceUrl\": \"https://devdiv.visuals"
},
{
"path": ".dockerignore",
"chars": 419,
"preview": "**/.classpath\n**/.dockerignore\n**/.env\n**/.git\n**/.gitignore\n**/.project\n**/.settings\n**/.toolstarget\n**/.vs\n**/.vscode\n"
},
{
"path": ".editorconfig",
"chars": 14361,
"preview": "; EditorConfig to support per-solution formatting.\n; Use the EditorConfig VS add-in to make this work.\n; http://editorco"
},
{
"path": ".gitattributes",
"chars": 2761,
"preview": "###############################################################################\n# Set default behavior to automatically "
},
{
"path": ".github/CODEOWNERS",
"chars": 203,
"preview": "# Users referenced in this file will automatically be requested as reviewers for PRs that modify the given paths.\n# See "
},
{
"path": ".github/ISSUE_TEMPLATE/bug.md",
"chars": 437,
"preview": "---\nname: Bug report\nabout: Create a report about something that is not working\nlabels: \"Type: Bug\"\n---\n\n### Describe th"
},
{
"path": ".github/ISSUE_TEMPLATE/feedback.md",
"chars": 431,
"preview": "---\nname: Feedback\nabout: Tell us what you think!\nlabels: \"Type: Feedback\"\n---\n\n### Some details\n\n**How many backends ar"
},
{
"path": ".github/ISSUE_TEMPLATE/idea.md",
"chars": 177,
"preview": "---\nname: Idea\nabout: Ideas, feature requests, and wishes\nlabels: \"Type: Idea\"\n---\n\n### What should we add or change to "
},
{
"path": ".github/policies/resourceManagement.yml",
"chars": 1028,
"preview": "id: \r\nname: GitOps.PullRequestIssueManagement\r\ndescription: GitOps.PullRequestIssueManagement primitive\r\nowner: \r\nresour"
},
{
"path": ".github/workflows/docker_build.yml",
"chars": 1516,
"preview": "name: Dockerfiles Build\non:\n push:\n branches:\n - main\n pull_request:\n branches:\n - main\njobs:\n build:"
},
{
"path": ".github/workflows/markdownlint-problem-matcher.json",
"chars": 406,
"preview": "{\n \"problemMatcher\": [\n {\n \"owner\": \"markdownlint\",\n \"pattern\": [\n {\n "
},
{
"path": ".github/workflows/markdownlint.yml",
"chars": 607,
"preview": "name: Markdownlint\n\npermissions:\n contents: read\n\n# run even on changes without markdown changes, so that we can\n# make"
},
{
"path": ".github/workflows/markdownlintignore",
"chars": 71,
"preview": "# Ignore files under eng/common (managed by dotnet/arcade)\neng/common/\n"
},
{
"path": ".gitignore",
"chars": 6202,
"preview": "## Arcade specific things\n\n# Ignore the local '.dotnet' runtime directory and local '.packages' directory (only during C"
},
{
"path": ".markdownlint.json",
"chars": 1071,
"preview": "{\n \"default\": true,\n \"ul-indent\": false,\n \"no-trailing-spaces\": false,\n \""
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 257,
"preview": "# Code of Conduct\n\nThis project has adopted the code of conduct defined by the Contributor Covenant to clarify expected "
},
{
"path": "CONTRIBUTING.md",
"chars": 6817,
"preview": "# YARP Contribution Guide\n\nWe're excited to accept contributions, but like all open source projects need to set some gui"
},
{
"path": "Directory.Build.props",
"chars": 1028,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project>\n <Import Project=\"Sdk.props\" Sdk=\"Microsoft.DotNet.Arcade.Sdk\" />\n <I"
},
{
"path": "Directory.Build.targets",
"chars": 534,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project>\n <Import Project=\"Sdk.targets\" Sdk=\"Microsoft.DotNet.Arcade.Sdk\" />\n\n "
},
{
"path": "LICENSE.txt",
"chars": 1116,
"preview": "The MIT License (MIT)\n\nCopyright (c) .NET Foundation and Contributors\n\nAll rights reserved.\n\nPermission is hereby grante"
},
{
"path": "NuGet.config",
"chars": 1137,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <packageSources>\n <clear />\n <!-- Feed to use to restore "
},
{
"path": "README.md",
"chars": 4792,
"preview": "\n# Welcome to the YARP project\n\nYARP (which stands for \"Yet Another Reverse Proxy\") is a pr"
},
{
"path": "SECURITY.md",
"chars": 2824,
"preview": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.3 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products an"
},
{
"path": "TFMs.props",
"chars": 214,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project>\n <PropertyGroup>\n <LatestDevTFM>net9.0</LatestDevTFM>\n <ReleaseT"
},
{
"path": "THIRD-PARTY-NOTICES.TXT",
"chars": 1243,
"preview": "License notice for TlsFrame Parser\n-------------------------------\n\nhttps://github.com/dotnet/runtime/blob/master/LICENS"
},
{
"path": "YARP.slnx",
"chars": 3601,
"preview": "<Solution>\n <Folder Name=\"/samples/\">\n <Project Path=\"samples/BasicYarpSample/BasicYarpSample.csproj\" />\n <Projec"
},
{
"path": "activate.ps1",
"chars": 2265,
"preview": "#\n# This file must be used by invoking \". .\\activate.ps1\" from the command line.\n# You cannot run it directly. See https"
},
{
"path": "activate.sh",
"chars": 3066,
"preview": "#\n# This file must be used by invoking \"source activate.sh\" from the command line.\n# You cannot run it directly.\n# To ex"
},
{
"path": "azure-pipelines-nonprod.yml",
"chars": 4435,
"preview": "variables:\n # Needed for Arcade template\n- name: _TeamName\n value: AspNetCore\n # Needed for Microbuild template\n- nam"
},
{
"path": "azure-pipelines-pr.yml",
"chars": 3732,
"preview": "#\n# See https://docs.microsoft.com/azure/devops/pipelines/yaml-schema for details\n#\n\n\nvariables:\n - name: _TeamName\n "
},
{
"path": "azure-pipelines.yml",
"chars": 4373,
"preview": "variables:\n # Needed for Arcade template\n- name: _TeamName\n value: AspNetCore\n # Needed for Microbuild template\n- nam"
},
{
"path": "build.cmd",
"chars": 120,
"preview": "@echo off\npowershell -ExecutionPolicy ByPass -NoProfile -command \"& \"\"\"%~dp0eng\\common\\Build.ps1\"\"\" -restore -build %*\"\n"
},
{
"path": "build.sh",
"chars": 516,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\n\n# resolve $SOURCE until the file is no longer a symlink\nwhile [[ -h $so"
},
{
"path": "docs/DailyBuilds.md",
"chars": 2118,
"preview": "How to get daily builds of YARP\n===============================\n\nDaily builds include the latest source code changes. Th"
},
{
"path": "docs/README.md",
"chars": 507,
"preview": "# Docs Folder\n\nThis folder contains:\n\n* [Design Notes](designs/) - These are the design notes used to guide our developm"
},
{
"path": "docs/designs/README.md",
"chars": 65,
"preview": "# Design Meeting Notes\n\nRough meeting notes from design meetings."
},
{
"path": "docs/designs/config.md",
"chars": 11157,
"preview": "# Config based proxy apps\n\n> [!CAUTION]\n> These are archived design discussions. Information may be outdated and inaccur"
},
{
"path": "docs/designs/route-extensibility.md",
"chars": 7127,
"preview": "## Problem Statement\n\n> [!CAUTION]\n> These are archived design discussions. Information may be outdated and inaccurate.\n"
},
{
"path": "docs/designs/yarp-tunneling.md",
"chars": 14135,
"preview": "# YARP Tunneling\n\n> [!CAUTION]\n> These are archived design discussions. Information may be outdated and inaccurate.\n\n## "
},
{
"path": "docs/operations/BackportingToPreview.md",
"chars": 2258,
"preview": "# Backporting changes to a preview branch\n\nBackporting changes is very similar to a regular release. Changes are made on"
},
{
"path": "docs/operations/Branching.md",
"chars": 1454,
"preview": "# Branching Tasks\n\nWhen we are ready to branch our code, we first need to create the branch:\n\n1. In a local clone, run `"
},
{
"path": "docs/operations/DependencyFlow.md",
"chars": 5111,
"preview": "# Dependency Flow\n\n## Dependency Flow Overview\n\n*For full documentation on Arcade, Maestro and `darc`, see [the Arcade d"
},
{
"path": "docs/operations/README.md",
"chars": 399,
"preview": "# Operations Playbook\n\n*This documentation is primarily for project maintainers, though contributors are welcome to read"
},
{
"path": "docs/operations/Release.md",
"chars": 9845,
"preview": "# Releasing YARP\n\nThis document provides a guide on how to release a preview of YARP.\n\nTo keep track of the process, ope"
},
{
"path": "docs/roadmap.md",
"chars": 3520,
"preview": "# YARP Roadmap\n\n## Supported YARP versions\n\n[Latest releases](https://github.com/dotnet/yarp/releases)\n\n| Version | Rele"
},
{
"path": "dotnet-yarp-release.yml",
"chars": 2544,
"preview": "trigger: none\nname: $(Date:yyyyMMdd).$(Rev:r)\n\nvariables:\n- name: NuGetApiKey\n value: \n- name: NuGetFeed\n value: https"
},
{
"path": "eng/Build.props",
"chars": 516,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild"
},
{
"path": "eng/CodeAnalysis.src.globalconfig",
"chars": 63635,
"preview": "is_global = true\n\n# AD0001: Analyzer threw an exception\ndotnet_diagnostic.AD0001.severity = warning\n\n# BCL0001: Ensure m"
},
{
"path": "eng/CodeAnalysis.test.globalconfig",
"chars": 68558,
"preview": "is_global = true\n\n# AD0001: Analyzer threw an exception\ndotnet_diagnostic.AD0001.severity = none\n\n# BCL0001: Ensure mini"
},
{
"path": "eng/PoliCheckExclusions.xml",
"chars": 98,
"preview": "<PoliCheckExclusions>\n\t<Exclusion Type=\"FileName\">SWAGGER.JSON</Exclusion>\n</PoliCheckExclusions>\n"
},
{
"path": "eng/Publishing.props",
"chars": 2354,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project>\n <PropertyGroup>\n <PublishingVersion>3</PublishingVersion>\n </"
},
{
"path": "eng/Signing.props",
"chars": 1127,
"preview": "<Project>\n <ItemGroup Label=\"File signing information\">\n <!-- Third-party components which should be signed. -->\n "
},
{
"path": "eng/Version.Details.xml",
"chars": 798,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Dependencies>\n <ProductDependencies>\n </ProductDependencies>\n <ToolsetDepende"
},
{
"path": "eng/Versions.props",
"chars": 2701,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild"
},
{
"path": "eng/common/BuildConfiguration/build-configuration.json",
"chars": 55,
"preview": "{\n \"RetryCountLimit\": 1,\n \"RetryByAnyError\": false\n}\n"
},
{
"path": "eng/common/CIBuild.cmd",
"chars": 140,
"preview": "@echo off\npowershell -ExecutionPolicy ByPass -NoProfile -command \"& \"\"\"%~dp0Build.ps1\"\"\" -restore -build -test -sign -pa"
},
{
"path": "eng/common/PSScriptAnalyzerSettings.psd1",
"chars": 474,
"preview": "@{\n IncludeRules=@('PSAvoidUsingCmdletAliases',\n 'PSAvoidUsingWMICmdlet',\n 'PSAvo"
},
{
"path": "eng/common/README.md",
"chars": 1321,
"preview": "# Don't touch this folder\n\n uuuuuuuuuuuuuuuuuuuu\n u\" uuuuuuuuuuuuuuuuuu \"u\n u\" u$"
},
{
"path": "eng/common/SetupNugetSources.ps1",
"chars": 7849,
"preview": "# This script adds internal feeds required to build commits that depend on internal package sources. For instance,\n# dot"
},
{
"path": "eng/common/SetupNugetSources.sh",
"chars": 7456,
"preview": "#!/usr/bin/env bash\n\n# This script adds internal feeds required to build commits that depend on internal package sources"
},
{
"path": "eng/common/build.cmd",
"chars": 114,
"preview": "@echo off\npowershell -ExecutionPolicy ByPass -NoProfile -command \"& \"\"\"%~dp0build.ps1\"\"\" %*\"\nexit /b %ErrorLevel%\n"
},
{
"path": "eng/common/build.ps1",
"chars": 6563,
"preview": "[CmdletBinding(PositionalBinding=$false)]\nParam(\n [string][Alias('c')]$configuration = \"Debug\",\n [string]$platform = $"
},
{
"path": "eng/common/build.sh",
"chars": 7129,
"preview": "#!/usr/bin/env bash\n\n# Stop script if unbound variable found (use ${var:-} if intentional)\nset -u\n\n# Stop script if comm"
},
{
"path": "eng/common/cibuild.sh",
"chars": 537,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\n\n# resolve $SOURCE until the file is no longer a symlink\nwhile [[ -h $so"
},
{
"path": "eng/common/core-templates/job/job.yml",
"chars": 9495,
"preview": "parameters:\n# Job schema parameters - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs"
},
{
"path": "eng/common/core-templates/job/onelocbuild.yml",
"chars": 4628,
"preview": "parameters:\n # Optional: dependencies of the job\n dependsOn: ''\n\n # Optional: A defined YAML pool - https://docs.micr"
},
{
"path": "eng/common/core-templates/job/publish-build-assets.yml",
"chars": 9162,
"preview": "parameters:\n configuration: 'Debug'\n\n # Optional: condition for the job to run\n condition: ''\n\n # Optional: 'true' i"
},
{
"path": "eng/common/core-templates/job/source-build.yml",
"chars": 5214,
"preview": "parameters:\n # This template adds arcade-powered source-build to CI. The template produces a server job with a\n # defa"
},
{
"path": "eng/common/core-templates/job/source-index-stage1.yml",
"chars": 1617,
"preview": "parameters:\n runAsPublic: false\n sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Comma"
},
{
"path": "eng/common/core-templates/jobs/codeql-build.yml",
"chars": 1247,
"preview": "parameters:\n # See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md\n continueOnError: false\n # Re"
},
{
"path": "eng/common/core-templates/jobs/jobs.yml",
"chars": 5173,
"preview": "parameters:\n # See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md\n continueOnError: false\n\n # O"
},
{
"path": "eng/common/core-templates/jobs/source-build.yml",
"chars": 1818,
"preview": "parameters:\n # This template adds arcade-powered source-build to CI. A job is created for each platform, as\n # well as"
},
{
"path": "eng/common/core-templates/post-build/common-variables.yml",
"chars": 604,
"preview": "variables:\n - group: Publish-Build-Assets\n\n # Whether the build is internal or not\n - name: IsInternalBuild\n value"
},
{
"path": "eng/common/core-templates/post-build/post-build.yml",
"chars": 12611,
"preview": "parameters:\n# Which publishing infra should be used. THIS SHOULD MATCH THE VERSION ON THE BUILD MANIFEST.\n# Publishing V"
},
{
"path": "eng/common/core-templates/post-build/setup-maestro-vars.yml",
"chars": 2876,
"preview": "parameters:\n BARBuildId: ''\n PromoteToChannelIds: ''\n is1ESPipeline: ''\n\nsteps:\n - ${{ if eq(parameters.is1ESPipelin"
},
{
"path": "eng/common/core-templates/steps/cleanup-microbuild.yml",
"chars": 925,
"preview": "parameters:\n # Enable cleanup tasks for MicroBuild\n enableMicrobuild: false\n # Enable cleanup tasks for MicroBuild on"
},
{
"path": "eng/common/core-templates/steps/component-governance.yml",
"chars": 652,
"preview": "parameters:\n disableComponentGovernance: false\n componentGovernanceIgnoreDirectories: ''\n is1ESPipeline: false\n disp"
},
{
"path": "eng/common/core-templates/steps/enable-internal-runtimes.yml",
"chars": 1075,
"preview": "# Obtains internal runtime download credentials and populates the 'dotnetbuilds-internal-container-read-token-base64'\n# "
},
{
"path": "eng/common/core-templates/steps/enable-internal-sources.yml",
"chars": 2301,
"preview": "parameters:\n# This is the Azure federated service connection that we log into to get an access token.\n- name: nugetFeder"
},
{
"path": "eng/common/core-templates/steps/generate-sbom.yml",
"chars": 2477,
"preview": "# BuildDropPath - The root folder of the drop directory for which the manifest file will be generated.\n# PackageName - T"
},
{
"path": "eng/common/core-templates/steps/get-delegation-sas.yml",
"chars": 1561,
"preview": "parameters:\n- name: federatedServiceConnection\n type: string\n- name: outputVariableName\n type: string\n- name: expiryIn"
},
{
"path": "eng/common/core-templates/steps/get-federated-access-token.yml",
"chars": 1474,
"preview": "parameters:\n- name: federatedServiceConnection\n type: string\n- name: outputVariableName\n type: string\n- name: is1ESPip"
},
{
"path": "eng/common/core-templates/steps/install-microbuild-impl.yml",
"chars": 935,
"preview": "parameters:\n - name: microbuildTaskInputs\n type: object\n default: {}\n\n - name: microbuildEnv\n type: object\n "
},
{
"path": "eng/common/core-templates/steps/install-microbuild.yml",
"chars": 6346,
"preview": "parameters:\n # Enable install tasks for MicroBuild\n enableMicrobuild: false\n # Enable install tasks for MicroBuild on"
},
{
"path": "eng/common/core-templates/steps/publish-build-artifacts.yml",
"chars": 667,
"preview": "parameters:\n- name: is1ESPipeline\n type: boolean\n default: false\n- name: args\n type: object\n default: {}\nsteps:\n- ${"
},
{
"path": "eng/common/core-templates/steps/publish-logs.yml",
"chars": 2679,
"preview": "parameters:\n StageLabel: ''\n JobLabel: ''\n CustomSensitiveDataList: ''\n # A default - in case value from eng/common/"
},
{
"path": "eng/common/core-templates/steps/publish-pipeline-artifacts.yml",
"chars": 562,
"preview": "parameters:\n- name: is1ESPipeline\n type: boolean\n default: false\n\n- name: args\n type: object\n default: {} \n\nsteps:\n"
},
{
"path": "eng/common/core-templates/steps/retain-build.yml",
"chars": 1222,
"preview": "parameters:\n # Optional azure devops PAT with build execute permissions for the build's organization,\n # only needed i"
},
{
"path": "eng/common/core-templates/steps/send-to-helix.yml",
"chars": 8338,
"preview": "# Please remember to update the documentation if you make changes to these parameters!\nparameters:\n HelixSource: 'pr/de"
},
{
"path": "eng/common/core-templates/steps/source-build.yml",
"chars": 3127,
"preview": "parameters:\n # This template adds arcade-powered source-build to CI.\n\n # This is a 'steps' template, and is intended f"
},
{
"path": "eng/common/core-templates/steps/source-index-stage1-publish.yml",
"chars": 2051,
"preview": "parameters:\n sourceIndexUploadPackageVersion: 2.0.0-20250906.1\n sourceIndexProcessBinlogPackageVersion: 1.0.1-20250906"
},
{
"path": "eng/common/core-templates/variables/pool-providers.yml",
"chars": 258,
"preview": "parameters:\n is1ESPipeline: false\n\nvariables:\n - ${{ if eq(parameters.is1ESPipeline, 'true') }}:\n - template: /eng/"
},
{
"path": "eng/common/cross/armel/tizen/tizen.patch",
"chars": 476,
"preview": "diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so\n--- a/usr/lib/libc.so\t2016-12-30 23:00:08.284951863 +0900\n+++ b/usr/lib/l"
},
{
"path": "eng/common/cross/build-android-rootfs.sh",
"chars": 5426,
"preview": "#!/usr/bin/env bash\nset -e\n__NDK_Version=r21\n\nusage()\n{\n echo \"Creates a toolchain and sysroot used for cross-compili"
},
{
"path": "eng/common/cross/build-rootfs.sh",
"chars": 41651,
"preview": "#!/usr/bin/env bash\n\nset -e\n\nusage()\n{\n echo \"Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] "
},
{
"path": "eng/common/cross/install-debs.py",
"chars": 13176,
"preview": "#!/usr/bin/env python3\n\nimport argparse\nimport asyncio\nimport aiohttp\nimport gzip\nimport os\nimport re\nimport shutil\nimpo"
},
{
"path": "eng/common/cross/riscv64/tizen/tizen.patch",
"chars": 516,
"preview": "diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so\n--- a/usr/lib64/libc.so\t2016-12-30 23:00:08.284951863 +0900\n+++ b/usr/lib"
},
{
"path": "eng/common/cross/tizen-build-rootfs.sh",
"chars": 2100,
"preview": "#!/usr/bin/env bash\nset -e\n\nARCH=$1\nLINK_ARCH=$ARCH\n\ncase \"$ARCH\" in\n arm)\n TIZEN_ARCH=\"armv7hl\"\n ;;\n "
},
{
"path": "eng/common/cross/tizen-fetch.sh",
"chars": 4829,
"preview": "#!/usr/bin/env bash\nset -e\n\nif [[ -z \"${VERBOSE// }\" ]] || [ \"$VERBOSE\" -ne \"$VERBOSE\" ] 2>/dev/null; then\n VERBOSE=0"
},
{
"path": "eng/common/cross/toolchain.cmake",
"chars": 14853,
"preview": "set(CROSS_ROOTFS $ENV{ROOTFS_DIR})\n\n# reset platform variables (e.g. cmake 3.25 sets LINUX=1)\nunset(LINUX)\nunset(FREEBSD"
},
{
"path": "eng/common/darc-init.ps1",
"chars": 1860,
"preview": "param (\n $darcVersion = $null,\n $versionEndpoint = 'https://maestro.dot.net/api/assets/darc-version?api-version=20"
},
{
"path": "eng/common/darc-init.sh",
"chars": 2420,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\ndarcVersion=''\nversionEndpoint='https://maestro.dot.net/api/assets/darc-"
},
{
"path": "eng/common/dotnet-install.cmd",
"chars": 101,
"preview": "@echo off\npowershell -ExecutionPolicy ByPass -NoProfile -command \"& \"\"\"%~dp0dotnet-install.ps1\"\"\" %*\""
},
{
"path": "eng/common/dotnet-install.ps1",
"chars": 786,
"preview": "[CmdletBinding(PositionalBinding=$false)]\nParam(\n [string] $verbosity = 'minimal',\n [string] $architecture = '',\n [st"
},
{
"path": "eng/common/dotnet-install.sh",
"chars": 2232,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\n# resolve $source until the file is no longer a symlink\nwhile [[ -h \"$so"
},
{
"path": "eng/common/dotnet.cmd",
"chars": 225,
"preview": "@echo off\n\n:: This script is used to install the .NET SDK.\n:: It will also invoke the SDK with any provided arguments.\n\n"
},
{
"path": "eng/common/dotnet.ps1",
"chars": 321,
"preview": "# This script is used to install the .NET SDK.\n# It will also invoke the SDK with any provided arguments.\n\n. $PSScriptRo"
},
{
"path": "eng/common/dotnet.sh",
"chars": 805,
"preview": "#!/usr/bin/env bash\n\n# This script is used to install the .NET SDK.\n# It will also invoke the SDK with any provided argu"
},
{
"path": "eng/common/enable-cross-org-publishing.ps1",
"chars": 584,
"preview": "param(\n [string] $token\n)\n\n\n. $PSScriptRoot\\pipeline-logging-functions.ps1\n\n# Write-PipelineSetVariable will no-op if a"
},
{
"path": "eng/common/generate-locproject.ps1",
"chars": 10088,
"preview": "Param(\n [Parameter(Mandatory=$true)][string] $SourcesDirectory, # Directory where source files live; if using a L"
},
{
"path": "eng/common/generate-sbom-prep.ps1",
"chars": 1164,
"preview": "Param(\n [Parameter(Mandatory=$true)][string] $ManifestDirPath # Manifest directory where sbom will be placed\n)\n\n. "
},
{
"path": "eng/common/generate-sbom-prep.sh",
"chars": 1515,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\n\n# resolve $SOURCE until the file is no longer a symlink\nwhile [[ -h $so"
},
{
"path": "eng/common/helixpublish.proj",
"chars": 923,
"preview": "<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under t"
},
{
"path": "eng/common/init-tools-native.cmd",
"chars": 133,
"preview": "@echo off\npowershell -NoProfile -NoLogo -ExecutionPolicy ByPass -command \"& \"\"\"%~dp0init-tools-native.ps1\"\"\" %*\"\nexit /b"
},
{
"path": "eng/common/init-tools-native.ps1",
"chars": 7953,
"preview": "<#\n.SYNOPSIS\nEntry point script for installing native tools\n\n.DESCRIPTION\nReads $RepoRoot\\global.json file to determine "
},
{
"path": "eng/common/init-tools-native.sh",
"chars": 7326,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\nscriptroot=\"$( cd -P \"$( dirname \"$source\" )\" && pwd )\"\n\nbase_uri='https"
},
{
"path": "eng/common/internal/Directory.Build.props",
"chars": 408,
"preview": "<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under t"
},
{
"path": "eng/common/internal/NuGet.config",
"chars": 339,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <packageSources>\n <clear />\n <add key=\"dotnet-core-intern"
},
{
"path": "eng/common/internal/Tools.csproj",
"chars": 1579,
"preview": "<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under t"
},
{
"path": "eng/common/internal-feed-operations.ps1",
"chars": 4665,
"preview": "param(\n [Parameter(Mandatory=$true)][string] $Operation,\n [string] $AuthToken,\n [string] $CommitSha,\n [string] $Repo"
},
{
"path": "eng/common/internal-feed-operations.sh",
"chars": 4395,
"preview": "#!/usr/bin/env bash\n\nset -e\n\n# Sets VSS_NUGET_EXTERNAL_FEED_ENDPOINTS based on the \"darc-int-*\" feeds defined in NuGet.c"
},
{
"path": "eng/common/loc/P22DotNetHtmlLocalization.lss",
"chars": 1876,
"preview": "<?xml version=\"1.0\"?>\n<LS_SETTINGS_FILE>\n <LS_SETTINGS_DESCRIPTION>\n <![CDATA[]]>\n </LS_SETTINGS_DESCRIPTION>\n <op"
},
{
"path": "eng/common/msbuild.ps1",
"chars": 571,
"preview": "[CmdletBinding(PositionalBinding=$false)]\nParam(\n [string] $verbosity = 'minimal',\n [bool] $warnAsError = $true,\n [bo"
},
{
"path": "eng/common/msbuild.sh",
"chars": 1143,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\n\n# resolve $source until the file is no longer a symlink\nwhile [[ -h \"$s"
},
{
"path": "eng/common/native/CommonLibrary.psm1",
"chars": 12103,
"preview": "<#\n.SYNOPSIS\nHelper module to install an archive to a directory\n\n.DESCRIPTION\nHelper module to download and extract an a"
},
{
"path": "eng/common/native/common-library.sh",
"chars": 4171,
"preview": "#!/usr/bin/env bash\n\nfunction GetNativeInstallDirectory {\n local install_dir\n\n if [[ -z $NETCOREENG_INSTALL_DIRECTORY "
},
{
"path": "eng/common/native/init-compiler.sh",
"chars": 4665,
"preview": "#!/bin/sh\n#\n# This file detects the C/C++ compiler and exports it to the CC/CXX environment variables\n#\n# NOTE: some scr"
},
{
"path": "eng/common/native/init-distro-rid.sh",
"chars": 3706,
"preview": "#!/bin/sh\n\n# getNonPortableDistroRid\n#\n# Input:\n# targetOs: (str)\n# targetArch: (str)\n# rootfsDir: (str)\n#\n# Retur"
},
{
"path": "eng/common/native/init-os-and-arch.sh",
"chars": 1876,
"preview": "#!/bin/sh\n\n# Use uname to determine what the OS is.\nOSName=$(uname -s | tr '[:upper:]' '[:lower:]')\n\nif command -v getpr"
},
{
"path": "eng/common/native/install-cmake-test.sh",
"chars": 3010,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\nscriptroot=\"$( cd -P \"$( dirname \"$source\" )\" && pwd )\"\n\n. $scriptroot/c"
},
{
"path": "eng/common/native/install-cmake.sh",
"chars": 3005,
"preview": "#!/usr/bin/env bash\n\nsource=\"${BASH_SOURCE[0]}\"\nscriptroot=\"$( cd -P \"$( dirname \"$source\" )\" && pwd )\"\n\n. $scriptroot/c"
},
{
"path": "eng/common/native/install-dependencies.sh",
"chars": 2127,
"preview": "#!/bin/sh\n\nset -e\n\n# This is a simple script primarily used for CI to install necessary dependencies\n#\n# Usage:\n#\n# ./in"
},
{
"path": "eng/common/native/install-tool.ps1",
"chars": 4286,
"preview": "<#\n.SYNOPSIS\nInstall native tool\n\n.DESCRIPTION\nInstall cmake native tool from Azure blob storage\n\n.PARAMETER InstallPath"
},
{
"path": "eng/common/pipeline-logging-functions.ps1",
"chars": 8460,
"preview": "# Source for this file was taken from https://github.com/microsoft/azure-pipelines-task-lib/blob/11c9439d4af17e6475d9fe0"
},
{
"path": "eng/common/pipeline-logging-functions.sh",
"chars": 3864,
"preview": "#!/usr/bin/env bash\n\nfunction Write-PipelineTelemetryError {\n local telemetry_category=''\n local force=false\n local f"
},
{
"path": "eng/common/post-build/check-channel-consistency.ps1",
"chars": 2176,
"preview": "param(\n [Parameter(Mandatory=$true)][string] $PromoteToChannels, # List of channels that the build should be"
},
{
"path": "eng/common/post-build/nuget-validation.ps1",
"chars": 763,
"preview": "# This script validates NuGet package metadata information using this \n# tool: https://github.com/NuGet/NuGetGallery/tre"
},
{
"path": "eng/common/post-build/nuget-verification.ps1",
"chars": 4301,
"preview": "<#\n.SYNOPSIS\n Verifies that Microsoft NuGet packages have proper metadata.\n.DESCRIPTION\n Downloads a verification "
},
{
"path": "eng/common/post-build/publish-using-darc.ps1",
"chars": 2489,
"preview": "param(\n [Parameter(Mandatory=$true)][int] $BuildId,\n [Parameter(Mandatory=$true)][int] $PublishingInfraVersion,\n [Par"
},
{
"path": "eng/common/post-build/redact-logs.ps1",
"chars": 3106,
"preview": "[CmdletBinding(PositionalBinding=$False)]\nparam(\n [Parameter(Mandatory=$true, Position=0)][string] $InputPath,\n [Param"
},
{
"path": "eng/common/post-build/sourcelink-validation.ps1",
"chars": 11864,
"preview": "param(\n [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where Symbols.NuGet pack"
},
{
"path": "eng/common/post-build/symbols-validation.ps1",
"chars": 11648,
"preview": "param(\n [Parameter(Mandatory = $true)][string] $InputPath, # Full path to directory where NuGet packages to be checked "
},
{
"path": "eng/common/retain-build.ps1",
"chars": 1373,
"preview": "\nParam(\n[Parameter(Mandatory=$true)][int] $buildId,\n[Parameter(Mandatory=$true)][string] $azdoOrgUri, \n[Parameter(Mandat"
},
{
"path": "eng/common/sdk-task.ps1",
"chars": 3556,
"preview": "[CmdletBinding(PositionalBinding=$false)]\nParam(\n [string] $configuration = 'Debug',\n [string] $task,\n [string] $verb"
},
{
"path": "eng/common/sdk-task.sh",
"chars": 2945,
"preview": "#!/usr/bin/env bash\n\nshow_usage() {\n echo \"Common settings:\"\n echo \" --task <value> Name of Arcade task"
},
{
"path": "eng/common/sdl/NuGet.config",
"chars": 562,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <solution>\n <add key=\"disableSourceControlIntegration\" valu"
},
{
"path": "eng/common/sdl/configure-sdl-tool.ps1",
"chars": 4777,
"preview": "Param(\n [string] $GuardianCliLocation,\n [string] $WorkingDirectory,\n [string] $TargetDirectory,\n [string] $GdnFolder"
},
{
"path": "eng/common/sdl/execute-all-sdl-tools.ps1",
"chars": 12121,
"preview": "Param(\n [string] $GuardianPackageName, # Required: the "
},
{
"path": "eng/common/sdl/extract-artifact-archives.ps1",
"chars": 2341,
"preview": "# This script looks for each archive file in a directory and extracts it into the target directory.\n# For example, the f"
},
{
"path": "eng/common/sdl/extract-artifact-packages.ps1",
"chars": 2612,
"preview": "param(\n [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where artifact packages "
},
{
"path": "eng/common/sdl/init-sdl.ps1",
"chars": 2480,
"preview": "Param(\n [string] $GuardianCliLocation,\n [string] $Repository,\n [string] $BranchName='master',\n [string] $WorkingDire"
},
{
"path": "eng/common/sdl/packages.config",
"chars": 121,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Guardian.Cli\" version=\"0.199.0\"/>\n</packages>"
},
{
"path": "eng/common/sdl/run-sdl.ps1",
"chars": 1430,
"preview": "Param(\n [string] $GuardianCliLocation,\n [string] $WorkingDirectory,\n [string] $GdnFolder,\n [string] $UpdateBaseline,"
},
{
"path": "eng/common/sdl/sdl.ps1",
"chars": 1230,
"preview": "\nfunction Install-Gdn {\n param(\n [Parameter(Mandatory=$true)]\n [string]$Path,\n\n # If omitted, in"
},
{
"path": "eng/common/sdl/trim-assets-version.ps1",
"chars": 2229,
"preview": "<#\n.SYNOPSIS\nInstall and run the 'Microsoft.DotNet.VersionTools.Cli' tool with the 'trim-artifacts-version' command to t"
},
{
"path": "eng/common/template-guidance.md",
"chars": 7565,
"preview": "# Overview\n\nArcade provides templates for public (`/templates`) and 1ES pipeline templates (`/templates-official`) scena"
},
{
"path": "eng/common/templates/job/job.yml",
"chars": 4195,
"preview": "parameters: \n enablePublishBuildArtifacts: false\n disableComponentGovernance: ''\n componentGovernanceIgnoreDirectorie"
},
{
"path": "eng/common/templates/job/onelocbuild.yml",
"chars": 197,
"preview": "jobs:\n- template: /eng/common/core-templates/job/onelocbuild.yml\n parameters:\n is1ESPipeline: false\n\n ${{ each pa"
},
{
"path": "eng/common/templates/job/publish-build-assets.yml",
"chars": 206,
"preview": "jobs:\n- template: /eng/common/core-templates/job/publish-build-assets.yml\n parameters:\n is1ESPipeline: false\n\n ${"
},
{
"path": "eng/common/templates/job/source-build.yml",
"chars": 198,
"preview": "jobs:\n- template: /eng/common/core-templates/job/source-build.yml\n parameters:\n is1ESPipeline: false\n\n ${{ each p"
},
{
"path": "eng/common/templates/job/source-index-stage1.yml",
"chars": 205,
"preview": "jobs:\n- template: /eng/common/core-templates/job/source-index-stage1.yml\n parameters:\n is1ESPipeline: false\n\n ${{"
},
{
"path": "eng/common/templates/jobs/codeql-build.yml",
"chars": 199,
"preview": "jobs:\n- template: /eng/common/core-templates/jobs/codeql-build.yml\n parameters:\n is1ESPipeline: false\n\n ${{ each "
},
{
"path": "eng/common/templates/jobs/jobs.yml",
"chars": 191,
"preview": "jobs:\n- template: /eng/common/core-templates/jobs/jobs.yml\n parameters:\n is1ESPipeline: false\n\n ${{ each paramete"
},
{
"path": "eng/common/templates/jobs/source-build.yml",
"chars": 198,
"preview": "jobs:\n- template: /eng/common/core-templates/jobs/source-build.yml\n parameters:\n is1ESPipeline: false\n\n ${{ each "
},
{
"path": "eng/common/templates/post-build/common-variables.yml",
"chars": 248,
"preview": "variables:\n- template: /eng/common/core-templates/post-build/common-variables.yml\n parameters:\n # Specifies whether "
},
{
"path": "eng/common/templates/post-build/post-build.yml",
"chars": 239,
"preview": "stages:\n- template: /eng/common/core-templates/post-build/post-build.yml\n parameters:\n # Specifies whether to use 1E"
},
{
"path": "eng/common/templates/post-build/setup-maestro-vars.yml",
"chars": 246,
"preview": "steps:\n- template: /eng/common/core-templates/post-build/setup-maestro-vars.yml\n parameters:\n # Specifies whether to"
},
{
"path": "eng/common/templates/steps/component-governance.yml",
"chars": 209,
"preview": "steps:\n- template: /eng/common/core-templates/steps/component-governance.yml\n parameters:\n is1ESPipeline: false\n\n "
},
{
"path": "eng/common/templates/steps/enable-internal-runtimes.yml",
"chars": 389,
"preview": "# Obtains internal runtime download credentials and populates the 'dotnetbuilds-internal-container-read-token-base64'\n# "
},
{
"path": "eng/common/templates/steps/enable-internal-sources.yml",
"chars": 211,
"preview": "steps:\n- template: /eng/common/core-templates/steps/enable-internal-sources.yml\n parameters:\n is1ESPipeline: false\n\n"
},
{
"path": "eng/common/templates/steps/generate-sbom.yml",
"chars": 202,
"preview": "steps:\n- template: /eng/common/core-templates/steps/generate-sbom.yml\n parameters:\n is1ESPipeline: false\n\n ${{ ea"
},
{
"path": "eng/common/templates/steps/get-delegation-sas.yml",
"chars": 207,
"preview": "steps:\n- template: /eng/common/core-templates/steps/get-delegation-sas.yml\n parameters:\n is1ESPipeline: false\n\n $"
},
{
"path": "eng/common/templates/steps/get-federated-access-token.yml",
"chars": 214,
"preview": "steps:\n- template: /eng/common/core-templates/steps/get-federated-access-token.yml\n parameters:\n is1ESPipeline: fals"
},
{
"path": "eng/common/templates/steps/publish-build-artifacts.yml",
"chars": 1140,
"preview": "parameters:\n- name: is1ESPipeline\n type: boolean\n default: false\n\n- name: displayName\n type: string\n default: 'Publi"
},
{
"path": "eng/common/templates/steps/publish-logs.yml",
"chars": 201,
"preview": "steps:\n- template: /eng/common/core-templates/steps/publish-logs.yml\n parameters:\n is1ESPipeline: false\n\n ${{ eac"
},
{
"path": "eng/common/templates/steps/publish-pipeline-artifacts.yml",
"chars": 1262,
"preview": "parameters:\n- name: is1ESPipeline\n type: boolean\n default: false\n\n- name: args\n type: object\n default: {}\n\nsteps:\n- "
},
{
"path": "eng/common/templates/steps/retain-build.yml",
"chars": 201,
"preview": "steps:\n- template: /eng/common/core-templates/steps/retain-build.yml\n parameters:\n is1ESPipeline: false\n\n ${{ eac"
},
{
"path": "eng/common/templates/steps/send-to-helix.yml",
"chars": 202,
"preview": "steps:\n- template: /eng/common/core-templates/steps/send-to-helix.yml\n parameters:\n is1ESPipeline: false\n\n ${{ ea"
},
{
"path": "eng/common/templates/steps/source-build.yml",
"chars": 201,
"preview": "steps:\n- template: /eng/common/core-templates/steps/source-build.yml\n parameters:\n is1ESPipeline: false\n\n ${{ eac"
},
{
"path": "eng/common/templates/steps/source-index-stage1-publish.yml",
"chars": 216,
"preview": "steps:\n- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml\n parameters:\n is1ESPipeline: fal"
},
{
"path": "eng/common/templates/steps/vmr-sync.yml",
"chars": 6532,
"preview": "### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet).\n### They"
},
{
"path": "eng/common/templates/variables/pool-providers.yml",
"chars": 2855,
"preview": "# Select a pool provider based off branch name. Anything with branch name containing 'release' must go into an -Svc pool"
},
{
"path": "eng/common/templates/vmr-build-pr.yml",
"chars": 1391,
"preview": "# This pipeline is used for running the VMR verification of the PR changes in repo-level PRs.\n#\n# It will run a full set"
},
{
"path": "eng/common/templates-official/job/job.yml",
"chars": 4219,
"preview": "parameters:\n# Sbom related params\n enableSbom: true\n runAsPublic: false\n PackageVersion: 9.0.0\n BuildDropPath: '$(Sy"
},
{
"path": "eng/common/templates-official/job/onelocbuild.yml",
"chars": 196,
"preview": "jobs:\n- template: /eng/common/core-templates/job/onelocbuild.yml\n parameters:\n is1ESPipeline: true\n\n ${{ each par"
},
{
"path": "eng/common/templates-official/job/publish-build-assets.yml",
"chars": 205,
"preview": "jobs:\n- template: /eng/common/core-templates/job/publish-build-assets.yml\n parameters:\n is1ESPipeline: true\n\n ${{"
},
{
"path": "eng/common/templates-official/job/source-build.yml",
"chars": 197,
"preview": "jobs:\n- template: /eng/common/core-templates/job/source-build.yml\n parameters:\n is1ESPipeline: true\n\n ${{ each pa"
},
{
"path": "eng/common/templates-official/job/source-index-stage1.yml",
"chars": 204,
"preview": "jobs:\n- template: /eng/common/core-templates/job/source-index-stage1.yml\n parameters:\n is1ESPipeline: true\n\n ${{ "
},
{
"path": "eng/common/templates-official/jobs/codeql-build.yml",
"chars": 198,
"preview": "jobs:\n- template: /eng/common/core-templates/jobs/codeql-build.yml\n parameters:\n is1ESPipeline: true\n\n ${{ each p"
},
{
"path": "eng/common/templates-official/jobs/jobs.yml",
"chars": 190,
"preview": "jobs:\n- template: /eng/common/core-templates/jobs/jobs.yml\n parameters:\n is1ESPipeline: true\n\n ${{ each parameter"
},
{
"path": "eng/common/templates-official/jobs/source-build.yml",
"chars": 197,
"preview": "jobs:\n- template: /eng/common/core-templates/jobs/source-build.yml\n parameters:\n is1ESPipeline: true\n\n ${{ each p"
},
{
"path": "eng/common/templates-official/post-build/common-variables.yml",
"chars": 247,
"preview": "variables:\n- template: /eng/common/core-templates/post-build/common-variables.yml\n parameters:\n # Specifies whether "
},
{
"path": "eng/common/templates-official/post-build/post-build.yml",
"chars": 239,
"preview": "stages:\n- template: /eng/common/core-templates/post-build/post-build.yml\n parameters:\n # Specifies whether to use 1E"
},
{
"path": "eng/common/templates-official/post-build/setup-maestro-vars.yml",
"chars": 245,
"preview": "steps:\n- template: /eng/common/core-templates/post-build/setup-maestro-vars.yml\n parameters:\n # Specifies whether to"
},
{
"path": "eng/common/templates-official/steps/component-governance.yml",
"chars": 208,
"preview": "steps:\n- template: /eng/common/core-templates/steps/component-governance.yml\n parameters:\n is1ESPipeline: true\n\n "
},
{
"path": "eng/common/templates-official/steps/enable-internal-runtimes.yml",
"chars": 387,
"preview": "# Obtains internal runtime download credentials and populates the 'dotnetbuilds-internal-container-read-token-base64'\n# "
},
{
"path": "eng/common/templates-official/steps/enable-internal-sources.yml",
"chars": 210,
"preview": "steps:\n- template: /eng/common/core-templates/steps/enable-internal-sources.yml\n parameters:\n is1ESPipeline: true\n\n "
},
{
"path": "eng/common/templates-official/steps/generate-sbom.yml",
"chars": 201,
"preview": "steps:\n- template: /eng/common/core-templates/steps/generate-sbom.yml\n parameters:\n is1ESPipeline: true\n\n ${{ eac"
}
]
// ... and 831 more files (download for full content)
About this extraction
This page contains the full source code of the dotnet/yarp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1031 files (3.3 MB), approximately 928.9k tokens, and a symbol index with 3075 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.