From bcaf837da8679325abd5aa505a21b277c7b3619f Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sun, 14 Aug 2016 17:44:08 +0000 Subject: [PATCH] i2ptunnel: Register actual listen host with port mapper Register POP and SMTP ports with port mapper --- .../net/i2p/i2ptunnel/I2PTunnelClient.java | 47 +++++++++++++++++++ .../i2p/i2ptunnel/I2PTunnelConnectClient.java | 2 +- .../i2p/i2ptunnel/I2PTunnelHTTPClient.java | 4 +- .../net/i2p/i2ptunnel/I2PTunnelIRCClient.java | 2 +- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java index 1add404565..4ab411baa9 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java @@ -17,6 +17,7 @@ import net.i2p.client.streaming.I2PSocketAddress; import net.i2p.data.Destination; import net.i2p.util.EventDispatcher; import net.i2p.util.Log; +import net.i2p.util.PortMapper; public class I2PTunnelClient extends I2PTunnelClientBase { @@ -178,4 +179,50 @@ public class I2PTunnelClient extends I2PTunnelClientBase { buildAddresses(targets); super.optionsUpdated(tunnel); } + + /** + * Actually start working on incoming connections. + * Overridden to register with port mapper. + * + * @since 0.9.27 + */ + @Override + public void startRunning() { + super.startRunning(); + if (open) { + I2PSocketAddress addr = pickDestination(); + if (addr != null) { + String svc = null; + String hostname = addr.getHostName(); + if ("smtp.postman.i2p".equals(hostname)) { + svc = PortMapper.SVC_SMTP; + } else if ("pop.postman.i2p".equals(hostname)) { + svc = PortMapper.SVC_POP; + } + if (svc != null) { + _context.portMapper().register(svc, getTunnel().listenHost, getLocalPort()); + } + } + } + } + + /** + * Overridden to unregister with port mapper + * + * @since 0.9.27 + */ + @Override + public boolean close(boolean forced) { + int port = getLocalPort(); + int reg = _context.portMapper().getPort(PortMapper.SVC_SMTP); + if (reg == port) { + _context.portMapper().unregister(PortMapper.SVC_SMTP); + } + reg = _context.portMapper().getPort(PortMapper.SVC_POP); + if (reg == port) { + _context.portMapper().unregister(PortMapper.SVC_POP); + } + boolean rv = super.close(forced); + return rv; + } } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java index 0f5b5dcce5..fe9e92e947 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java @@ -125,7 +125,7 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R public void startRunning() { super.startRunning(); if (open) - _context.portMapper().register(PortMapper.SVC_HTTPS_PROXY, getLocalPort()); + _context.portMapper().register(PortMapper.SVC_HTTPS_PROXY, getTunnel().listenHost, getLocalPort()); } @Override diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java index 75e418dd31..373d1f7d56 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java @@ -316,8 +316,8 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn this.isr = new InternalSocketRunner(this); this.isr.start(); int port = getLocalPort(); - _context.portMapper().register(PortMapper.SVC_HTTP_PROXY, port); - _context.portMapper().register(PortMapper.SVC_HTTPS_PROXY, port); + _context.portMapper().register(PortMapper.SVC_HTTP_PROXY, getTunnel().listenHost, port); + _context.portMapper().register(PortMapper.SVC_HTTPS_PROXY, getTunnel().listenHost, port); } } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCClient.java index f53a72cd12..669492b016 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCClient.java @@ -217,7 +217,7 @@ public class I2PTunnelIRCClient extends I2PTunnelClientBase { public void startRunning() { super.startRunning(); if (open) - _context.portMapper().register(PortMapper.SVC_IRC, getLocalPort()); + _context.portMapper().register(PortMapper.SVC_IRC, getTunnel().listenHost, getLocalPort()); } @Override -- GitLab