using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace FastGithub.Upgrade
{
    /// 
    /// 本机反向代理的httpHandler
    /// 
    sealed class ReverseProxyHttpHandler : DelegatingHandler
    {
        /// 
        /// 本机反向代理的httpHandler
        /// 
        public ReverseProxyHttpHandler()
        {
            this.InnerHandler = new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = delegate { return true; }
            };
        }
        /// 
        /// 替换为Loopback
        /// 
        /// 
        /// 
        /// 
        protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var uri = request.RequestUri;
            if (uri != null && uri.HostNameType == UriHostNameType.Dns)
            {
                var domain = uri.Host;
                var builder = new UriBuilder(uri) { Host = IPAddress.Loopback.ToString() };
                request.RequestUri = builder.Uri;
                request.Headers.Host = domain;
            }
            return await base.SendAsync(request, cancellationToken);
        }
    }
}