You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by mb...@apache.org on 2003/05/12 04:42:42 UTC

cvs commit: jakarta-commons/httpclient/src/java/org/apache/commons/httpclient HttpConnection.java SimpleHttpConnectionManager.java HostConfiguration.java HttpClient.java

mbecke      2003/05/11 19:42:42

  Modified:    httpclient/src/java/org/apache/commons/httpclient
                        HttpConnection.java
                        SimpleHttpConnectionManager.java
                        HostConfiguration.java HttpClient.java
  Log:
  Added support for setting HttpConnection local address.
  PR: 19827
  Submitted by: Laura Werner
  
  Revision  Changes    Path
  1.66      +41 -6     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConnection.java
  
  Index: HttpConnection.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConnection.java,v
  retrieving revision 1.65
  retrieving revision 1.66
  diff -u -r1.65 -r1.66
  --- HttpConnection.java	8 May 2003 17:33:51 -0000	1.65
  +++ HttpConnection.java	12 May 2003 02:42:42 -0000	1.66
  @@ -70,6 +70,7 @@
   import java.io.OutputStream;
   import java.io.PushbackInputStream;
   import java.lang.reflect.Method;
  +import java.net.InetAddress;
   import java.net.Socket;
   import java.net.SocketException;
   
  @@ -109,6 +110,7 @@
    * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
    * @author Michael Becke
    * @author Eric E Johnson
  + * @author Laura Werner
    * 
    * @version   $Revision$ $Date$
    */
  @@ -217,6 +219,7 @@
                hostConfiguration.getVirtualHost(),
                hostConfiguration.getPort(),
                hostConfiguration.getProtocol());
  +        this.localAddress = hostConfiguration.getLocalAddress();
       }
   
       /**
  @@ -446,6 +449,27 @@
       }
   
       /**
  +     * Return the local address used when creating the connection.
  +     * If <tt>null</tt>, the default address is used.
  +     * 
  +     * @return InetAddress the local address to be used when creating Sockets
  +     */
  +    public InetAddress getLocalAddress() {
  +        return this.localAddress;
  +    }
  +    
  +    /**
  +     * Set the local address used when creating the connection.
  +     * If unset or <tt>null</tt>, the default address is used.
  +     * 
  +     * @param localAddress the local address to use
  +     */
  +    public void setLocalAddress(InetAddress localAddress) {
  +        assertNotOpen();
  +        this.localAddress = localAddress;
  +    }
  +
  +    /**
        * Return <tt>true</tt> if I am connected,
        * <tt>false</tt> otherwise.
        *
  @@ -636,11 +660,19 @@
                               : protocolInUse.getSocketFactory());
   
                   if (connectTimeout == 0) {
  -                    socket = socketFactory.createSocket(host, port);
  +                    if (localAddress != null) {
  +                        socket = socketFactory.createSocket(host, port, localAddress, 0);
  +                    } else {
  +                        socket = socketFactory.createSocket(host, port);
  +                    }
                   } else {
                       SocketTask task = new SocketTask() {
                           public void doit() throws IOException {
  -                            setSocket(socketFactory.createSocket(host, port));
  +                            if (localAddress != null) {
  +                                setSocket(socketFactory.createSocket(host, port, localAddress, 0));
  +                            } else {
  +                                setSocket(socketFactory.createSocket(host, port));
  +                            }
                           }
                       };
                       TimeoutController.execute(task, connectTimeout);
  @@ -1394,4 +1426,7 @@
       
       /** the connection manager that created this connection or null */
       private HttpConnectionManager httpConnectionManager;
  +    
  +    /** The local interface on which the connection is created, or null for the default */
  +    private InetAddress localAddress;
   }
  
  
  
  1.12      +11 -34    jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/SimpleHttpConnectionManager.java
  
  Index: SimpleHttpConnectionManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/SimpleHttpConnectionManager.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SimpleHttpConnectionManager.java	9 Apr 2003 18:37:59 -0000	1.11
  +++ SimpleHttpConnectionManager.java	12 May 2003 02:42:42 -0000	1.12
  @@ -66,9 +66,6 @@
   import java.io.IOException;
   import java.io.InputStream;
   
  -import org.apache.commons.httpclient.protocol.Protocol;
  -
  -
   /**
    * A connection manager that provides access to a single HttpConnection.  This
    * manager makes no attempt to provide exclusive access to the contained
  @@ -78,7 +75,8 @@
    * @author Eric Johnson
    * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
    * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
  - *
  + * @author Laura Werner
  + * 
    * @since 2.0
    */
   public class SimpleHttpConnectionManager implements HttpConnectionManager {
  @@ -106,30 +104,8 @@
       public HttpConnection getConnection(
           HostConfiguration hostConfiguration, long timeout) {
   
  -        Protocol protocol = hostConfiguration.getProtocol();
  -        String host = hostConfiguration.getHost();
  -        String virtualHost = hostConfiguration.getVirtualHost();
  -        int port = hostConfiguration.getPort();
  -
           if (httpConnection == null) {
  -
  -            if (hostConfiguration.isProxySet()) {
  -                httpConnection = new HttpConnection(
  -                    hostConfiguration.getProxyHost(),
  -                    hostConfiguration.getProxyPort(),
  -                    host,
  -                    virtualHost,
  -                    port,
  -                    protocol
  -                );
  -            } else {
  -                httpConnection = new HttpConnection(
  -                    host, 
  -                    virtualHost, 
  -                    port, 
  -                    protocol);
  -            }
  -
  +            httpConnection = new HttpConnection(hostConfiguration);
           } else {
   
               // make sure the host and proxy are correct for this connection
  @@ -141,10 +117,11 @@
                       httpConnection.close();
                   }
   
  -                httpConnection.setHost(host);
  -                httpConnection.setVirtualHost(virtualHost);
  -                httpConnection.setPort(port);
  -                httpConnection.setProtocol(protocol);
  +                httpConnection.setHost(hostConfiguration.getHost());
  +                httpConnection.setVirtualHost(hostConfiguration.getVirtualHost());
  +                httpConnection.setPort(hostConfiguration.getPort());
  +                httpConnection.setProtocol(hostConfiguration.getProtocol());
  +                httpConnection.setLocalAddress(hostConfiguration.getLocalAddress());
   
                   httpConnection.setProxyHost(hostConfiguration.getProxyHost());
                   httpConnection.setProxyPort(hostConfiguration.getProxyPort());
  
  
  
  1.11      +51 -4     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HostConfiguration.java
  
  Index: HostConfiguration.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HostConfiguration.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- HostConfiguration.java	19 Apr 2003 22:29:31 -0000	1.10
  +++ HostConfiguration.java	12 May 2003 02:42:42 -0000	1.11
  @@ -65,11 +65,15 @@
   
   import org.apache.commons.httpclient.protocol.Protocol;
   
  +import java.net.InetAddress;
  +
   /**
    *
    * @author <a href="mailto:becke@u.washington.edu">Michael Becke</a>
    * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
    * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
  + * @author Laura Werner
  + * 
    * @since 2.0 
    */
   public class HostConfiguration implements Cloneable {
  @@ -98,6 +102,9 @@
       /** True if a proxy server has been set */
       private boolean proxySet;
       
  +    /** The local address to use when creating the socket, or null to use the default */
  +    private InetAddress localAddress;
  +    
       /**
        * Constructor for HostConfiguration.
        */
  @@ -112,7 +119,7 @@
           this.proxyHost = null;
           this.proxyPort = -1;
           this.proxySet = false;
  -        
  +        this.localAddress = null;
       }
       
       /**
  @@ -134,6 +141,7 @@
               this.proxyHost = hostConfiguration.getProxyHost();
               this.proxyPort = hostConfiguration.getProxyPort();
               this.proxySet = hostConfiguration.isProxySet();
  +            this.localAddress = hostConfiguration.getLocalAddress();
           }
           
       }
  @@ -177,6 +185,15 @@
               if (!this.protocol.equals(connection.getProtocol())) {
                   return false;
               }
  +            if (this.localAddress != null) {
  +                if (!this.localAddress.equals(connection.getLocalAddress())) {
  +                    return false;
  +                }
  +            } else {
  +                if (connection.getLocalAddress() != null) {
  +                    return false; 
  +                }
  +            }
               return true;
           } else {
               return false;   
  @@ -389,6 +406,27 @@
       }
   
       /**
  +     * Set the local address to be used when creating connections.
  +     * If this is unset, the default address will be used.
  +     * This is useful for specifying the interface to use on multi-homed or clustered systems.
  +     * 
  +     * @param localAddress the local address to use
  +     */
  +    public synchronized void setLocalAddress(InetAddress localAddress) {
  +        this.localAddress = localAddress;
  +    }
  +
  +    /**
  +     * Return the local address to be used when creating connections.
  +     * If this is unset, the default address should be used.
  +     * 
  +     * @return InetAddress the local address to be used when creating Sockets
  +     */
  +    public synchronized InetAddress getLocalAddress() {
  +        return this.localAddress;
  +    }
  +    
  +    /**
        * @see java.lang.Object#equals(java.lang.Object)
        */
       public synchronized boolean equals(Object o) {
  @@ -433,6 +471,15 @@
               } else if (config.getProxyHost() != null) {
                   return false;
               }            
  +            if (localAddress != null) {
  +                if (!localAddress.equals(config.getLocalAddress())) {
  +                    return false;
  +                }
  +            } else {
  +                if (config.getLocalAddress() != null) {
  +                    return false; 
  +                }
  +            }
   
               // everything matches
               return true;
  
  
  
  1.76      +10 -5     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpClient.java
  
  Index: HttpClient.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpClient.java,v
  retrieving revision 1.75
  retrieving revision 1.76
  diff -u -r1.75 -r1.76
  --- HttpClient.java	8 May 2003 18:39:07 -0000	1.75
  +++ HttpClient.java	12 May 2003 02:42:42 -0000	1.76
  @@ -87,10 +87,10 @@
    * @author <a href="mailto:becke@u.washington.edu">Michael Becke</a>
    * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
    * @author Sam Maloney
  + * @author Laura Werner
    * 
    * @version $Revision$ $Date$
    */
  -
   public class HttpClient {
   
   
  @@ -593,6 +593,11 @@
                       defaultHostConfiguration.getProxyHost(),
                       defaultHostConfiguration.getProxyPort() 
                   );   
  +            }
  +            if (methodConfiguration.getLocalAddress() == null
  +                && defaultHostConfiguration.getLocalAddress() != null) {
  +                    
  +                methodConfiguration.setLocalAddress(defaultHostConfiguration.getLocalAddress());
               }
           }
           
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org