forked from I2P_Developers/i2p.i2p
69 lines
2.3 KiB
Java
69 lines
2.3 KiB
Java
/* 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;
|
|
}
|
|
}
|