From c7771095d3b6b1a269da6e51415a6642227a95f7 Mon Sep 17 00:00:00 2001 From: zab2 Date: Wed, 27 Mar 2019 15:04:04 +0000 Subject: [PATCH] hook up loading of filter definitions for server tunnels --- .../java/src/net/i2p/i2ptunnel/I2PTunnel.java | 2 ++ .../src/net/i2p/i2ptunnel/I2PTunnelServer.java | 17 ++++++++++++++++- .../src/net/i2p/i2ptunnel/TunnelController.java | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java index 9e22d9b3c..94f147355 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java @@ -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 tasks = new CopyOnWriteArrayList(); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java index c3e325c25..6a7d9b86c 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java @@ -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); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java index ef436d290..fe0cc9fe6 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java @@ -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");