hook up loading of filter definitions for server tunnels

This commit is contained in:
zab2
2019-03-27 15:04:04 +00:00
parent b35762b4bb
commit c7771095d3
3 changed files with 21 additions and 1 deletions

View File

@@ -105,6 +105,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
public long readTimeout = -1;
public String filterDefinition;
private static final String nocli_args[] = { "-nocli", "-die"};
private final List<I2PTunnelTask> tasks = new CopyOnWriteArrayList<I2PTunnelTask>();

View File

@@ -30,6 +30,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.ThreadFactory;
import net.i2p.I2PException;
import net.i2p.I2PAppContext;
import net.i2p.client.I2PClient;
import net.i2p.client.I2PSession;
import net.i2p.client.I2PSessionException;
@@ -38,6 +39,7 @@ import net.i2p.client.streaming.I2PSocket;
import net.i2p.client.streaming.I2PSocketManager;
import net.i2p.client.streaming.I2PSocketManagerFactory;
import net.i2p.client.streaming.RouterRestartException;
import net.i2p.client.streaming.IncomingConnectionFilter;
import net.i2p.crypto.SigType;
import net.i2p.data.Base64;
import net.i2p.data.Hash;
@@ -45,6 +47,8 @@ import net.i2p.util.EventDispatcher;
import net.i2p.util.I2PAppThread;
import net.i2p.util.I2PSSLSocketFactory;
import net.i2p.util.Log;
import net.i2p.i2ptunnel.access.FilterFactory;
import net.i2p.i2ptunnel.access.InvalidDefinitionException;
public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
@@ -218,9 +222,20 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
_log.error("Invalid port specified [" + getTunnel().port + "], reverting to " + portNum);
}
}
IncomingConnectionFilter filter = IncomingConnectionFilter.ALLOW;
if (getTunnel().filterDefinition != null) {
File filterDefinition = new File(getTunnel().filterDefinition);
I2PAppContext context = getTunnel().getContext();
try {
filter = FilterFactory.createFilter(context, filterDefinition);
} catch (IOException | InvalidDefinitionException bad) {
throw new IllegalArgumentException("Can't create socket manager", bad);
}
}
try {
I2PSocketManager rv = I2PSocketManagerFactory.createDisconnectedManager(privData, getTunnel().host,
portNum, props);
portNum, props, filter);
rv.setName("I2PTunnel Server");
getTunnel().addSession(rv.getSession());
String alt = props.getProperty(PROP_ALT_PKF);

View File

@@ -85,6 +85,7 @@ public class TunnelController implements Logging {
public static final String PROP_TARGET_HOST = "targetHost";
public static final String PROP_TARGET_PORT = "targetPort";
public static final String PROP_TYPE = "type";
public static final String PROP_FILTER = "filterDefinition";
/**
* all of these are @since 0.9.33 (moved from TunnelConfig)
@@ -834,6 +835,8 @@ public class TunnelController implements Logging {
_config.setProperty(OPT_SIG_TYPE, PREFERRED_SIGTYPE.name());
}
if (!isClient(type)) {
_tunnel.filterDefinition = _config.getProperty(PROP_FILTER);
String p1 = _config.getProperty(OPT_MAX_CONNS_MIN, "0");
String p2 = _config.getProperty(OPT_MAX_CONNS_HOUR, "0");
String p3 = _config.getProperty(OPT_MAX_CONNS_DAY, "0");