Home | History | Annotate | Download | only in http
      1 /*
      2  * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/HttpHost.java $
      3  * $Revision: 653058 $
      4  * $Date: 2008-05-03 05:01:10 -0700 (Sat, 03 May 2008) $
      5  *
      6  * ====================================================================
      7  * Licensed to the Apache Software Foundation (ASF) under one
      8  * or more contributor license agreements.  See the NOTICE file
      9  * distributed with this work for additional information
     10  * regarding copyright ownership.  The ASF licenses this file
     11  * to you under the Apache License, Version 2.0 (the
     12  * "License"); you may not use this file except in compliance
     13  * with the License.  You may obtain a copy of the License at
     14  *
     15  *   http://www.apache.org/licenses/LICENSE-2.0
     16  *
     17  * Unless required by applicable law or agreed to in writing,
     18  * software distributed under the License is distributed on an
     19  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     20  * KIND, either express or implied.  See the License for the
     21  * specific language governing permissions and limitations
     22  * under the License.
     23  * ====================================================================
     24  *
     25  * This software consists of voluntary contributions made by many
     26  * individuals on behalf of the Apache Software Foundation.  For more
     27  * information on the Apache Software Foundation, please see
     28  * <http://www.apache.org/>.
     29  *
     30  */
     31 
     32 package org.apache.http;
     33 
     34 import java.util.Locale;
     35 
     36 import org.apache.http.util.CharArrayBuffer;
     37 import org.apache.http.util.LangUtils;
     38 
     39 /**
     40  * Holds all of the variables needed to describe an HTTP connection to a host.
     41  * This includes remote host name, port and scheme.
     42  *
     43  * @author <a href="mailto:becke (at) u.washington.edu">Michael Becke</a>
     44  * @author <a href="mailto:mbowler (at) GargoyleSoftware.com">Mike Bowler</a>
     45  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
     46  * @author Laura Werner
     47  *
     48  * @since 4.0
     49  *
     50  * @deprecated Please use {@link java.net.URL#openConnection} instead.
     51  *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
     52  *     for further details.
     53  */
     54 @Deprecated
     55 public final class HttpHost implements Cloneable {
     56 
     57     /** The default scheme is "http". */
     58     public static final String DEFAULT_SCHEME_NAME = "http";
     59 
     60     /** The host to use. */
     61     protected final String hostname;
     62 
     63     /** The lowercase host, for {@link #equals} and {@link #hashCode}. */
     64     protected final String lcHostname;
     65 
     66 
     67     /** The port to use. */
     68     protected final int port;
     69 
     70     /** The scheme */
     71     protected final String schemeName;
     72 
     73 
     74     /**
     75      * Creates a new {@link HttpHost HttpHost}, specifying all values.
     76      * Constructor for HttpHost.
     77      *
     78      * @param hostname  the hostname (IP or DNS name)
     79      * @param port      the port number.
     80      *                  <code>-1</code> indicates the scheme default port.
     81      * @param scheme    the name of the scheme.
     82      *                  <code>null</code> indicates the
     83      *                  {@link #DEFAULT_SCHEME_NAME default scheme}
     84      */
     85     public HttpHost(final String hostname, int port, final String scheme) {
     86         super();
     87         if (hostname == null) {
     88             throw new IllegalArgumentException("Host name may not be null");
     89         }
     90         this.hostname   = hostname;
     91         this.lcHostname = hostname.toLowerCase(Locale.ENGLISH);
     92         if (scheme != null) {
     93             this.schemeName = scheme.toLowerCase(Locale.ENGLISH);
     94         } else {
     95             this.schemeName = DEFAULT_SCHEME_NAME;
     96         }
     97         this.port = port;
     98     }
     99 
    100     /**
    101      * Creates a new {@link HttpHost HttpHost}, with default scheme.
    102      *
    103      * @param hostname  the hostname (IP or DNS name)
    104      * @param port      the port number.
    105      *                  <code>-1</code> indicates the scheme default port.
    106      */
    107     public HttpHost(final String hostname, int port) {
    108         this(hostname, port, null);
    109     }
    110 
    111     /**
    112      * Creates a new {@link HttpHost HttpHost}, with default scheme and port.
    113      *
    114      * @param hostname  the hostname (IP or DNS name)
    115      */
    116     public HttpHost(final String hostname) {
    117         this(hostname, -1, null);
    118     }
    119 
    120     /**
    121      * Copy constructor for {@link HttpHost HttpHost}.
    122      *
    123      * @param httphost the HTTP host to copy details from
    124      */
    125     public HttpHost (final HttpHost httphost) {
    126         this(httphost.hostname, httphost.port, httphost.schemeName);
    127     }
    128 
    129     /**
    130      * Returns the host name.
    131      *
    132      * @return the host name (IP or DNS name)
    133      */
    134     public String getHostName() {
    135         return this.hostname;
    136     }
    137 
    138     /**
    139      * Returns the port.
    140      *
    141      * @return the host port, or <code>-1</code> if not set
    142      */
    143     public int getPort() {
    144         return this.port;
    145     }
    146 
    147     /**
    148      * Returns the scheme name.
    149      *
    150      * @return the scheme name
    151      */
    152     public String getSchemeName() {
    153         return this.schemeName;
    154     }
    155 
    156     /**
    157      * Return the host URI, as a string.
    158      *
    159      * @return the host URI
    160      */
    161     public String toURI() {
    162         CharArrayBuffer buffer = new CharArrayBuffer(32);
    163         buffer.append(this.schemeName);
    164         buffer.append("://");
    165         buffer.append(this.hostname);
    166         if (this.port != -1) {
    167             buffer.append(':');
    168             buffer.append(Integer.toString(this.port));
    169         }
    170         return buffer.toString();
    171     }
    172 
    173 
    174     /**
    175      * Obtains the host string, without scheme prefix.
    176      *
    177      * @return  the host string, for example <code>localhost:8080</code>
    178      */
    179     public String toHostString() {
    180         CharArrayBuffer buffer = new CharArrayBuffer(32);
    181         buffer.append(this.hostname);
    182         if (this.port != -1) {
    183             buffer.append(':');
    184             buffer.append(Integer.toString(this.port));
    185         }
    186         return buffer.toString();
    187     }
    188 
    189 
    190     public String toString() {
    191         return toURI();
    192     }
    193 
    194 
    195     public boolean equals(final Object obj) {
    196         if (obj == null) return false;
    197         if (this == obj) return true;
    198         if (obj instanceof HttpHost) {
    199             HttpHost that = (HttpHost) obj;
    200             return this.lcHostname.equals(that.lcHostname)
    201                 && this.port == that.port
    202                 && this.schemeName.equals(that.schemeName);
    203         } else {
    204             return false;
    205         }
    206     }
    207 
    208     /**
    209      * @see java.lang.Object#hashCode()
    210      */
    211     public int hashCode() {
    212         int hash = LangUtils.HASH_SEED;
    213         hash = LangUtils.hashCode(hash, this.lcHostname);
    214         hash = LangUtils.hashCode(hash, this.port);
    215         hash = LangUtils.hashCode(hash, this.schemeName);
    216         return hash;
    217     }
    218 
    219     public Object clone() throws CloneNotSupportedException {
    220         return super.clone();
    221     }
    222 
    223 }
    224