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 32package org.apache.http; 33 34import java.util.Locale; 35 36import org.apache.http.util.CharArrayBuffer; 37import 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@u.washington.edu">Michael Becke</a> 44 * @author <a href="mailto:mbowler@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 55public 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