Author: toad
Date: 2006-06-27 21:08:21 +0000 (Tue, 27 Jun 2006)
New Revision: 9392
Added:
trunk/freenet/src/freenet/pluginmanager/DetectedIP.java
trunk/freenet/src/freenet/pluginmanager/FredPluginIPDetector.java
Modified:
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/pluginmanager/FredPluginThreadless.java
trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
partial support for IP detection plugins. May be removed if we decide to
internalize jstun.
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-06-27 11:51:35 UTC (rev
9391)
+++ trunk/freenet/src/freenet/node/Node.java 2006-06-27 21:08:21 UTC (rev
9392)
@@ -96,6 +96,7 @@
import freenet.node.useralerts.N2NTMUserAlert;
import freenet.node.useralerts.UserAlert;
import freenet.node.useralerts.UserAlertManager;
+import freenet.pluginmanager.FredPluginIPDetector;
import freenet.pluginmanager.PluginManager;
import freenet.store.BerkeleyDBFreenetStore;
import freenet.store.FreenetStore;
@@ -3315,4 +3316,10 @@
PeerManager pm = peers;
return pm.myPeers;
}
+
+ public void registerIPDetectorPlugin(FredPluginIPDetector detector) {
+ // FIXME do something
+ // TODO Auto-generated method stub
+
+ }
}
Added: trunk/freenet/src/freenet/pluginmanager/DetectedIP.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/DetectedIP.java 2006-06-27
11:51:35 UTC (rev 9391)
+++ trunk/freenet/src/freenet/pluginmanager/DetectedIP.java 2006-06-27
21:08:21 UTC (rev 9392)
@@ -0,0 +1,44 @@
+package freenet.pluginmanager;
+
+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;
+ // Constants
+ /** The plugin does not support detecting the NAT type. */
+ public static final short NOT_SUPPORTED = 0;
+ /** No UDP connectivity at all */
+ public static final short NO_UDP = 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;
+
+ public DetectedIP(InetAddress addr, short type) {
+ this.publicAddress = addr;
+ this.natType = type;
+ }
+
+}
Added: trunk/freenet/src/freenet/pluginmanager/FredPluginIPDetector.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/FredPluginIPDetector.java
2006-06-27 11:51:35 UTC (rev 9391)
+++ trunk/freenet/src/freenet/pluginmanager/FredPluginIPDetector.java
2006-06-27 21:08:21 UTC (rev 9392)
@@ -0,0 +1,9 @@
+package freenet.pluginmanager;
+
+import java.net.InetAddress;
+
+public interface FredPluginIPDetector {
+
+ public DetectedIP[] getAddress();
+
+}
Modified: trunk/freenet/src/freenet/pluginmanager/FredPluginThreadless.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/FredPluginThreadless.java
2006-06-27 11:51:35 UTC (rev 9391)
+++ trunk/freenet/src/freenet/pluginmanager/FredPluginThreadless.java
2006-06-27 21:08:21 UTC (rev 9392)
@@ -4,9 +4,4 @@
public interface FredPluginThreadless {
- // Let them return null if unhandled
-
- public String handleHTTPGet(HTTPRequest request) throws
PluginHTTPException;
- public String handleHTTPPut(HTTPRequest request) throws
PluginHTTPException;
- public String handleHTTPPost(HTTPRequest request) throws
PluginHTTPException;
}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
2006-06-27 11:51:35 UTC (rev 9391)
+++ trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
2006-06-27 21:08:21 UTC (rev 9392)
@@ -14,6 +14,7 @@
private FredPlugin plug;
private boolean isPproxyPlugin;
private boolean isThreadlessPlugin;
+ private boolean isIPDetectorPlugin;
private String filename;
private HashSet toadletLinks=new HashSet();
//public String
@@ -30,6 +31,7 @@
fedPluginThread = true;
isPproxyPlugin = (plug instanceof FredPluginHTTP);
isThreadlessPlugin = (plug instanceof FredPluginThreadless);
+ isIPDetectorPlugin = (plug instanceof FredPluginIPDetector);
}
public String toString() {
@@ -91,6 +93,10 @@
return isThreadlessPlugin;
}
+ public boolean isIPDetectorPlugin() {
+ return isIPDetectorPlugin;
+ }
+
public Thread getThread() {
return thread;
}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2006-06-27
11:51:35 UTC (rev 9391)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2006-06-27
21:08:21 UTC (rev 9392)
@@ -109,6 +109,10 @@
if (pi.isPproxyPlugin())
registerToadlet(plug);
+
+ if(pi.isIPDetectorPlugin()) {
+
node.registerIPDetectorPlugin((FredPluginIPDetector) plug);
+ }
synchronized (pluginInfo) {
pluginInfo.put(pi.getThreadName(), pi);