diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java index 6a7d9b86c7c7028e2ea2702fd66c9100847109fa..ecbc9af6069417960f99a5559af2de12e5ba38aa 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java @@ -228,7 +228,7 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable { File filterDefinition = new File(getTunnel().filterDefinition); I2PAppContext context = getTunnel().getContext(); try { - filter = FilterFactory.createFilter(context, filterDefinition); + filter = FilterFactory.createFilter(context, filterDefinition, this); } catch (IOException | InvalidDefinitionException bad) { throw new IllegalArgumentException("Can't create socket manager", bad); } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java index f44e81713bc4d2c6b068da1366a1990db6ec0cd4..72e1e3be78f5228d112e7ae21b1e6be27dde68db 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java @@ -17,6 +17,7 @@ import net.i2p.I2PAppContext; import net.i2p.util.SimpleTimer2; import net.i2p.util.Log; import net.i2p.data.Destination; +import net.i2p.i2ptunnel.I2PTunnelTask; import net.i2p.client.streaming.IncomingConnectionFilter; class AccessFilter implements IncomingConnectionFilter { @@ -26,6 +27,7 @@ class AccessFilter implements IncomingConnectionFilter { private final FilterDefinition definition; private final I2PAppContext context; + private final I2PTunnelTask task; /** * Trackers for known destinations defined in access lists @@ -36,9 +38,11 @@ class AccessFilter implements IncomingConnectionFilter { */ private final Map<String, DestTracker> unknownDests = new HashMap<String, DestTracker>(); - AccessFilter(I2PAppContext context, FilterDefinition definition) throws IOException { + AccessFilter(I2PAppContext context, FilterDefinition definition, I2PTunnelTask task) + throws IOException { this.context = context; this.definition = definition; + this.task = task; reload(); @@ -139,6 +143,8 @@ class AccessFilter implements IncomingConnectionFilter { super(context.simpleTimer2(), PURGE_INTERVAL); } public void timeReached() { + if (!task.isOpen()) + return; purge(); schedule(PURGE_INTERVAL); } @@ -149,6 +155,8 @@ class AccessFilter implements IncomingConnectionFilter { super(context.simpleTimer2(), SYNC_INTERVAL); } public void timeReached() { + if (!task.isOpen()) + return; try { record(); reload(); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/FilterFactory.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/FilterFactory.java index 0571e96d05e1deef7db8382511b0f25bb95c8278..4333a529a9e0f52ef2cb1bf7b07256437f7013da 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/FilterFactory.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/FilterFactory.java @@ -9,10 +9,13 @@ import java.util.List; import java.util.ArrayList; import net.i2p.I2PAppContext; +import net.i2p.i2ptunnel.I2PTunnelTask; import net.i2p.client.streaming.IncomingConnectionFilter; public class FilterFactory { - public static IncomingConnectionFilter createFilter(I2PAppContext context, File definition) + public static IncomingConnectionFilter createFilter(I2PAppContext context, + File definition, + I2PTunnelTask task) throws IOException, InvalidDefinitionException { List<String> linesList = new ArrayList<String>(); @@ -33,6 +36,6 @@ public class FilterFactory { } FilterDefinition parsedDefinition = DefinitionParser.parse(linesList.toArray(new String[0])); - return new AccessFilter(context, parsedDefinition); + return new AccessFilter(context, parsedDefinition, task); } }