/**************************************************************************
* Copyright (c) 2006, 2007 by Chris Gray, /k/ Embedded Java Solutions. *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without *
* modification, are permitted provided that the following conditions *
* are met: *
* 1. Redistributions of source code must retain the above copyright *
* notice, this list of conditions and the following disclaimer. *
* 2. Redistributions in binary form must reproduce the above copyright *
* notice, this list of conditions and the following disclaimer in the *
* documentation and/or other materials provided with the distribution. *
* 3. Neither the name of /k/ Embedded Java Solutions nor the names of *
* other contributors may be used to endorse or promote products *
* derived from this software without specific prior written permission.*
* *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED *
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. *
* IN NO EVENT SHALL /K/ EMBEDDED JAVA SOLUTIONS OR OTHER CONTRIBUTORS BE *
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF *
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, *
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE *
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN *
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
**************************************************************************/
package java.net;
/**
* InetSocketAddress: new since 1.4
*
* @author ruelens,cgray
* @since 1.4
*
* created: Mar 28, 2006
*/
public class InetSocketAddress extends SocketAddress {
private static final long serialVersionUID = 5076001401234631237L;
int port;
InetAddress addr;
String hostname;
public InetSocketAddress(int port) throws IllegalArgumentException {
this(InetAddress.allZeroAddress, port);
}
public InetSocketAddress(InetAddress address, int port) throws IllegalArgumentException {
this.port = checkPort(port);
this.hostname = address.getHostName();
if (this.hostname != null) {
try {
this.addr = InetAddress.getByName(hostname);
} catch (Exception e) {
}
}
else if (address == null) {
try {
this.addr = InetAddress.getByAddress(null, new byte[4]);
}
catch (UnknownHostException uhe) {
}
}
else {
this.addr = address;
}
}
public InetSocketAddress(String hostname, int port) throws IllegalArgumentException {
this.port = checkPort(port);
this.hostname = hostname;
try {
this.addr = InetAddress.getByName(hostname);
}
catch (NullPointerException npe) {
throw new IllegalArgumentException();
}
catch (Exception e) {
}
}
public final InetAddress getAddress() {
return addr;
}
public final String getHostName() {
return hostname;
}
public final int getPort() {
return port;
}
public final boolean isUnresolved() {
return addr == null;
}
public final int hashCode() {
return port ^ hostname.hashCode();
}
public final boolean equals(Object obj) {
if (obj instanceof InetSocketAddress) {
InetSocketAddress sock = (InetSocketAddress)obj;
return port == sock.port &&
(addr != null && sock.addr != null
? addr.equals(sock.addr)
: hostname.equals(sock.hostname));
}
return false;
}
public String toString() {
return (addr == null ? hostname : addr.toString()) +":"+port;
}
private int checkPort(int port) {
if (port >= 0 && port < 0x10000) {
return port;
}
throw new IllegalArgumentException();
}
private InetAddress checkAddress(InetAddress addr) {
return addr;
}
}