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) 
{


Reply via email to