Why should a client care about WithDefaults ?

Also, clients should set one or two settings to change, not the whole
lot; there may be other changes going on in parallel.

On Sun, Oct 29, 2006 at 11:34:28PM +0000, zothar at freenetproject.org wrote:
> Author: zothar
> Date: 2006-10-29 23:34:22 +0000 (Sun, 29 Oct 2006)
> New Revision: 10745
> 
> Added:
>    trunk/freenet/src/freenet/node/fcp/ConfigData.java
>    trunk/freenet/src/freenet/node/fcp/GetConfig.java
>    trunk/freenet/src/freenet/node/fcp/ModifyConfig.java
> Modified:
>    trunk/freenet/src/freenet/config/FilePersistentConfig.java
>    trunk/freenet/src/freenet/config/SubConfig.java
>    trunk/freenet/src/freenet/node/fcp/FCPMessage.java
> Log:
> Added node configuration getting and modifying via FCP.
> 
> Modified: trunk/freenet/src/freenet/config/FilePersistentConfig.java
> ===================================================================
> --- trunk/freenet/src/freenet/config/FilePersistentConfig.java        
> 2006-10-29 22:30:31 UTC (rev 10744)
> +++ trunk/freenet/src/freenet/config/FilePersistentConfig.java        
> 2006-10-29 23:34:22 UTC (rev 10745)
> @@ -170,14 +170,18 @@
>               }
>       }
>  
> -     private synchronized SimpleFieldSet exportFieldSet() {
> +     private SimpleFieldSet exportFieldSet() {
> +             return exportFieldSet(false);
> +     }
> +
> +     public synchronized SimpleFieldSet exportFieldSet(boolean withDefaults) 
> {
>               SimpleFieldSet fs = new SimpleFieldSet();
>               SubConfig[] configs;
>               synchronized(this) {
>                       configs = (SubConfig[]) 
> configsByPrefix.values().toArray(new SubConfig[configsByPrefix.size()]);
>               }
>               for(int i=0;i<configs.length;i++) {
> -                     SimpleFieldSet scfs = configs[i].exportFieldSet();
> +                     SimpleFieldSet scfs = 
> configs[i].exportFieldSet(withDefaults);
>                       fs.tput(configs[i].prefix, scfs);
>               }
>               return fs;
> 
> Modified: trunk/freenet/src/freenet/config/SubConfig.java
> ===================================================================
> --- trunk/freenet/src/freenet/config/SubConfig.java   2006-10-29 22:30:31 UTC 
> (rev 10744)
> +++ trunk/freenet/src/freenet/config/SubConfig.java   2006-10-29 23:34:22 UTC 
> (rev 10745)
> @@ -181,6 +181,10 @@
>       }
>  
>       public SimpleFieldSet exportFieldSet() {
> +             return exportFieldSet(false);
> +     }
> +
> +     public SimpleFieldSet exportFieldSet(boolean withDefaults) {
>               SimpleFieldSet fs = new SimpleFieldSet();
>               Set entrySet = map.entrySet();
>               Iterator i = entrySet.iterator();
> @@ -188,7 +192,7 @@
>                       Map.Entry entry = (Map.Entry) i.next();
>                       String key = (String) entry.getKey();
>                       Option o = (Option) entry.getValue();
> -                     if(o.isDefault() && !o.forceWrite) continue;
> +                     if(!withDefaults && o.isDefault() && !o.forceWrite) 
> continue;
>                       fs.put(key, o.getValueString());
>               }
>               return fs;
> 
> Added: trunk/freenet/src/freenet/node/fcp/ConfigData.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/ConfigData.java        2006-10-29 
> 22:30:31 UTC (rev 10744)
> +++ trunk/freenet/src/freenet/node/fcp/ConfigData.java        2006-10-29 
> 23:34:22 UTC (rev 10745)
> @@ -0,0 +1,40 @@
> +/* This code is part of Freenet. It is distributed under the GNU General
> + * Public License, version 2 (or at your option any later version). See
> + * http://www.gnu.org/ for further details of the GPL. */
> +package freenet.node.fcp;
> +
> +import freenet.node.Node;
> +import freenet.node.PeerNode;
> +import freenet.support.SimpleFieldSet;
> +
> +public class ConfigData extends FCPMessage {
> +     static final String name = "ConfigData";
> +     
> +     final Node node;
> +     final boolean withDefaults;
> +     
> +     public ConfigData(Node node, boolean withDefaults) {
> +             this.node = node;
> +             this.withDefaults = withDefaults;
> +     }
> +     
> +     public SimpleFieldSet getFieldSet() {
> +             SimpleFieldSet fs = new SimpleFieldSet();
> +             if(withDefaults) {
> +                     fs = node.config.exportFieldSet(true);
> +             } else {
> +                     fs = node.config.exportFieldSet(false);
> +             }
> +             return fs;
> +     }
> +
> +     public String getName() {
> +             return name;
> +     }
> +
> +     public void run(FCPConnectionHandler handler, Node node)
> +                     throws MessageInvalidException {
> +             throw new 
> MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "ConfigData 
> goes from server to client not the other way around", null);
> +     }
> +
> +}
> 
> Modified: trunk/freenet/src/freenet/node/fcp/FCPMessage.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/FCPMessage.java        2006-10-29 
> 22:30:31 UTC (rev 10744)
> +++ trunk/freenet/src/freenet/node/fcp/FCPMessage.java        2006-10-29 
> 23:34:22 UTC (rev 10745)
> @@ -44,6 +44,8 @@
>                       return new ClientPutMessage(fs);
>               if(name.equals(GenerateSSKMessage.name))
>                       return new GenerateSSKMessage(fs);
> +             if(name.equals(GetConfig.name))
> +                     return new GetConfig(fs);
>               if(name.equals(GetNode.name))
>                       return new GetNode(fs);
>               if(name.equals(GetRequestStatusMessage.name))
> @@ -52,6 +54,8 @@
>                       return new ListPeersMessage(fs);
>               if(name.equals(ListPersistentRequestsMessage.name))
>                       return new ListPersistentRequestsMessage(fs);
> +             if(name.equals(ModifyConfig.name))
> +                     return new ModifyConfig(fs);
>               if(name.equals(ModifyPeer.name))
>                       return new ModifyPeer(fs);
>               if(name.equals(ModifyPersistentRequest.name))
> 
> Added: trunk/freenet/src/freenet/node/fcp/GetConfig.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/GetConfig.java 2006-10-29 22:30:31 UTC 
> (rev 10744)
> +++ trunk/freenet/src/freenet/node/fcp/GetConfig.java 2006-10-29 23:34:22 UTC 
> (rev 10745)
> @@ -0,0 +1,33 @@
> +/* This code is part of Freenet. It is distributed under the GNU General
> + * Public License, version 2 (or at your option any later version). See
> + * http://www.gnu.org/ for further details of the GPL. */
> +package freenet.node.fcp;
> +
> +import freenet.node.Node;
> +import freenet.node.PeerNode;
> +import freenet.support.Fields;
> +import freenet.support.SimpleFieldSet;
> +
> +public class GetConfig extends FCPMessage {
> +
> +     final boolean withDefaults;
> +     static final String name = "GetConfig";
> +     
> +     public GetConfig(SimpleFieldSet fs) {
> +             withDefaults = Fields.stringToBool(fs.get("WithDefaults"), 
> false);
> +     }
> +     
> +     public SimpleFieldSet getFieldSet() {
> +             return new SimpleFieldSet();
> +     }
> +     
> +     public String getName() {
> +             return name;
> +     }
> +     
> +     public void run(FCPConnectionHandler handler, Node node)
> +                     throws MessageInvalidException {
> +             handler.outputHandler.queue(new ConfigData(node, true));
> +     }
> +     
> +}
> 
> Added: trunk/freenet/src/freenet/node/fcp/ModifyConfig.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/ModifyConfig.java      2006-10-29 
> 22:30:31 UTC (rev 10744)
> +++ trunk/freenet/src/freenet/node/fcp/ModifyConfig.java      2006-10-29 
> 23:34:22 UTC (rev 10745)
> @@ -0,0 +1,67 @@
> +/* This code is part of Freenet. It is distributed under the GNU General
> + * Public License, version 2 (or at your option any later version). See
> + * http://www.gnu.org/ for further details of the GPL. */
> +package freenet.node.fcp;
> +
> +import freenet.config.Config;
> +import freenet.config.Option;
> +import freenet.config.SubConfig;
> +import freenet.node.Node;
> +import freenet.node.NodeClientCore;
> +import freenet.node.PeerNode;
> +import freenet.support.Fields;
> +import freenet.support.Logger;
> +import freenet.support.SimpleFieldSet;
> +
> +public class ModifyConfig extends FCPMessage {
> +
> +     static final String name = "ModifyConfig";
> +     
> +     final SimpleFieldSet fs;
> +     
> +     public ModifyConfig(SimpleFieldSet fs) {
> +             this.fs = fs;
> +     }
> +
> +     public SimpleFieldSet getFieldSet() {
> +             return new SimpleFieldSet();
> +     }
> +
> +     public String getName() {
> +             return name;
> +     }
> +
> +     public void run(FCPConnectionHandler handler, Node node) throws 
> MessageInvalidException {
> +             Config config = node.config;
> +             SubConfig[] sc = config.getConfigs();
> +             
> +             boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
> +             
> +             for(int i=0; i<sc.length ; i++){
> +                     Option[] o = sc[i].getOptions();
> +                     String prefix = new String(sc[i].getPrefix());
> +                     String configName;
> +                     
> +                     for(int j=0; j<o.length; j++){
> +                             configName=o[j].getName();
> +                             if(logMINOR) Logger.minor(this, "Setting 
> "+prefix+"."+configName);
> +                             
> +                             // we ignore unreconized parameters 
> +                             if(fs.get(prefix+"."+configName) != null) {
> +                                     
> if(!(o[j].getValueString().equals(fs.get(prefix+"."+configName)))){
> +                                             if(logMINOR) Logger.minor(this, 
> "Setting "+prefix+"."+configName+" to "+fs.get(prefix+"."+configName));
> +                                             try{
> +                                                     
> o[j].setValue(fs.get(prefix+"."+configName));
> +                                             }catch(Exception e){
> +                                                     // Bad values silently 
> fail from an FCP perspective, but the FCP client can tell if a change took by 
> comparing ConfigData messages before and after
> +                                                     Logger.error(this, 
> "Caught "+e, e);
> +                                             }
> +                                     }
> +                             }
> +                     }
> +             }
> +             node.clientCore.storeConfig();
> +             handler.outputHandler.queue(new ConfigData(node, true));
> +     }
> +
> +}
> 
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20061031/9a88287b/attachment.pgp>

Reply via email to