From 86e663b2b48caf9af9b7d1b861c6e7afb3ca865d Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 7 Feb 2011 19:08:56 +0000 Subject: [PATCH] * i2ptunnel: Generate error message when i2ptunnel.config save fails (ticket #404) --- .../i2p/i2ptunnel/TunnelControllerGroup.java | 32 ++++--------------- .../src/net/i2p/i2ptunnel/web/IndexBean.java | 27 ++++++++++------ 2 files changed, 24 insertions(+), 35 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java index d021131edd..f1e9f7108d 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java @@ -1,18 +1,15 @@ package net.i2p.i2ptunnel; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.TreeMap; import net.i2p.I2PAppContext; import net.i2p.client.I2PSession; @@ -20,7 +17,7 @@ import net.i2p.client.I2PSessionException; import net.i2p.data.DataHelper; import net.i2p.util.I2PAppThread; import net.i2p.util.Log; -import net.i2p.util.SecureFileOutputStream; +import net.i2p.util.OrderedProperties; /** * Coordinate a set of tunnels within the JVM, loading and storing their config @@ -223,14 +220,15 @@ public class TunnelControllerGroup { * file * */ - public void saveConfig() { + public void saveConfig() throws IOException { saveConfig(_configFile); } + /** * Save the configuration of all known tunnels to the given file * */ - public void saveConfig(String configFile) { + public void saveConfig(String configFile) throws IOException { _configFile = configFile; File cfgFile = new File(configFile); if (!cfgFile.isAbsolute()) @@ -239,32 +237,14 @@ public class TunnelControllerGroup { if ( (parent != null) && (!parent.exists()) ) parent.mkdirs(); - - TreeMap map = new TreeMap(); + Properties map = new OrderedProperties(); for (int i = 0; i < _controllers.size(); i++) { TunnelController controller = _controllers.get(i); Properties cur = controller.getConfig("tunnel." + i + "."); map.putAll(cur); } - StringBuilder buf = new StringBuilder(1024); - for (Iterator iter = map.keySet().iterator(); iter.hasNext(); ) { - String key = (String)iter.next(); - String val = (String)map.get(key); - buf.append(key).append('=').append(val).append('\n'); - } - - FileOutputStream fos = null; - try { - fos = new SecureFileOutputStream(cfgFile); - fos.write(buf.toString().getBytes("UTF-8")); - if (_log.shouldLog(Log.INFO)) - _log.info("Config written to " + cfgFile.getPath()); - } catch (IOException ioe) { - _log.error("Error writing out the config"); - } finally { - if (fos != null) try { fos.close(); } catch (IOException ioe) {} - } + DataHelper.storeProps(map, cfgFile); } /** diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java index 9787078894..eb36a64bc4 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java @@ -8,7 +8,7 @@ package net.i2p.i2ptunnel.web; * */ -import java.util.concurrent.ConcurrentHashMap; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -17,6 +17,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; +import java.util.concurrent.ConcurrentHashMap; import net.i2p.I2PAppContext; import net.i2p.data.Base32; @@ -299,14 +300,22 @@ public class IndexBean { } } - List msgs = doSave(); - msgs.add(0, "Changes saved"); + List<String> msgs = doSave(); return getMessages(msgs); } - private List doSave() { - _group.saveConfig(); - return _group.clearAllMessages(); + + private List<String> doSave() { + List<String> rv = _group.clearAllMessages(); + try { + _group.saveConfig(); + rv.add(0, _("Configuration changes saved")); + } catch (IOException ioe) { + _log.error("Failed to save config file", ioe); + rv.add(0, _("Failed to save configuration") + ": " + ioe.toString()); + } + return rv; } + private String deleteTunnel() { if (!_removeConfirmed) return "Please confirm removal"; @@ -1095,16 +1104,16 @@ public class IndexBean { return null; } - private static String getMessages(List msgs) { + private static String getMessages(List<String> msgs) { StringBuilder buf = new StringBuilder(128); getMessages(msgs, buf); return buf.toString(); } - private static void getMessages(List msgs, StringBuilder buf) { + private static void getMessages(List<String> msgs, StringBuilder buf) { if (msgs == null) return; for (int i = 0; i < msgs.size(); i++) { - buf.append((String)msgs.get(i)).append("\n"); + buf.append(msgs.get(i)).append("\n"); } } -- GitLab