forked from I2P_Developers/i2p.i2p
* I2PTunnel: Register ports with the PortMapper
* Update: Find the proxy port in the PortMapper
This commit is contained in:
@ -25,6 +25,7 @@ import net.i2p.data.Destination;
|
|||||||
import net.i2p.util.EventDispatcher;
|
import net.i2p.util.EventDispatcher;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
import net.i2p.util.PortMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Supports the following:
|
* Supports the following:
|
||||||
@ -152,6 +153,20 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R
|
|||||||
return opts;
|
return opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startRunning() {
|
||||||
|
super.startRunning();
|
||||||
|
_context.portMapper().register(PortMapper.SVC_HTTPS_PROXY, getLocalPort());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean close(boolean forced) {
|
||||||
|
int reg = _context.portMapper().getPort(PortMapper.SVC_HTTPS_PROXY);
|
||||||
|
if (reg == getLocalPort())
|
||||||
|
_context.portMapper().unregister(PortMapper.SVC_HTTPS_PROXY);
|
||||||
|
return super.close(forced);
|
||||||
|
}
|
||||||
|
|
||||||
protected void clientConnectionRun(Socket s) {
|
protected void clientConnectionRun(Socket s) {
|
||||||
InputStream in = null;
|
InputStream in = null;
|
||||||
OutputStream out = null;
|
OutputStream out = null;
|
||||||
|
@ -39,6 +39,7 @@ import net.i2p.data.Hash;
|
|||||||
import net.i2p.util.EventDispatcher;
|
import net.i2p.util.EventDispatcher;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
import net.i2p.util.PortMapper;
|
||||||
import net.i2p.util.Translate;
|
import net.i2p.util.Translate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -291,6 +292,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
|
|||||||
public void startRunning() {
|
public void startRunning() {
|
||||||
super.startRunning();
|
super.startRunning();
|
||||||
this.isr = new InternalSocketRunner(this);
|
this.isr = new InternalSocketRunner(this);
|
||||||
|
_context.portMapper().register(PortMapper.SVC_HTTP_PROXY, getLocalPort());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -298,6 +300,9 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean close(boolean forced) {
|
public boolean close(boolean forced) {
|
||||||
|
int reg = _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY);
|
||||||
|
if (reg == getLocalPort())
|
||||||
|
_context.portMapper().unregister(PortMapper.SVC_HTTP_PROXY);
|
||||||
boolean rv = super.close(forced);
|
boolean rv = super.close(forced);
|
||||||
if (this.isr != null)
|
if (this.isr != null)
|
||||||
this.isr.stopRunning();
|
this.isr.stopRunning();
|
||||||
|
@ -21,6 +21,7 @@ import net.i2p.i2ptunnel.irc.IrcOutboundFilter;
|
|||||||
import net.i2p.util.EventDispatcher;
|
import net.i2p.util.EventDispatcher;
|
||||||
import net.i2p.util.I2PAppThread;
|
import net.i2p.util.I2PAppThread;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
import net.i2p.util.PortMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Todo: Can we extend I2PTunnelClient instead and remove some duplicated code?
|
* Todo: Can we extend I2PTunnelClient instead and remove some duplicated code?
|
||||||
@ -151,8 +152,17 @@ public class I2PTunnelIRCClient extends I2PTunnelClientBase {
|
|||||||
return dests.get(index);
|
return dests.get(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startRunning() {
|
||||||
|
super.startRunning();
|
||||||
|
_context.portMapper().register(PortMapper.SVC_IRC, getLocalPort());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean close(boolean forced) {
|
public boolean close(boolean forced) {
|
||||||
|
int reg = _context.portMapper().getPort(PortMapper.SVC_IRC);
|
||||||
|
if (reg == getLocalPort())
|
||||||
|
_context.portMapper().unregister(PortMapper.SVC_IRC);
|
||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
if (_DCCServer != null) {
|
if (_DCCServer != null) {
|
||||||
_DCCServer.close(forced);
|
_DCCServer.close(forced);
|
||||||
|
@ -3,9 +3,11 @@ package net.i2p.router.web;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.i2p.I2PAppContext;
|
||||||
import net.i2p.crypto.TrustedUpdate;
|
import net.i2p.crypto.TrustedUpdate;
|
||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.util.FileUtil;
|
import net.i2p.util.FileUtil;
|
||||||
|
import net.i2p.util.PortMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -77,7 +79,16 @@ public class ConfigUpdateHandler extends FormHandler {
|
|||||||
|
|
||||||
public static final String PROP_TRUSTED_KEYS = "router.trustedUpdateKeys";
|
public static final String PROP_TRUSTED_KEYS = "router.trustedUpdateKeys";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience method for updaters
|
||||||
|
* @return the configured value, else the registered HTTP proxy, else the default
|
||||||
|
* @since 0.8.13
|
||||||
|
*/
|
||||||
|
static int proxyPort(I2PAppContext ctx) {
|
||||||
|
return ctx.getProperty(PROP_PROXY_PORT,
|
||||||
|
ctx.portMapper().getPort(PortMapper.SVC_HTTP_PROXY, DEFAULT_PROXY_PORT_INT));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void processForm() {
|
protected void processForm() {
|
||||||
if (_action == null)
|
if (_action == null)
|
||||||
@ -112,7 +123,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (_proxyHost != null) && (_proxyHost.length() > 0) ) {
|
if (_proxyHost != null && _proxyHost.length() > 0 && !_proxyHost.equals(_("internal"))) {
|
||||||
String oldHost = _context.router().getConfigSetting(PROP_PROXY_HOST);
|
String oldHost = _context.router().getConfigSetting(PROP_PROXY_HOST);
|
||||||
if ( (oldHost == null) || (!_proxyHost.equals(oldHost)) ) {
|
if ( (oldHost == null) || (!_proxyHost.equals(oldHost)) ) {
|
||||||
changes.put(PROP_PROXY_HOST, _proxyHost);
|
changes.put(PROP_PROXY_HOST, _proxyHost);
|
||||||
@ -120,7 +131,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (_proxyPort != null) && (_proxyPort.length() > 0) ) {
|
if (_proxyPort != null && _proxyPort.length() > 0 && !_proxyPort.equals(_("internal"))) {
|
||||||
String oldPort = _context.router().getConfigSetting(PROP_PROXY_PORT);
|
String oldPort = _context.router().getConfigSetting(PROP_PROXY_PORT);
|
||||||
if ( (oldPort == null) || (!_proxyPort.equals(oldPort)) ) {
|
if ( (oldPort == null) || (!_proxyPort.equals(oldPort)) ) {
|
||||||
changes.put(PROP_PROXY_PORT, _proxyPort);
|
changes.put(PROP_PROXY_PORT, _proxyPort);
|
||||||
|
@ -3,6 +3,7 @@ package net.i2p.router.web;
|
|||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
import net.i2p.crypto.TrustedUpdate;
|
import net.i2p.crypto.TrustedUpdate;
|
||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
|
import net.i2p.util.PortMapper;
|
||||||
|
|
||||||
public class ConfigUpdateHelper extends HelperBase {
|
public class ConfigUpdateHelper extends HelperBase {
|
||||||
private boolean _dontInstall;
|
private boolean _dontInstall;
|
||||||
@ -37,6 +38,7 @@ public class ConfigUpdateHelper extends HelperBase {
|
|||||||
else
|
else
|
||||||
return ConfigUpdateHandler.DEFAULT_NEWS_URL;
|
return ConfigUpdateHandler.DEFAULT_NEWS_URL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUpdateURL() {
|
public String getUpdateURL() {
|
||||||
String url = _context.getProperty(ConfigUpdateHandler.PROP_UPDATE_URL);
|
String url = _context.getProperty(ConfigUpdateHandler.PROP_UPDATE_URL);
|
||||||
if (url != null)
|
if (url != null)
|
||||||
@ -44,11 +46,30 @@ public class ConfigUpdateHelper extends HelperBase {
|
|||||||
else
|
else
|
||||||
return ConfigUpdateHandler.DEFAULT_UPDATE_URL;
|
return ConfigUpdateHandler.DEFAULT_UPDATE_URL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getProxyHost() {
|
public String getProxyHost() {
|
||||||
|
if (isInternal())
|
||||||
|
return _("internal") + "\" readonly=\"readonly";
|
||||||
return _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
return _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getProxyPort() {
|
public String getProxyPort() {
|
||||||
return _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT);
|
if (isInternal())
|
||||||
|
return _("internal") + "\" readonly=\"readonly";
|
||||||
|
return Integer.toString(ConfigUpdateHandler.proxyPort(_context));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This should almost always be true.
|
||||||
|
* @return true if settings are at defaults and proxy is registered
|
||||||
|
* @since 0.8.13
|
||||||
|
*/
|
||||||
|
private boolean isInternal() {
|
||||||
|
String host = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST);
|
||||||
|
String port = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT);
|
||||||
|
return (host == null || host.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST)) &&
|
||||||
|
(port == null || port.equals(ConfigUpdateHandler.DEFAULT_PROXY_PORT)) &&
|
||||||
|
_context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUpdateThroughProxy() {
|
public String getUpdateThroughProxy() {
|
||||||
|
@ -224,7 +224,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
|||||||
String newsURL = ConfigUpdateHelper.getNewsURL(_context);
|
String newsURL = ConfigUpdateHelper.getNewsURL(_context);
|
||||||
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
||||||
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
||||||
int proxyPort = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT);
|
int proxyPort = ConfigUpdateHandler.proxyPort(_context);
|
||||||
if (_tempFile.exists())
|
if (_tempFile.exists())
|
||||||
_tempFile.delete();
|
_tempFile.delete();
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ public class PluginUpdateChecker extends UpdateHandler {
|
|||||||
// always proxy, or else FIXME
|
// always proxy, or else FIXME
|
||||||
//boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
//boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
||||||
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
||||||
int proxyPort = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT);
|
int proxyPort = ConfigUpdateHandler.proxyPort(_context);
|
||||||
_baos.reset();
|
_baos.reset();
|
||||||
try {
|
try {
|
||||||
_get = new PartialEepGet(_context, proxyHost, proxyPort, _baos, _xpi2pURL, TrustedUpdate.HEADER_BYTES);
|
_get = new PartialEepGet(_context, proxyHost, proxyPort, _baos, _xpi2pURL, TrustedUpdate.HEADER_BYTES);
|
||||||
|
@ -119,7 +119,7 @@ public class PluginUpdateHandler extends UpdateHandler {
|
|||||||
// use the same settings as for updater
|
// use the same settings as for updater
|
||||||
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
||||||
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
||||||
int proxyPort = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT);
|
int proxyPort = ConfigUpdateHandler.proxyPort(_context);
|
||||||
try {
|
try {
|
||||||
if (shouldProxy)
|
if (shouldProxy)
|
||||||
// 10 retries!!
|
// 10 retries!!
|
||||||
|
@ -70,7 +70,7 @@ public class UnsignedUpdateHandler extends UpdateHandler {
|
|||||||
// always proxy for now
|
// always proxy for now
|
||||||
//boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
//boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
||||||
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
||||||
int proxyPort = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT);
|
int proxyPort = ConfigUpdateHandler.proxyPort(_context);
|
||||||
try {
|
try {
|
||||||
// 40 retries!!
|
// 40 retries!!
|
||||||
_get = new EepGet(_context, proxyHost, proxyPort, 40, _updateFile, _zipURL, false);
|
_get = new EepGet(_context, proxyHost, proxyPort, 40, _updateFile, _zipURL, false);
|
||||||
|
@ -160,16 +160,15 @@ public class UpdateHandler {
|
|||||||
* If it is, get the whole thing.
|
* If it is, get the whole thing.
|
||||||
*/
|
*/
|
||||||
protected void update() {
|
protected void update() {
|
||||||
// TODO:
|
|
||||||
// Do a PartialEepGet on the selected URL, check for version we expect,
|
// Do a PartialEepGet on the selected URL, check for version we expect,
|
||||||
// and loop if it isn't what we want.
|
// and loop if it isn't what we want.
|
||||||
// This will allow us to do a release without waiting for the last host to install the update.
|
// This will allows us to do a release without waiting for the last host to install the update.
|
||||||
// Alternative: In bytesTransferred(), Check the data in the output file after
|
// Alternative: In bytesTransferred(), Check the data in the output file after
|
||||||
// we've received at least 56 bytes. Need a cancel() method in EepGet ?
|
// we've received at least 56 bytes. Need a cancel() method in EepGet ?
|
||||||
|
|
||||||
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
||||||
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
||||||
int proxyPort = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT);
|
int proxyPort = ConfigUpdateHandler.proxyPort(_context);
|
||||||
|
|
||||||
List<String> urls = getUpdateURLs();
|
List<String> urls = getUpdateURLs();
|
||||||
if (urls.isEmpty()) {
|
if (urls.isEmpty()) {
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy host")%>:</b></td>
|
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy host")%>:</b></td>
|
||||||
<td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /></td>
|
<td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /></td>
|
||||||
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy port")%>:</b></td>
|
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy port")%>:</b></td>
|
||||||
<td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td></tr>
|
<td><input type="text" size="10" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td></tr>
|
||||||
<% if (updatehelper.canInstall()) { %>
|
<% if (updatehelper.canInstall()) { %>
|
||||||
<tr><td class= "mediumtags" align="right"><b><%=intl._("Update URLs")%>:</b></td>
|
<tr><td class= "mediumtags" align="right"><b><%=intl._("Update URLs")%>:</b></td>
|
||||||
<td><textarea name="updateURL" wrap="off" spellcheck="false"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td>
|
<td><textarea name="updateURL" wrap="off" spellcheck="false"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td>
|
||||||
|
Reference in New Issue
Block a user