Author: toad
Date: 2008-09-03 17:49:23 +0000 (Wed, 03 Sep 2008)
New Revision: 22375
Modified:
trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/SecurityLevels.java
Log:
Enable opennet when switching to NORMAL/LOW, disable it when switching to
MAXIMUM/HIGH.
The user can still turn opennet on or off manually, but we'll clobber that
setting if the seclevel is changed; it isn't really a supported behaviour,
since it undermines what the seclevels are about, but for now it's probably
best not to block it.
Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-09-03
17:15:50 UTC (rev 22374)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-09-03
17:49:23 UTC (rev 22375)
@@ -650,6 +650,8 @@
Node.dropPacketEveryLong=Frequency of dropping packets. Testing option used by
devs to simulate packet loss. 0 means never artificially drop a packet. Don't
touch this!
Node.enableARKs=Enable ARKs? (DON'T TURN THIS OFF!)
Node.enableARKsLong=Enable ARKs? (DON'T TURN THIS OFF!).
+Node.enableOpennetFailedTitle=Enabling opennet failed
+Node.enableOpennetFailed=The node failed to enable opennet, and cannot connect
to strangers. You will need to fix this, report a bug, or stick with connecting
only to Friends. Details: ${message}
Node.enablePacketCoalescing=Enable packet coalescing?
Node.enablePacketCoalescingLong=Enable packet coalescing? Packet coalescing
increases bandwidth efficiency, reduces CPU usage and gains some resistance to
traffic analysis at a small cost in message latency. Don't turn this off unless
you know what you're doing.
Node.enablePerNodeFailureTables=Enable per-node failure tables?
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-09-03 17:15:50 UTC (rev
22374)
+++ trunk/freenet/src/freenet/node/Node.java 2008-09-03 17:49:23 UTC (rev
22375)
@@ -75,6 +75,7 @@
import freenet.keys.SSKVerifyException;
import freenet.l10n.L10n;
import freenet.node.NodeDispatcher.NodeDispatcherCallback;
+import freenet.node.SecurityLevels.NETWORK_THREAT_LEVEL;
import freenet.node.updater.NodeUpdateManager;
import freenet.node.useralerts.AbstractUserAlert;
import freenet.node.useralerts.BuildOldAgeUserAlert;
@@ -86,6 +87,7 @@
import freenet.node.useralerts.SimpleUserAlert;
import freenet.node.useralerts.TimeSkewDetectedUserAlert;
import freenet.node.useralerts.UserAlert;
+import freenet.node.useralerts.UserAlertManager;
import freenet.pluginmanager.ForwardPort;
import freenet.pluginmanager.PluginManager;
import freenet.store.BerkeleyDBFreenetStore;
@@ -1246,6 +1248,45 @@
opennet = null;
}
+ securityLevels.addNetworkThreatLevelListener(new
SecurityLevelListener<NETWORK_THREAT_LEVEL>() {
+
+ public void onChange(NETWORK_THREAT_LEVEL oldLevel,
NETWORK_THREAT_LEVEL newLevel) {
+ if(newLevel == NETWORK_THREAT_LEVEL.HIGH
+ || newLevel ==
NETWORK_THREAT_LEVEL.MAXIMUM) {
+ OpennetManager om;
+ synchronized(Node.this) {
+ om = opennet;
+ if(om != null)
+ opennet = null;
+ }
+ if(om != null) {
+ om.stop(true);
+
ipDetector.ipDetectorManager.notifyPortChange(getPublicInterfacePorts());
+ }
+ } else if(newLevel ==
NETWORK_THREAT_LEVEL.NORMAL
+ || newLevel ==
NETWORK_THREAT_LEVEL.LOW) {
+ OpennetManager o = null;
+ synchronized(Node.this) {
+ if(opennet == null) {
+ try {
+ o = opennet =
new OpennetManager(Node.this, opennetCryptoConfig, System.currentTimeMillis(),
isAllowedToConnectToSeednodes);
+ } catch
(NodeInitException e) {
+ opennet = null;
+
Logger.error(this, "UNABLE TO ENABLE OPENNET: "+e, e);
+
clientCore.alerts.register(new SimpleUserAlert(false,
l10n("enableOpennetFailedTitle"), l10n("enableOpennetFailed", "message",
e.getLocalizedMessage()), l10n("enableOpennetFailed", "message",
e.getLocalizedMessage()), UserAlert.ERROR));
+ }
+ }
+ }
+ if(o != null) {
+ o.start();
+
ipDetector.ipDetectorManager.notifyPortChange(getPublicInterfacePorts());
+ }
+ }
+ Node.this.config.store();
+ }
+
+ });
+
opennetConfig.register("acceptSeedConnections", true, 2, true,
true, "Node.acceptSeedConnectionsShort", "Node.acceptSeedConnections", new
BooleanCallback() {
public Boolean get() {
Modified: trunk/freenet/src/freenet/node/SecurityLevels.java
===================================================================
--- trunk/freenet/src/freenet/node/SecurityLevels.java 2008-09-03 17:15:50 UTC
(rev 22374)
+++ trunk/freenet/src/freenet/node/SecurityLevels.java 2008-09-03 17:49:23 UTC
(rev 22375)
@@ -182,8 +182,12 @@
private abstract class MyCallback<T> extends StringCallback implements
EnumerableOptionCallback {
- private ArrayList<SecurityLevelListener<T>> listeners;
+ private final ArrayList<SecurityLevelListener<T>> listeners;
+ MyCallback() {
+ listeners = new ArrayList<SecurityLevelListener<T>>();
+ }
+
public void addListener(SecurityLevelListener<T> listener) {
if(listeners.contains(listener)) {
Logger.error(this, "Already have listener
"+listener+" in "+this);
@@ -201,6 +205,10 @@
T oldLevel = getValue();
setValue(val);
T newLevel = getValue();
+ onSet(oldLevel, newLevel);
+ }
+
+ void onSet(T oldLevel, T newLevel) {
for(SecurityLevelListener<T> listener : listeners) {
listener.onChange(oldLevel, newLevel);
}
@@ -325,23 +333,32 @@
public void setThreatLevel(NETWORK_THREAT_LEVEL newThreatLevel) {
if(newThreatLevel == null) throw new NullPointerException();
+ NETWORK_THREAT_LEVEL oldLevel;
synchronized(this) {
+ oldLevel = networkThreatLevel;
networkThreatLevel = newThreatLevel;
}
+ networkThreatLevelCallback.onSet(oldLevel, newThreatLevel);
}
public void setThreatLevel(FRIENDS_THREAT_LEVEL newThreatLevel) {
if(newThreatLevel == null) throw new NullPointerException();
+ FRIENDS_THREAT_LEVEL oldLevel;
synchronized(this) {
+ oldLevel = friendsThreatLevel;
friendsThreatLevel = newThreatLevel;
}
+ friendsThreatLevelCallback.onSet(oldLevel, newThreatLevel);
}
public void setThreatLevel(PHYSICAL_THREAT_LEVEL newThreatLevel) {
if(newThreatLevel == null) throw new NullPointerException();
+ PHYSICAL_THREAT_LEVEL oldLevel;
synchronized(this) {
+ oldLevel = physicalThreatLevel;
physicalThreatLevel = newThreatLevel;
}
+ physicalThreatLevelCallback.onSet(oldLevel, newThreatLevel);
}
public static String localisedName(NETWORK_THREAT_LEVEL newThreatLevel)
{