org.freenetproject.DetectedIP Maven / Gradle / Ivy
/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package org.freenetproject;
import java.net.InetAddress;
/**
* Class returned by a FredPluginIPDetector.
*
* Indicates:
* - Whether there is no UDP connectivity at all.
* - Whether there is full inbound IP connectivity.
* - A list of detected public IPs.
*/
public class DetectedIP {
public final InetAddress publicAddress;
public final short natType;
/** The MTU as advertized by the JVM */
public int mtu;
// Constants
/** The plugin does not support detecting the NAT type. */
public static final short NOT_SUPPORTED = 1;
/** Full internet access! */
public static final short FULL_INTERNET = 2;
/** Full cone NAT. Once we have sent a packet out on a port, any node anywhere can send us
* a packet on that port. The nicest option, but very rare unfortunately. */
public static final short FULL_CONE_NAT = 3;
/** Restricted cone NAT. Once we have sent a packet out to a specific IP, it can send us
* packets on the port we just used. */
public static final short RESTRICTED_CONE_NAT = 4;
/** Port restricted cone NAT. Once we have sent a packet to a specific IP+Port, that IP+Port
* can send us packets on the port we just used. */
public static final short PORT_RESTRICTED_NAT = 5;
/** Symmetric NAT. Uses a separate port number for each IP+port ! Not much hope for symmetric
* to symmetric... */
public static final short SYMMETRIC_NAT = 6;
/** Symmetric UDP firewall. We are not NATed, but the firewall behaves as if we were. */
public static final short SYMMETRIC_UDP_FIREWALL = 7;
/** No UDP connectivity at all */
public static final short NO_UDP = 8;
public DetectedIP(InetAddress addr, short type) {
this.publicAddress = addr;
this.natType = type;
this.mtu = 1500;
}
@Override
public boolean equals(Object o) {
if(!(o instanceof DetectedIP)) {
return false;
}
DetectedIP d = (DetectedIP)o;
return ((d.natType == natType) && d.publicAddress.equals(publicAddress));
}
@Override
public int hashCode() {
return publicAddress.hashCode() ^ natType;
}
@Override
public String toString() {
return publicAddress.toString()+":"+natType+":"+mtu;
}
}