From 39811fa537f8e31eee6379eb75e8e82b5c9028a2 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 1 Aug 2011 07:11:30 +0000 Subject: [PATCH] Added reseed support via periodic thread that reseeds if deemed necessary. Changed 'Apply' button size in ConfigurationTab. --- src/net/i2p/itoopie/Main.java | 19 +-- src/net/i2p/itoopie/gui/ConfigurationTab.java | 2 +- .../i2pcontrol/methods/I2PControl.java | 14 ++- .../i2pcontrol/methods/SetRouterManager.java | 2 + .../itoopie/maintenance/ReseedMonitor.java | 109 ++++++++++++++++++ 5 files changed, 132 insertions(+), 14 deletions(-) create mode 100644 src/net/i2p/itoopie/maintenance/ReseedMonitor.java diff --git a/src/net/i2p/itoopie/Main.java b/src/net/i2p/itoopie/Main.java index 46f16e0e8..b8b6eb1cf 100644 --- a/src/net/i2p/itoopie/Main.java +++ b/src/net/i2p/itoopie/Main.java @@ -4,20 +4,15 @@ package net.i2p.itoopie; * Main.java */ -import java.awt.Font; -import java.util.Arrays; + import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; +import java.util.Timer; import java.util.Map.Entry; import java.util.Set; import javax.net.ssl.HttpsURLConnection; -import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.plaf.FontUIResource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,7 +38,7 @@ import net.i2p.itoopie.i2pcontrol.methods.RouterManager.ROUTER_MANAGER; import net.i2p.itoopie.i2pcontrol.methods.SetI2PControl; import net.i2p.itoopie.i2pcontrol.methods.SetNetworkSetting; import net.i2p.itoopie.i2pcontrol.methods.SetRouterManager; -import net.i2p.itoopie.security.CertificateHelper; +import net.i2p.itoopie.maintenance.ReseedMonitor; import net.i2p.itoopie.security.ItoopieHostnameVerifier; /** @@ -54,6 +49,7 @@ public class Main { ///Manages the lifetime of the tray icon. private TrayManager trayManager = null; private static ConfigurationManager _conf; + private static Timer reseedMonitor; private static Log _log; /** @@ -98,8 +94,13 @@ public class Main { // Popup Main window. WindowHandler.toggleFrames(); + + + reseedMonitor = new Timer(); + // Start running periodic task after 2 minutes, run periodically every 10th minute. + reseedMonitor.scheduleAtFixedRate(new ReseedMonitor(), 2*60*1000, 10*60*1000); - testStuff(); // Delete Me + //testStuff(); // Delete Me } @SuppressWarnings("static-access") diff --git a/src/net/i2p/itoopie/gui/ConfigurationTab.java b/src/net/i2p/itoopie/gui/ConfigurationTab.java index d7b8821cc..0082a0774 100644 --- a/src/net/i2p/itoopie/gui/ConfigurationTab.java +++ b/src/net/i2p/itoopie/gui/ConfigurationTab.java @@ -95,7 +95,7 @@ public class ConfigurationTab extends TabLogoPanel { final JButton btnApply = new JButton(Transl._("Apply")); add(btnApply); - btnApply.setBounds(450, 272, 100, 24); + btnApply.setBounds(442, 272, 82, 24); btnApply.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { diff --git a/src/net/i2p/itoopie/i2pcontrol/methods/I2PControl.java b/src/net/i2p/itoopie/i2pcontrol/methods/I2PControl.java index 553a6a91e..70a9df3ad 100644 --- a/src/net/i2p/itoopie/i2pcontrol/methods/I2PControl.java +++ b/src/net/i2p/itoopie/i2pcontrol/methods/I2PControl.java @@ -4,7 +4,7 @@ import java.util.HashMap; /** - * Describes the ways a I2P router can be restarted. + * Describes the ways a I2P router operation can be altered. * @author hottuna */ public class I2PControl{ @@ -12,7 +12,7 @@ public class I2PControl{ /** - * Describes the ways a I2P router can be restarted. + * Describes the ways a I2P router operation can be altered. * @author hottuna */ public enum I2P_CONTROL implements Remote{ @@ -20,9 +20,15 @@ public class I2PControl{ public boolean isWritable(){ return true;} public String toString() { return "i2pcontrol.password"; }}, - PORT { public boolean isReadable(){ return false;} + PORT { public boolean isReadable(){ return false;} public boolean isWritable(){ return true;} - public String toString() { return "i2pcontrol.port"; }} + public String toString() { return "i2pcontrol.port"; }}, + + ADDRESS { public boolean isReadable(){ return false;} + public boolean isWritable(){ return true;} + public String toString() { return "i2pcontrol.address"; }} + + }; static { diff --git a/src/net/i2p/itoopie/i2pcontrol/methods/SetRouterManager.java b/src/net/i2p/itoopie/i2pcontrol/methods/SetRouterManager.java index 10b07d118..43eca3391 100644 --- a/src/net/i2p/itoopie/i2pcontrol/methods/SetRouterManager.java +++ b/src/net/i2p/itoopie/i2pcontrol/methods/SetRouterManager.java @@ -36,6 +36,8 @@ public class SetRouterManager { for (Entry e : set){ if(e.getKey().isWritable()){ outParams.put(e.getKey().toString(), e.getValue()); + } else if (e.getKey().isReadable()){ + outParams.put(e.getKey().toString(), null); } } req.setParams(outParams); diff --git a/src/net/i2p/itoopie/maintenance/ReseedMonitor.java b/src/net/i2p/itoopie/maintenance/ReseedMonitor.java new file mode 100644 index 000000000..08aa5ac68 --- /dev/null +++ b/src/net/i2p/itoopie/maintenance/ReseedMonitor.java @@ -0,0 +1,109 @@ +package net.i2p.itoopie.maintenance; + +import java.util.EnumMap; +import java.util.HashMap; +import java.util.TimerTask; + +import javax.net.ssl.HttpsURLConnection; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.thetransactioncompany.jsonrpc2.client.JSONRPC2SessionException; + +import net.i2p.itoopie.configuration.ConfigurationManager; +import net.i2p.itoopie.i2pcontrol.InvalidPasswordException; +import net.i2p.itoopie.i2pcontrol.methods.GetRouterInfo; +import net.i2p.itoopie.i2pcontrol.methods.RouterInfo.ROUTER_INFO; +import net.i2p.itoopie.i2pcontrol.methods.RouterManager.ROUTER_MANAGER; +import net.i2p.itoopie.i2pcontrol.methods.SetRouterManager; +import net.i2p.itoopie.security.ItoopieHostnameVerifier; + +/* + timer = new Timer(); + // Start running periodic task after 20 minutes, run periodically every 10th minute. + timer.scheduleAtFixedRate(new Sweeper(), 1000*60*20, 1000*60*10); + */ + +/** + * Monitors the amount of peers the remote I2P-node has and initiates a reseed if deemed needed. + * @author hottuna + * + */ +public class ReseedMonitor extends TimerTask{ + private static final Long MIN_KNOWN_PEERS = new Long(30); + private Log _log; + + public void ReseedMonitor(){ + _log = LogFactory.getLog(ReseedMonitor.class); + } + + @Override + public void run(){ + try { + EnumMap em = GetRouterInfo.execute(ROUTER_INFO.KNOWN_PEERS, ROUTER_INFO.IS_RESEEDING); + Long knownPeers = (Long) em.get(ROUTER_INFO.KNOWN_PEERS); + Boolean isReseeding = (Boolean) em.get(ROUTER_INFO.IS_RESEEDING); + if (knownPeers != null && isReseeding != null){ + if (knownPeers < MIN_KNOWN_PEERS){ + HashMap hm = new HashMap(); + hm.put(ROUTER_MANAGER.RESEED, null); + SetRouterManager.execute(hm); + _log.info("Reseed initiated.."); + } + } + } catch (InvalidPasswordException e) { + _log.error("Password denied by remote I2PControl host."); + } catch (JSONRPC2SessionException e) { + _log.error("Error connecting to remote I2PControl host."); + } + + } + + public static void main(String[] args){ + System.out.println("Reading config file.."); + ConfigurationManager _conf = ConfigurationManager.getInstance(); + HttpsURLConnection.setDefaultHostnameVerifier(new ItoopieHostnameVerifier()); + _conf.parseConfigStr("server.hostname=127.0.0.1"); + _conf.parseConfigStr("server.port=7650"); + _conf.parseConfigStr("server.target=jsonrpc"); + + + try { + EnumMap em = GetRouterInfo.execute(ROUTER_INFO.KNOWN_PEERS, ROUTER_INFO.IS_RESEEDING); + Long knownPeers = (Long) em.get(ROUTER_INFO.KNOWN_PEERS); + Boolean isReseeding = (Boolean) em.get(ROUTER_INFO.IS_RESEEDING); + System.out.println("Known peers: " + knownPeers); + System.out.println("Is reseeding: " + isReseeding); + + System.out.println("Initiating reseed..."); + HashMap hm = new HashMap(); + hm.put(ROUTER_MANAGER.RESEED, null); + SetRouterManager.execute(hm); + System.out.println("Waiting..."); + Thread.sleep(1000); + System.out.println("Initiating second reseed..."); + hm = new HashMap(); + hm.put(ROUTER_MANAGER.RESEED, null); + SetRouterManager.execute(hm); + System.out.println("Waiting..."); + Thread.sleep(1000); + em = GetRouterInfo.execute(ROUTER_INFO.KNOWN_PEERS, ROUTER_INFO.IS_RESEEDING); + isReseeding = (Boolean) em.get(ROUTER_INFO.IS_RESEEDING); + System.out.println("Is reseeding: " + isReseeding); + + + if (knownPeers != null && isReseeding != null){ + if (knownPeers < MIN_KNOWN_PEERS){ + } + } + } catch (InvalidPasswordException e) { + e.printStackTrace(); + } catch (JSONRPC2SessionException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + +}