public static UriBuilder PatchFromHeaders(this UriBuilder baseUri, NameValueCollection headers)
{
var port = headers[ProxyPortHeader].ParseInt() ?? baseUri.Port;
var isSsl = baseUri.IsSsl(headers);
if (isSsl)
{
baseUri.Scheme = Uri.UriSchemeHttps;
baseUri.Port = port == 443 ? -1 : port;
}
else
{
baseUri.Scheme = Uri.UriSchemeHttp;
baseUri.Port = port == 80 ? -1 : port;
}
var alternative = headers[ProxyAlternativeHostHeader];
if (!alternative.IsNullOrEmpty())
{
baseUri.Host = alternative.Trim();
}
var origin = headers[OriginHeader];
return !origin.IsNullOrEmpty() ? PrepareFromOrigin(origin, baseUri) : baseUri;
}