Author: toad
Date: 2008-04-12 12:09:28 +0000 (Sat, 12 Apr 2008)
New Revision: 19220
Modified:
trunk/freenet/src/freenet/node/IPDetectorPluginManager.java
trunk/freenet/src/freenet/node/NodeCrypto.java
Log:
Make the NAT warning dismissable unless there are ports which are more likely
NATed than not.
Modified: trunk/freenet/src/freenet/node/IPDetectorPluginManager.java
===================================================================
--- trunk/freenet/src/freenet/node/IPDetectorPluginManager.java 2008-04-12
11:56:51 UTC (rev 19219)
+++ trunk/freenet/src/freenet/node/IPDetectorPluginManager.java 2008-04-12
12:09:28 UTC (rev 19220)
@@ -8,6 +8,7 @@
import java.util.Set;
import java.util.Vector;
+import freenet.io.AddressTracker;
import freenet.io.comm.FreenetInetAddress;
import freenet.io.comm.Peer;
import freenet.l10n.L10n;
@@ -63,10 +64,10 @@
StringBuffer sb = new StringBuffer();
sb.append(super.getText());
if(portsNotForwarded.length == 1) {
- sb.append(l10n("suggestForwardPort", "port",
Integer.toString(portsNotForwarded[0])));
+ sb.append(l10n("suggestForwardPort", "port",
Integer.toString(Math.abs(portsNotForwarded[0]))));
} else if(portsNotForwarded.length >= 2) {
sb.append(l10n("suggestForwardTwoPorts", new
String[] { "port1", "port2" },
- new String[] {
Integer.toString(portsNotForwarded[0]), Integer.toString(portsNotForwarded[1])
}));
+ new String[] {
Integer.toString(Math.abs(portsNotForwarded[0])),
Integer.toString(Math.abs(portsNotForwarded[1])) }));
if(portsNotForwarded.length > 2)
Logger.error(this, "Not able to tell
user about more than 2 ports to forward! ("+portsNotForwarded.length+")");
}
@@ -88,7 +89,15 @@
}
public boolean userCanDismiss() {
- return !suggestPortForward;
+ // If no ports need forwarding, make it dismissable
immediately.
+ if(!suggestPortForward) return true;
+ // Prevent NPE.
+ if(portsNotForwarded == null) return false;
+ // If any port definitely does need forwarding, make it
non-dismissable.
+ for(int i=0;i<portsNotForwarded.length;i++)
+ if(portsNotForwarded[i] < 0) return false; //
Port definitely needs to be forwarded
+ // Otherwise it is dismissable.
+ return true;
}
}
@@ -125,17 +134,20 @@
public int[] getUDPPortsNotForwarded() {
OpennetManager om = node.getOpennet();
- if(om == null || om.crypto.definitelyPortForwarded()) {
- if(node.darknetCrypto.definitelyPortForwarded()) {
+ int darknetStatus =
node.darknetCrypto.getDetectedConnectivityStatus();
+ int opennetStatus = om == null ? AddressTracker.DONT_KNOW :
om.crypto.getDetectedConnectivityStatus();
+ if(om == null || opennetStatus ==
AddressTracker.DEFINITELY_PORT_FORWARDED) {
+ if(darknetStatus ==
AddressTracker.DEFINITELY_PORT_FORWARDED) {
return new int[] { };
} else {
- return new int[] { node.getDarknetPortNumber()
};
+ return new int[] { (darknetStatus <
AddressTracker.DONT_KNOW ? -1 : 1) * node.getDarknetPortNumber() };
}
} else {
- if(node.darknetCrypto.definitelyPortForwarded()) {
- return new int[] { om.crypto.portNumber };
+ if(darknetStatus ==
AddressTracker.DEFINITELY_PORT_FORWARDED) {
+ return new int[] { (opennetStatus <
AddressTracker.DONT_KNOW ? -1 : 1 ) * om.crypto.portNumber };
} else {
- return new int[] { node.getDarknetPortNumber(),
om.crypto.portNumber };
+ return new int[] { (darknetStatus <
AddressTracker.DONT_KNOW ? -1 : 1 ) * node.getDarknetPortNumber(),
+ (opennetStatus <
AddressTracker.DONT_KNOW ? -1 : 1 ) * om.crypto.portNumber };
}
}
}
Modified: trunk/freenet/src/freenet/node/NodeCrypto.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeCrypto.java 2008-04-12 11:56:51 UTC
(rev 19219)
+++ trunk/freenet/src/freenet/node/NodeCrypto.java 2008-04-12 12:09:28 UTC
(rev 19220)
@@ -504,6 +504,10 @@
public boolean definitelyPortForwarded() {
return socket.getDetectedConnectivityStatus() ==
AddressTracker.DEFINITELY_PORT_FORWARDED;
}
+
+ public int getDetectedConnectivityStatus() {
+ return socket.getDetectedConnectivityStatus();
+ }
public FreenetInetAddress getBindTo() {
return config.getBindTo();