Exemplo n.º 1
0
        public override async Task <int> UdpQueryAsync(ArraySegment <byte> request, ArraySegment <byte> response, EndPoint remoteEP, int timeout = 10000, int retries = 1, bool expBackoffTimeout = false, CancellationToken cancellationToken = default)
        {
            if (IsBypassed(remoteEP))
            {
                IPEndPoint ep = await remoteEP.GetIPEndPointAsync();

                using (Socket socket = new Socket(ep.AddressFamily, SocketType.Dgram, ProtocolType.Udp))
                {
                    return(await socket.UdpQueryAsync(request, response, ep, timeout, retries, expBackoffTimeout, cancellationToken));
                }
            }

            if (_viaProxy != null)
            {
                throw new NotSupportedException("Cannot chain proxies for Udp protocol.");
            }

            using (SocksProxyUdpAssociateHandler proxyUdpRequestHandler = await UdpAssociateAsync())
            {
                return(await proxyUdpRequestHandler.UdpQueryAsync(request, response, remoteEP, timeout, retries, expBackoffTimeout, cancellationToken));
            }
        }