You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by sebb <se...@gmail.com> on 2011/09/06 18:02:41 UTC
Re: svn commit: r1165635 - in /httpcomponents/httpclient/trunk: ./
httpclient/src/main/java/org/apache/http/conn/ httpclient/src/main/java/org/apache/http/impl/conn/
httpclient/src/test/java/org/apache/http/impl/conn/
On 6 September 2011 13:20, <ol...@apache.org> wrote:
> Author: olegk
> Date: Tue Sep 6 12:20:26 2011
> New Revision: 1165635
>
> URL: http://svn.apache.org/viewvc?rev=1165635&view=rev
> Log:
> HTTPCLIENT-1123: Support for pluggable DNS resolvers.
> Contributed by Alin Vasile <alinachegalati at yahoo dot com>
>
> Added:
> httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/DnsResolver.java (with props)
> httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/InMemoryDnsResolver.java (with props)
> httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestDefaultClientConnectOperator.java (with props)
> Modified:
> httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
> httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java
> httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingClientConnectionManager.java
>
> Modified: httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
> URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/RELEASE_NOTES.txt?rev=1165635&r1=1165634&r2=1165635&view=diff
> ==============================================================================
> --- httpcomponents/httpclient/trunk/RELEASE_NOTES.txt (original)
> +++ httpcomponents/httpclient/trunk/RELEASE_NOTES.txt Tue Sep 6 12:20:26 2011
> @@ -1,8 +1,18 @@
> -Changes since 4.1.1
> +Changes since 4.1.2
> +
> +* [HTTPCLIENT-1123] Support for pluggable DNS resolvers.
> + Contributed by Alin Vasile <alinachegalati at yahoo dot com>
>
> * [HTTPCLIENT-1120] DefaultHttpRequestRetryHandler#retryRequest should not retry aborted requests
> Contributed by Alin Vasile <alinachegalati at yahoo dot com>
>
> +
> +Release 4.1.2
> +-------------------
> +
> +The HttpClient 4.1.2 is a bug fix release that addresses a number of non-critical issues reported
> +since release 4.1.1.
> +
> * [HTTPCLIENT-1100] Missing Content-Length header makes cached entry invalid
> Contributed by Bart Robeyns <bart dot robeyns at gmail dot com>
>
> @@ -32,6 +42,9 @@ Changes since 4.1.1
> do not correctly handle content streaming.
> Contributed by James Abley <james.abley at gmail.com>
>
> +* [HTTPCLIENT-1051] Avoid reverse DNS lookups when opening SSL connections by IP address.
> + Contributed by Oleg Kalnichevski <olegk at apache.org>
> +
>
> Release 4.1.1
> -------------------
>
> Added: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/DnsResolver.java
> URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/DnsResolver.java?rev=1165635&view=auto
> ==============================================================================
> --- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/DnsResolver.java (added)
> +++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/DnsResolver.java Tue Sep 6 12:20:26 2011
> @@ -0,0 +1,52 @@
> +/*
> + * ====================================================================
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + * ====================================================================
> + *
> + * This software consists of voluntary contributions made by many
> + * individuals on behalf of the Apache Software Foundation. For more
> + * information on the Apache Software Foundation, please see
> + * <http://www.apache.org/>.
> + *
> + */
> +package org.apache.http.conn;
> +
> +import java.net.InetAddress;
> +import java.net.UnknownHostException;
> +
> +/**
> + * Users may implement this interface to override the normal DNS lookup offered
> + * by the OS.
> + */
> +public interface DnsResolver {
> +
> + /**
> + * Returns the IP address for the specified host name, or null if the given
> + * host is not recognized or the associated IP address cannot be used to
> + * build an InetAddress instance.
> + *
> + * @see InetAddress
> + *
> + * @param host
> + * The host name to be resolved by this resolver.
> + * @return The IP address associated to the given host name, or null if the
> + * host name is not known by the implementation class.
> + */
> + InetAddress[] resolve(String host) throws UnknownHostException;
> +
> +}
> \ No newline at end of file
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/DnsResolver.java
> ------------------------------------------------------------------------------
> svn:eol-style = native
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/DnsResolver.java
> ------------------------------------------------------------------------------
> svn:keywords = Date Revision
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/DnsResolver.java
> ------------------------------------------------------------------------------
> svn:mime-type = text/plain
>
> Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java
> URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java?rev=1165635&r1=1165634&r2=1165635&view=diff
> ==============================================================================
> --- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java (original)
> +++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionOperator.java Tue Sep 6 12:20:26 2011
> @@ -53,6 +53,8 @@ import org.apache.http.conn.scheme.Schem
> import org.apache.http.conn.scheme.SchemeRegistry;
> import org.apache.http.conn.scheme.SchemeSocketFactory;
>
> +import org.apache.http.conn.DnsResolver;
> +
> /**
> * Default implementation of a {@link ClientConnectionOperator}. It uses a {@link SchemeRegistry}
> * to look up {@link SchemeSocketFactory} objects.
> @@ -90,6 +92,9 @@ public class DefaultClientConnectionOper
> /** The scheme registry for looking up socket factories. */
> protected final SchemeRegistry schemeRegistry; // @ThreadSafe
>
> + /** the custom-configured DNS lookup mechanism. */
> + protected final DnsResolver dnsResolver;
> +
> /**
> * Creates a new client connection operator for the given scheme registry.
> *
> @@ -100,6 +105,26 @@ public class DefaultClientConnectionOper
> throw new IllegalArgumentException("Scheme registry amy not be null");
> }
> this.schemeRegistry = schemes;
> + this.dnsResolver = null;
Could replace this with a default resolver that did
return InetAddress.getAllByName(host);
> + }
> +
> + /**
> + * Creates a new client connection operator for the given scheme registry
> + * and the given custom DNS lookup mechanism.
> + *
> + * @param schemes
> + * the scheme registry
> + * @param dnsResolver
> + * the custom DNS lookup mechanism
> + */
> + public DefaultClientConnectionOperator(final SchemeRegistry schemes,final DnsResolver dnsResolver) {
> + if (schemes == null) {
> + throw new IllegalArgumentException(
> + "Scheme registry amy not be null");
> + }
> +
> + this.schemeRegistry = schemes;
> + this.dnsResolver = dnsResolver;
> }
>
> public OperatedClientConnection createConnection() {
> @@ -233,6 +258,10 @@ public class DefaultClientConnectionOper
> * Resolves the given host name to an array of corresponding IP addresses, based on the
> * configured name service on the system.
> *
> + * If a custom DNS resolver is provided, the given host will be searched in
> + * it first. If the host is not configured, the default OS DNS-lookup
> + * mechanism is used.
> + *
> * @param host host name to resolve
> * @return array of IP addresses
> * @exception UnknownHostException if no IP address for the host could be determined.
> @@ -240,7 +269,11 @@ public class DefaultClientConnectionOper
> * @since 4.1
> */
> protected InetAddress[] resolveHostname(final String host) throws UnknownHostException {
> - return InetAddress.getAllByName(host);
> + if (dnsResolver != null) {
> + return dnsResolver.resolve(host);
> + } else {
> + return InetAddress.getAllByName(host);
> + }
This check would not be needed if the default resolver existed.
> }
>
> }
>
> Added: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/InMemoryDnsResolver.java
> URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/InMemoryDnsResolver.java?rev=1165635&view=auto
> ==============================================================================
> --- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/InMemoryDnsResolver.java (added)
> +++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/InMemoryDnsResolver.java Tue Sep 6 12:20:26 2011
> @@ -0,0 +1,119 @@
> +/*
> + * ====================================================================
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + * ====================================================================
> + *
> + * This software consists of voluntary contributions made by many
> + * individuals on behalf of the Apache Software Foundation. For more
> + * information on the Apache Software Foundation, please see
> + * <http://www.apache.org/>.
> + *
> + */
> +package org.apache.http.impl.conn;
> +
> +import java.net.InetAddress;
> +import java.net.UnknownHostException;
> +import java.util.Arrays;
> +import java.util.Map;
> +import java.util.concurrent.ConcurrentHashMap;
> +
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
> +import org.apache.http.conn.util.InetAddressUtils;
> +import org.apache.http.conn.DnsResolver;
> +
> +/**
> + * In-memory DNS resolver implementation with entries built using the
> + * {@link InMemoryDnsResolver#add(String, String) method}.
> + *
> + * Currently this class supports only IPv4 addresses.
> + *
> + */
> +public class InMemoryDnsResolver implements DnsResolver {
> +
> + /** Logger associated to this class. */
> + private final Log log = LogFactory.getLog(InMemoryDnsResolver.class);
> +
> + /**
> + * In-memory collection that will hold the associations between a host name
> + * and an array of InetAddress instances.
> + */
> + private Map<String, InetAddress[]> dnsMap;
> +
> + /**
> + * Builds a DNS resolver that will resolve the host names against a
> + * collection held in-memory.
> + */
> + public InMemoryDnsResolver() {
> + dnsMap = new ConcurrentHashMap<String, InetAddress[]>();
> + }
> +
> + /**
> + * Associates the given IP address to the given host in this DNS overrider.
> + *
> + * @param host
> + * The host name to be associated with the given IP.
> + * @param ip
> + * IPv4 address to be resolved by this DNS overrider to the given
> + * host name.
> + *
> + * @throws IllegalArgumentException
> + * if the given IP is not a valid IPv4 address or an InetAddress
> + * instance cannot be built based on the given IPv4 address.
> + *
> + * @see InetAddress#getByAddress
> + */
> + public void add(final String host, final String ip) {
> + if (!InetAddressUtils.isIPv4Address(ip)) {
> + throw new IllegalArgumentException(ip + " must be a valid IPv4 address");
> + }
> +
> + String[] ipParts = ip.split("\\.");
> +
> + byte[] byteIpAddress = new byte[4];
> +
> + for (int i = 0; i < 4; i++) {
> + byteIpAddress[i] = Integer.decode(ipParts[i]).byteValue();
> + }
> +
> + try {
> + dnsMap.put(host, new InetAddress[] { InetAddress.getByAddress(byteIpAddress) });
> + } catch (UnknownHostException e) {
> + log.error("Unable to build InetAddress for " + ip, e);
> + throw new IllegalArgumentException(e);
> + }
> +
> + }
> +
> + /**
> + * {@inheritDoc}
> + */
> + public InetAddress[] resolve(String host) throws UnknownHostException {
> + InetAddress[] resolvedAddresses = dnsMap.get(host);
> + if (log.isInfoEnabled()) {
> + log.info("Resolving " + host + " to " + Arrays.deepToString(resolvedAddresses));
> + }
> +
> + if(resolvedAddresses == null){
> + throw new UnknownHostException(host + " cannot be resolved.");
> + }
> +
> + return resolvedAddresses;
> + }
> +
> +}
> \ No newline at end of file
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/InMemoryDnsResolver.java
> ------------------------------------------------------------------------------
> svn:eol-style = native
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/InMemoryDnsResolver.java
> ------------------------------------------------------------------------------
> svn:keywords = Date Revision
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/InMemoryDnsResolver.java
> ------------------------------------------------------------------------------
> svn:mime-type = text/plain
>
> Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingClientConnectionManager.java
> URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingClientConnectionManager.java?rev=1165635&r1=1165634&r2=1165635&view=diff
> ==============================================================================
> --- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingClientConnectionManager.java (original)
> +++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingClientConnectionManager.java Tue Sep 6 12:20:26 2011
> @@ -47,6 +47,7 @@ import org.apache.http.pool.ConnPoolCont
> import org.apache.http.pool.PoolStats;
> import org.apache.http.impl.conn.DefaultClientConnectionOperator;
> import org.apache.http.impl.conn.SchemeRegistryFactory;
> +import org.apache.http.conn.DnsResolver;
>
> /**
> * Manages a pool of {@link OperatedClientConnection client connections} and
> @@ -77,10 +78,17 @@ public class PoolingClientConnectionMana
>
> private final ClientConnectionOperator operator;
>
> + /** the custom-configured DNS lookup mechanism. */
> + private final DnsResolver dnsResolver;
> +
> public PoolingClientConnectionManager(final SchemeRegistry schreg) {
> this(schreg, -1, TimeUnit.MILLISECONDS);
> }
>
> + public PoolingClientConnectionManager(final SchemeRegistry schreg,final DnsResolver dnsResolver) {
> + this(schreg, -1, TimeUnit.MILLISECONDS,dnsResolver);
> + }
> +
> public PoolingClientConnectionManager() {
> this(SchemeRegistryFactory.createDefault());
> }
> @@ -93,6 +101,20 @@ public class PoolingClientConnectionMana
> throw new IllegalArgumentException("Scheme registry may not be null");
> }
> this.schemeRegistry = schemeRegistry;
> + this.dnsResolver = null;
> + this.operator = createConnectionOperator(schemeRegistry);
> + this.pool = new HttpConnPool(this.log, 2, 20, timeToLive, tunit);
> + }
> +
> + public PoolingClientConnectionManager(final SchemeRegistry schemeRegistry,
> + final long timeToLive, final TimeUnit tunit,
> + final DnsResolver dnsResolver) {
> + super();
> + if (schemeRegistry == null) {
> + throw new IllegalArgumentException("Scheme registry may not be null");
> + }
> + this.schemeRegistry = schemeRegistry;
> + this.dnsResolver = dnsResolver;
> this.operator = createConnectionOperator(schemeRegistry);
> this.pool = new HttpConnPool(this.log, 2, 20, timeToLive, tunit);
> }
> @@ -119,7 +141,7 @@ public class PoolingClientConnectionMana
> * @return the connection operator to use
> */
> protected ClientConnectionOperator createConnectionOperator(SchemeRegistry schreg) {
> - return new DefaultClientConnectionOperator(schreg);
> + return new DefaultClientConnectionOperator(schreg, this.dnsResolver);
> }
>
> public SchemeRegistry getSchemeRegistry() {
>
> Added: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestDefaultClientConnectOperator.java
> URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestDefaultClientConnectOperator.java?rev=1165635&view=auto
> ==============================================================================
> --- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestDefaultClientConnectOperator.java (added)
> +++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestDefaultClientConnectOperator.java Tue Sep 6 12:20:26 2011
> @@ -0,0 +1,78 @@
> +/*
> + * ====================================================================
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + * ====================================================================
> + *
> + * This software consists of voluntary contributions made by many
> + * individuals on behalf of the Apache Software Foundation. For more
> + * information on the Apache Software Foundation, please see
> + * <http://www.apache.org/>.
> + *
> + */
> +package org.apache.http.impl.conn;
> +
> +import static org.mockito.Mockito.mock;
> +import static org.mockito.Mockito.when;
> +
> +import java.net.InetAddress;
> +import java.net.UnknownHostException;
> +
> +import org.apache.http.conn.DnsResolver;
> +
> +import org.junit.Assert;
> +import org.junit.Test;
> +
> +public class TestDefaultClientConnectOperator {
> +
> + @Test
> + public void testCustomDnsResolver() throws Exception {
> + DnsResolver dnsResolver = mock(DnsResolver.class);
> + InetAddress[] firstAddress = translateIp("192.168.1.1");
> + when(dnsResolver.resolve("somehost.example.com")).thenReturn(firstAddress);
> +
> + InetAddress[] secondAddress = translateIp("192.168.12.16");
> + when(dnsResolver.resolve("otherhost.example.com")).thenReturn(secondAddress);
> +
> + DefaultClientConnectionOperator operator = new DefaultClientConnectionOperator(
> + SchemeRegistryFactory.createDefault(), dnsResolver);
> +
> + Assert.assertArrayEquals(firstAddress, operator.resolveHostname("somehost.example.com"));
> + Assert.assertArrayEquals(secondAddress, operator.resolveHostname("otherhost.example.com"));
> + }
> +
> + @Test(expected=UnknownHostException.class)
> + public void testDnsResolverUnknownHost() throws Exception {
> + DnsResolver dnsResolver = mock(DnsResolver.class);
> + when(dnsResolver.resolve("unknown.example.com")).thenThrow(new UnknownHostException());
> +
> + DefaultClientConnectionOperator operator = new DefaultClientConnectionOperator(
> + SchemeRegistryFactory.createDefault(), dnsResolver);
> + operator.resolveHostname("unknown.example.com");
> + }
> +
> + private InetAddress[] translateIp(String ip) throws UnknownHostException {
> + String[] ipParts = ip.split("\\.");
> +
> + byte[] byteIpAddress = new byte[4];
> + for (int i = 0; i < 4; i++) {
> + byteIpAddress[i] = Integer.decode(ipParts[i]).byteValue();
> + }
> + return new InetAddress[] { InetAddress.getByAddress(byteIpAddress) };
> + }
> +
> +}
> \ No newline at end of file
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestDefaultClientConnectOperator.java
> ------------------------------------------------------------------------------
> svn:eol-style = native
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestDefaultClientConnectOperator.java
> ------------------------------------------------------------------------------
> svn:keywords = Date Revision
>
> Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestDefaultClientConnectOperator.java
> ------------------------------------------------------------------------------
> svn:mime-type = text/plain
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
Re: svn commit: r1165635
Posted by Vasile Alin <al...@gmail.com>.
Yes, I'll attach the patch to the original issue.
On 6 September 2011 21:57, Oleg Kalnichevski <ol...@apache.org> wrote:
> On Tue, 2011-09-06 at 20:55 +0300, Vasile Alin wrote:
>> On 6 September 2011 19:02, sebb <se...@gmail.com> wrote:
>>
>> >> /**
>> >> * Creates a new client connection operator for the given scheme registry.
>> >> *
>> >> @@ -100,6 +105,26 @@ public class DefaultClientConnectionOper
>> >> throw new IllegalArgumentException("Scheme registry amy not be null");
>> >> }
>> >> this.schemeRegistry = schemes;
>> >> + this.dnsResolver = null;
>> >
>> > Could replace this with a default resolver that did
>> >
>> > return InetAddress.getAllByName(host);
>> >
>> >> + }
>>
>> Good idea.
>>
>>
>
> +1. Would you have time to do a follow-up patch?
>
> Oleg
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
> For additional commands, e-mail: dev-help@hc.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
Re: svn commit: r1165635
Posted by Oleg Kalnichevski <ol...@apache.org>.
On Tue, 2011-09-06 at 20:55 +0300, Vasile Alin wrote:
> On 6 September 2011 19:02, sebb <se...@gmail.com> wrote:
>
> >> /**
> >> * Creates a new client connection operator for the given scheme registry.
> >> *
> >> @@ -100,6 +105,26 @@ public class DefaultClientConnectionOper
> >> throw new IllegalArgumentException("Scheme registry amy not be null");
> >> }
> >> this.schemeRegistry = schemes;
> >> + this.dnsResolver = null;
> >
> > Could replace this with a default resolver that did
> >
> > return InetAddress.getAllByName(host);
> >
> >> + }
>
> Good idea.
>
>
+1. Would you have time to do a follow-up patch?
Oleg
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org
Re: svn commit: r1165635 - in /httpcomponents/httpclient/trunk: ./
httpclient/src/main/java/org/apache/http/conn/ httpclient/src/main/java/org/apache/http/impl/conn/
httpclient/src/test/java/org/apache/http/impl/conn/
Posted by Vasile Alin <al...@gmail.com>.
On 6 September 2011 19:02, sebb <se...@gmail.com> wrote:
>> /**
>> * Creates a new client connection operator for the given scheme registry.
>> *
>> @@ -100,6 +105,26 @@ public class DefaultClientConnectionOper
>> throw new IllegalArgumentException("Scheme registry amy not be null");
>> }
>> this.schemeRegistry = schemes;
>> + this.dnsResolver = null;
>
> Could replace this with a default resolver that did
>
> return InetAddress.getAllByName(host);
>
>> + }
Good idea.
> public OperatedClientConnection createConnection() {
> @@ -233,6 +258,10 @@ public class DefaultClientConnectionOper
> * Resolves the given host name to an array of corresponding IP addresses, based on the
> * configured name service on the system.
> *
> + * If a custom DNS resolver is provided, the given host will be searched in
> + * it first. If the host is not configured, the default OS DNS-lookup
> + * mechanism is used.
> + *
> * @param host host name to resolve
> * @return array of IP addresses
> * @exception UnknownHostException if no IP address for the host could be determined.
> @@ -240,7 +269,11 @@ public class DefaultClientConnectionOper
> * @since 4.1
> */
> protected InetAddress[] resolveHostname(final String host) throws UnknownHostException {
> - return InetAddress.getAllByName(host);
> + if (dnsResolver != null) {
> + return dnsResolver.resolve(host);
> + } else {
> + return InetAddress.getAllByName(host);
> + }
This javadoc should be corrected, into something like:
/**
* Resolves the given host name to an array of corresponding IP
addresses, based on the
* configured name service on the provided DNS resolver. If one
wasn't provided, the system
* configuration is used.
*
* @param host host name to resolve
* @return array of IP addresses
* @exception UnknownHostException if no IP address for the host
could be determined.
*
* @see {@link DnsResolver}
* @see {@link SystemDefaultDnsResolver}
* @since 4.1
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org