/* * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/HttpHost.java $ * $Revision: 653058 $ * $Date: 2008-05-03 05:01:10 -0700 (Sat, 03 May 2008) $ * * ==================================================================== * 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 * . * */ package org.apache.http; import java.util.Locale; import org.apache.http.util.CharArrayBuffer; import org.apache.http.util.LangUtils; /** * Holds all of the variables needed to describe an HTTP connection to a host. * This includes remote host name, port and scheme. * * @author Michael Becke * @author Mike Bowler * @author Oleg Kalnichevski * @author Laura Werner * * @since 4.0 * * @deprecated Please use {@link java.net.URL#openConnection} instead. * Please visit this webpage * for further details. */ @Deprecated public final class HttpHost implements Cloneable { /** The default scheme is "http". */ public static final String DEFAULT_SCHEME_NAME = "http"; /** The host to use. */ protected final String hostname; /** The lowercase host, for {@link #equals} and {@link #hashCode}. */ protected final String lcHostname; /** The port to use. */ protected final int port; /** The scheme */ protected final String schemeName; /** * Creates a new {@link HttpHost HttpHost}, specifying all values. * Constructor for HttpHost. * * @param hostname the hostname (IP or DNS name) * @param port the port number. * -1 indicates the scheme default port. * @param scheme the name of the scheme. * null indicates the * {@link #DEFAULT_SCHEME_NAME default scheme} */ public HttpHost(final String hostname, int port, final String scheme) { super(); if (hostname == null) { throw new IllegalArgumentException("Host name may not be null"); } this.hostname = hostname; this.lcHostname = hostname.toLowerCase(Locale.ENGLISH); if (scheme != null) { this.schemeName = scheme.toLowerCase(Locale.ENGLISH); } else { this.schemeName = DEFAULT_SCHEME_NAME; } this.port = port; } /** * Creates a new {@link HttpHost HttpHost}, with default scheme. * * @param hostname the hostname (IP or DNS name) * @param port the port number. * -1 indicates the scheme default port. */ public HttpHost(final String hostname, int port) { this(hostname, port, null); } /** * Creates a new {@link HttpHost HttpHost}, with default scheme and port. * * @param hostname the hostname (IP or DNS name) */ public HttpHost(final String hostname) { this(hostname, -1, null); } /** * Copy constructor for {@link HttpHost HttpHost}. * * @param httphost the HTTP host to copy details from */ public HttpHost (final HttpHost httphost) { this(httphost.hostname, httphost.port, httphost.schemeName); } /** * Returns the host name. * * @return the host name (IP or DNS name) */ public String getHostName() { return this.hostname; } /** * Returns the port. * * @return the host port, or -1 if not set */ public int getPort() { return this.port; } /** * Returns the scheme name. * * @return the scheme name */ public String getSchemeName() { return this.schemeName; } /** * Return the host URI, as a string. * * @return the host URI */ public String toURI() { CharArrayBuffer buffer = new CharArrayBuffer(32); buffer.append(this.schemeName); buffer.append("://"); buffer.append(this.hostname); if (this.port != -1) { buffer.append(':'); buffer.append(Integer.toString(this.port)); } return buffer.toString(); } /** * Obtains the host string, without scheme prefix. * * @return the host string, for example localhost:8080 */ public String toHostString() { CharArrayBuffer buffer = new CharArrayBuffer(32); buffer.append(this.hostname); if (this.port != -1) { buffer.append(':'); buffer.append(Integer.toString(this.port)); } return buffer.toString(); } public String toString() { return toURI(); } public boolean equals(final Object obj) { if (obj == null) return false; if (this == obj) return true; if (obj instanceof HttpHost) { HttpHost that = (HttpHost) obj; return this.lcHostname.equals(that.lcHostname) && this.port == that.port && this.schemeName.equals(that.schemeName); } else { return false; } } /** * @see java.lang.Object#hashCode() */ public int hashCode() { int hash = LangUtils.HASH_SEED; hash = LangUtils.hashCode(hash, this.lcHostname); hash = LangUtils.hashCode(hash, this.port); hash = LangUtils.hashCode(hash, this.schemeName); return hash; } public Object clone() throws CloneNotSupportedException { return super.clone(); } }