Cancel timers if tunnel is stopped

This commit is contained in:
zab2
2019-03-28 15:32:49 +00:00
parent 94bde1d821
commit 6d2270a1ed
3 changed files with 15 additions and 4 deletions

View File

@ -228,7 +228,7 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
File filterDefinition = new File(getTunnel().filterDefinition); File filterDefinition = new File(getTunnel().filterDefinition);
I2PAppContext context = getTunnel().getContext(); I2PAppContext context = getTunnel().getContext();
try { try {
filter = FilterFactory.createFilter(context, filterDefinition); filter = FilterFactory.createFilter(context, filterDefinition, this);
} catch (IOException | InvalidDefinitionException bad) { } catch (IOException | InvalidDefinitionException bad) {
throw new IllegalArgumentException("Can't create socket manager", bad); throw new IllegalArgumentException("Can't create socket manager", bad);
} }

View File

@ -17,6 +17,7 @@ import net.i2p.I2PAppContext;
import net.i2p.util.SimpleTimer2; import net.i2p.util.SimpleTimer2;
import net.i2p.util.Log; import net.i2p.util.Log;
import net.i2p.data.Destination; import net.i2p.data.Destination;
import net.i2p.i2ptunnel.I2PTunnelTask;
import net.i2p.client.streaming.IncomingConnectionFilter; import net.i2p.client.streaming.IncomingConnectionFilter;
class AccessFilter implements IncomingConnectionFilter { class AccessFilter implements IncomingConnectionFilter {
@ -26,6 +27,7 @@ class AccessFilter implements IncomingConnectionFilter {
private final FilterDefinition definition; private final FilterDefinition definition;
private final I2PAppContext context; private final I2PAppContext context;
private final I2PTunnelTask task;
/** /**
* Trackers for known destinations defined in access lists * 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>(); 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.context = context;
this.definition = definition; this.definition = definition;
this.task = task;
reload(); reload();
@ -139,6 +143,8 @@ class AccessFilter implements IncomingConnectionFilter {
super(context.simpleTimer2(), PURGE_INTERVAL); super(context.simpleTimer2(), PURGE_INTERVAL);
} }
public void timeReached() { public void timeReached() {
if (!task.isOpen())
return;
purge(); purge();
schedule(PURGE_INTERVAL); schedule(PURGE_INTERVAL);
} }
@ -149,6 +155,8 @@ class AccessFilter implements IncomingConnectionFilter {
super(context.simpleTimer2(), SYNC_INTERVAL); super(context.simpleTimer2(), SYNC_INTERVAL);
} }
public void timeReached() { public void timeReached() {
if (!task.isOpen())
return;
try { try {
record(); record();
reload(); reload();

View File

@ -9,10 +9,13 @@ import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import net.i2p.I2PAppContext; import net.i2p.I2PAppContext;
import net.i2p.i2ptunnel.I2PTunnelTask;
import net.i2p.client.streaming.IncomingConnectionFilter; import net.i2p.client.streaming.IncomingConnectionFilter;
public class FilterFactory { public class FilterFactory {
public static IncomingConnectionFilter createFilter(I2PAppContext context, File definition) public static IncomingConnectionFilter createFilter(I2PAppContext context,
File definition,
I2PTunnelTask task)
throws IOException, InvalidDefinitionException { throws IOException, InvalidDefinitionException {
List<String> linesList = new ArrayList<String>(); List<String> linesList = new ArrayList<String>();
@ -33,6 +36,6 @@ public class FilterFactory {
} }
FilterDefinition parsedDefinition = DefinitionParser.parse(linesList.toArray(new String[0])); FilterDefinition parsedDefinition = DefinitionParser.parse(linesList.toArray(new String[0]));
return new AccessFilter(context, parsedDefinition); return new AccessFilter(context, parsedDefinition, task);
} }
} }