package com.limegroup.gnutella.util;
import java.net.InetAddress;
import java.net.UnknownHostException;
import com.limegroup.gnutella.ErrorService;
import com.limegroup.gnutella.RouterService;
/**
* An IpPort for my local machine. Always returns current port & address.
*
* Its OK to put this in HashSets
* Its NOT ok to put it in IpPortSets
* Its NOT ok to put DirectLocs using this in AlternateLocationCollections
* Its NOT ok to use this in objects whose hashCode or equals will depend on
* the values returned by any of the getters.
*/
public class IpPortForSelf implements IpPort {
private static final IpPort INSTANCE = new IpPortForSelf();
private static final InetAddress localhost;
static {
byte [] b = new byte[] {(byte)127,(byte)0,(byte)0,(byte)1};
InetAddress addr = null;
try {
addr = InetAddress.getByAddress(b);
} catch (UnknownHostException impossible) {
ErrorService.error(impossible);
}
localhost = addr;
}
public static IpPort instance() { return INSTANCE;}
private IpPortForSelf() {}
public String getAddress() {
return getInetAddress().getHostName();
}
public InetAddress getInetAddress() {
try {
return InetAddress.getByAddress(RouterService.getAddress());
} catch (UnknownHostException bad) {
return localhost;
}
}
public int getPort() {
return RouterService.getPort();
}
public String toString() {
return getAddress() +":"+getPort();
}
}