Author: nextgens
Date: 2006-06-17 14:26:52 +0000 (Sat, 17 Jun 2006)
New Revision: 9262

Modified:
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/node/updater/AutoUpdateAllowedCallback.java
   trunk/freenet/src/freenet/node/updater/NodeUpdater.java
   trunk/freenet/src/freenet/node/updater/UpdaterEnabledCallback.java
Log:
823: We allow the auto-updater to be enabled on the fly

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-06-17 12:31:13 UTC (rev 
9261)
+++ trunk/freenet/src/freenet/node/Version.java 2006-06-17 14:26:52 UTC (rev 
9262)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 822;
+       private static final int buildNumber = 823;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 765;

Modified: trunk/freenet/src/freenet/node/updater/AutoUpdateAllowedCallback.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/AutoUpdateAllowedCallback.java       
2006-06-17 12:31:13 UTC (rev 9261)
+++ trunk/freenet/src/freenet/node/updater/AutoUpdateAllowedCallback.java       
2006-06-17 14:26:52 UTC (rev 9262)
@@ -3,6 +3,7 @@
 import freenet.config.BooleanCallback;
 import freenet.config.InvalidConfigValueException;
 import freenet.node.Node;
+import freenet.support.Logger;

 public class AutoUpdateAllowedCallback implements BooleanCallback {

@@ -13,13 +14,15 @@
        }

        public boolean get() {
-               NodeUpdater nu = node.getNodeUpdater();
-               return nu.isAutoUpdateAllowed;
+               if(node.getNodeUpdater()==null)
+                       return false;
+               else 
+                       return node.getNodeUpdater().isAutoUpdateAllowed;
        }

        public void set(boolean val) throws InvalidConfigValueException {
                if(val == get()) return;
-               // Good idea to prevent it ?
-               throw new InvalidConfigValueException("Cannot be updated on the 
fly for security reasons");
+               node.getNodeUpdater().setAutoupdateAllowed(val);
+               Logger.normal(this, "Node auto update is now allowed = "+val);
        }
 }
\ No newline at end of file

Modified: trunk/freenet/src/freenet/node/updater/NodeUpdater.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/NodeUpdater.java     2006-06-17 
12:31:13 UTC (rev 9261)
+++ trunk/freenet/src/freenet/node/updater/NodeUpdater.java     2006-06-17 
14:26:52 UTC (rev 9262)
@@ -54,7 +54,7 @@
        private boolean isRunning = false;
        private boolean isFetching = false;

-       public final boolean isAutoUpdateAllowed;
+       public boolean isAutoUpdateAllowed;

        private final UpdatedVersionAvailableUserAlert alert;
        private RevocationKeyFoundUserAlert revocationAlert;
@@ -113,6 +113,7 @@
        }

        public synchronized void onFoundEdition(long l, USK key){
+               if(!isRunning) return;
                int found = (int)key.suggestedEdition;

                if(found > availableVersion){
@@ -122,7 +123,6 @@
                                        maybeUpdate();
                                }
                        }, 60*1000); // leave some time in case we get later 
editions
-                       this.isRunning=true;
                }
        }

@@ -135,8 +135,6 @@
                                isRunning=false;
                                return;
                        }
-                       
-                       isRunning=false;
                }

                alert.set(availableVersion,false);
@@ -162,6 +160,7 @@
        private Object updateSync = new Object();

        public void Update() {
+               if(!isRunning) return;
                synchronized(updateSync) {
                        innerUpdate();
                }
@@ -466,6 +465,10 @@
                return isRunning;
        }

+       protected synchronized void kill(){
+               isRunning = false;
+       }
+       
        public synchronized void blow(String msg){
                if(hasBeenBlown){
                        Logger.error(this, "The key has ALREADY been marked as 
blown!");
@@ -490,12 +493,16 @@
                return revocationURI;
        }

+       protected synchronized void  setAutoupdateAllowed(boolean b) {
+               this.isAutoUpdateAllowed = b;
+       }
+       
        public static NodeUpdater maybeCreate(Node node, Config config) throws 
Exception {
         SubConfig updaterConfig = new SubConfig("node.updater", config);

         updaterConfig.register("enabled", true, 1, false, "Enable Node's 
updater?",
                        "Whether to enable the node's updater. It won't 
auto-update unless node.updater.autoupdate is true, it will just warn",
-                       new UpdaterEnabledCallback(node));
+                       new UpdaterEnabledCallback(node, config));

         boolean enabled = updaterConfig.getBoolean("enabled");


Modified: trunk/freenet/src/freenet/node/updater/UpdaterEnabledCallback.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/UpdaterEnabledCallback.java  
2006-06-17 12:31:13 UTC (rev 9261)
+++ trunk/freenet/src/freenet/node/updater/UpdaterEnabledCallback.java  
2006-06-17 14:26:52 UTC (rev 9262)
@@ -1,24 +1,44 @@
 package freenet.node.updater;

 import freenet.config.BooleanCallback;
+import freenet.config.Config;
 import freenet.config.InvalidConfigValueException;
+import freenet.config.SubConfig;
+import freenet.keys.FreenetURI;
 import freenet.node.Node;
+import freenet.support.Logger;

 public class UpdaterEnabledCallback implements BooleanCallback {

        final Node node;
+       final Config nodeConfig;

-       UpdaterEnabledCallback(Node n) {
+       UpdaterEnabledCallback(Node n, Config nc) {
                this.node = n;
+               this.nodeConfig = nc;
        }

        public boolean get() {
-               return node.getNodeUpdater() != null;
+               if(node.nodeUpdater==null)
+                       return false;
+               else 
+                       return node.nodeUpdater.isRunning();
        }

        public void set(boolean val) throws InvalidConfigValueException {
                if(val == get()) return;
-               // FIXME implement
-               throw new InvalidConfigValueException("Cannot be updated on the 
fly");
+               if(val){
+                       try{
+                               SubConfig sc = nodeConfig.get("node.updater");
+                               node.nodeUpdater = new NodeUpdater(node , 
sc.getBoolean("autoupdate"), new FreenetURI(sc.getString("URI")), new 
FreenetURI(sc.getString("revocationURI")));
+                               Logger.normal(this, "Starting up the node 
updater");
+                       }catch (Exception e){
+                               Logger.error(this, "unable to start the node 
updater up "+e);
+                               throw new InvalidConfigValueException("Unable 
to enable the Node Updater "+e);
+                       }
+               }else{
+                       node.nodeUpdater.kill();
+                       Logger.normal(this, "Shutting down the node updater");
+               }
        }
 }
\ No newline at end of file


Reply via email to