using DNS.Protocol;
using System;
using System.Net;
using System.Net.Sockets;
namespace FastGithub.Dns
{
    /// 
    /// 带远程终节点的请求
    /// 
    sealed class RemoteEndPointRequest : Request
    {
        /// 
        /// 获取程终节点
        /// 
        public EndPoint RemoteEndPoint { get; }
        /// 
        /// 远程请求
        /// 
        /// 
        /// 
        public RemoteEndPointRequest(Request request, EndPoint remoteEndPoint)
            : base(request)
        {
            this.RemoteEndPoint = remoteEndPoint;
        }
        /// 
        /// 获取对应的本机地址
        ///  
        /// 
        public IPAddress? GetLocalAddress()
        {
            try
            {
                using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                socket.Connect(this.RemoteEndPoint);
                return socket.LocalEndPoint is IPEndPoint localEndPoint ? localEndPoint.Address : default;
            }
            catch (Exception)
            {
                return default;
            }
        }
    }
}