1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.net; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class represents a socket endpoint described by a IP address and a port 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number. It is a concrete implementation of {@code SocketAddress} for IP. 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class InetSocketAddress extends SocketAddress { 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 5076001401234631237L; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes // Exactly one of hostname or addr should be set. 328e1b1ee7fe8ec6168c44a361233cbe225a16fc9dElliott Hughes private final InetAddress addr; 33811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes private final String hostname; 348e1b1ee7fe8ec6168c44a361233cbe225a16fc9dElliott Hughes private final int port; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 3723ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes * @hide internal use only 3823ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes */ 3923ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes public InetSocketAddress() { 4023ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes // These will be filled in the native implementation of recvfrom. 4123ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes this.addr = null; 4223ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes this.hostname = null; 4323ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes this.port = -1; 4423ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes } 4523ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes 4623ec09188303a874b3b391f96ae0a29af002bff9Elliott Hughes /** 47051128862ae7c5c031b8ddb763848ed264a63746Lorenzo Colitti * Creates a socket endpoint with the given port number {@code port} and 48051128862ae7c5c031b8ddb763848ed264a63746Lorenzo Colitti * no specified address. The range for valid port numbers is between 0 and 49051128862ae7c5c031b8ddb763848ed264a63746Lorenzo Colitti * 65535 inclusive. 50f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified port number to which this socket is bound. 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public InetSocketAddress(int port) { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this((InetAddress) null, port); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a socket endpoint with the given port number {@code port} and 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code address}. The range for valid port numbers is between 0 and 65535 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * inclusive. If {@code address} is {@code null} this socket is bound to the 62051128862ae7c5c031b8ddb763848ed264a63746Lorenzo Colitti * IPv4 wildcard address. 63f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified port number to which this socket is bound. 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param address 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified address to which this socket is bound. 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public InetSocketAddress(InetAddress address, int port) { 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (port < 0 || port > 65535) { 71811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes throw new IllegalArgumentException("port=" + port); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes this.addr = (address == null) ? Inet4Address.ANY : address; 74811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes this.hostname = null; 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.port = port; 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a socket endpoint with the given port number {@code port} and the 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * hostname {@code host}. The hostname is tried to be resolved and cannot be 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null}. The range for valid port numbers is between 0 and 65535 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * inclusive. 83f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified port number to which this socket is bound. 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified hostname to which this socket is bound. 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public InetSocketAddress(String host, int port) { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(host, port, true); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 94f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Internal constructor for InetSocketAddress(String, int) and 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * createUnresolved(String, int); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 97c0372d90016d241ac979faa6fa1731f30b6f2a03Jesse Wilson InetSocketAddress(String hostname, int port, boolean needResolved) { 98c0372d90016d241ac979faa6fa1731f30b6f2a03Jesse Wilson if (hostname == null || port < 0 || port > 65535) { 99c0372d90016d241ac979faa6fa1731f30b6f2a03Jesse Wilson throw new IllegalArgumentException("host=" + hostname + ", port=" + port); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101c0372d90016d241ac979faa6fa1731f30b6f2a03Jesse Wilson 1028e1b1ee7fe8ec6168c44a361233cbe225a16fc9dElliott Hughes InetAddress addr = null; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (needResolved) { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1058e1b1ee7fe8ec6168c44a361233cbe225a16fc9dElliott Hughes addr = InetAddress.getByName(hostname); 1068e1b1ee7fe8ec6168c44a361233cbe225a16fc9dElliott Hughes hostname = null; 107c0372d90016d241ac979faa6fa1731f30b6f2a03Jesse Wilson } catch (UnknownHostException ignored) { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1108e1b1ee7fe8ec6168c44a361233cbe225a16fc9dElliott Hughes this.addr = addr; 111811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes this.hostname = hostname; 112811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes this.port = port; 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates an {@code InetSocketAddress} without trying to resolve the 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * hostname into an {@code InetAddress}. The address field is marked as 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unresolved. 119f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified hostname to which this socket is bound. 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified port number to which this socket is bound. 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the created InetSocketAddress instance. 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the hostname {@code host} is {@code null} or the port is 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * not in the range between 0 and 65535. 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static InetSocketAddress createUnresolved(String host, int port) { 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new InetSocketAddress(host, port, false); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the port number of this socket. 135f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the socket endpoint port number. 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final int getPort() { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return port; 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the address of this socket. 144f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the socket endpoint address. 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final InetAddress getAddress() { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return addr; 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1524f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes * Returns the hostname, doing a reverse lookup on the {@code InetAddress} if no 1534f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes * hostname string was provided at construction time. 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String getHostName() { 156811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes return (addr != null) ? addr.getHostName() : hostname; 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1604f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes * Returns the hostname if known, or the result of {@code InetAddress.getHostAddress}. 1614f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes * Unlike {@link #getHostName}, this method will never cause a DNS lookup. 1624f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes * @since 1.7 1634f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes * @hide 1.7 - remember to add a link in the getHostName documentation! 1644f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes */ 1654f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes public final String getHostString() { 1664f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes return (hostname != null) ? hostname : addr.getHostAddress(); 1674f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes } 1684f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes 1694f9ffffd8a2835c30647f9785afb48fa96a0f045Elliott Hughes /** 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns whether this socket address is unresolved or not. 171f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this socket address is unresolved, {@code false} 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final boolean isUnresolved() { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return addr == null; 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 18010914811ea02b4acc7ab1dc5a0ada1b54cdf2203Elliott Hughes * Returns a string containing the address (or the hostname for an 18110914811ea02b4acc7ab1dc5a0ada1b54cdf2203Elliott Hughes * unresolved {@code InetSocketAddress}) and port number. 18210914811ea02b4acc7ab1dc5a0ada1b54cdf2203Elliott Hughes * For example: {@code "www.google.com/74.125.224.115:80"} or {@code "/127.0.0.1:80"}. 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 18410914811ea02b4acc7ab1dc5a0ada1b54cdf2203Elliott Hughes @Override public String toString() { 185811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes return ((addr != null) ? addr.toString() : hostname) + ":" + port; 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares two socket endpoints and returns true if they are equal. Two 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * socket endpoints are equal if the IP address or the hostname of both are 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal and they are bound to the same port. 192f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param socketAddr 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to be tested for equality. 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this socket and the given socket object {@code 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * socketAddr} are equal, {@code false} otherwise. 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final boolean equals(Object socketAddr) { 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this == socketAddr) { 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(socketAddr instanceof InetSocketAddress)) { 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetSocketAddress iSockAddr = (InetSocketAddress) socketAddr; 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // check the ports as we always need to do this 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (port != iSockAddr.port) { 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // we only use the hostnames in the comparison if the addrs were not 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // resolved 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((addr == null) && (iSockAddr.addr == null)) { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hostname.equals(iSockAddr.hostname); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // addrs were resolved so use them for the comparison 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (addr == null) { 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if we are here we know iSockAddr is not null so just return 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // false 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return addr.equals(iSockAddr.addr); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final int hashCode() { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (addr == null) { 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hostname.hashCode() + port; 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return addr.hashCode() + port; 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 236811a5c01400cf923c1827753a73297434d69fa43Elliott Hughes private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.defaultReadObject(); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 240