propagate from branch 'i2p.i2p' (head e606c473eb1e461a477e45419f6295b6430a7353)

to branch 'i2p.i2p.zzz.test2' (head 6212892778308db10a86e58f9f275c838f604973)
This commit is contained in:
zzz
2014-09-09 19:27:10 +00:00
83 changed files with 1081 additions and 236 deletions

View File

@@ -182,6 +182,10 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
if (getTunnel() != tunnel)
return;
setupPostThrottle();
Properties props = tunnel.getClientOptions();
// see TunnelController.setSessionOptions()
String spoofHost = props.getProperty(TunnelController.PROP_SPOOFED_HOST);
_spoofHost = (spoofHost != null && spoofHost.trim().length() > 0) ? spoofHost.trim() : null;
super.optionsUpdated(tunnel);
}

View File

@@ -16,6 +16,7 @@ import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.security.GeneralSecurityException;
import java.util.Map;
import java.util.Properties;
@@ -50,8 +51,8 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
protected final Object slock = new Object();
protected final Object sslLock = new Object();
protected final InetAddress remoteHost;
protected final int remotePort;
protected InetAddress remoteHost;
protected int remotePort;
private final boolean _usePool;
protected final Logging l;
private I2PSSLSocketFactory _sslFactory;
@@ -265,6 +266,7 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
* Copy input stream to a byte array, so we can retry
* @since 0.7.10
*/
/****
private static ByteArrayInputStream copyOfInputStream(InputStream is) throws IOException {
byte[] buf = new byte[128];
ByteArrayOutputStream os = new ByteArrayOutputStream(768);
@@ -279,6 +281,7 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
}
return new ByteArrayInputStream(os.toByteArray());
}
****/
/**
* Start running the I2PTunnelServer.
@@ -348,6 +351,7 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
/**
* Update the I2PSocketManager.
* And since 0.9.15, the target host and port.
*
* @since 0.9.1
*/
@@ -357,6 +361,27 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
return;
Properties props = tunnel.getClientOptions();
sockMgr.setDefaultOptions(sockMgr.buildOptions(props));
// see TunnelController.setSessionOptions()
String h = props.getProperty(TunnelController.PROP_TARGET_HOST);
if (h != null) {
try {
remoteHost = InetAddress.getByName(h);
} catch (UnknownHostException uhe) {
l.log("Unknown host: " + h);
}
}
String p = props.getProperty(TunnelController.PROP_TARGET_PORT);
if (p != null) {
try {
int port = Integer.parseInt(p);
if (port > 0 && port <= 65535)
remotePort = port;
else
l.log("Bad port: " + port);
} catch (NumberFormatException nfe) {
l.log("Bad port: " + p);
}
}
buildSocketMap(props);
}

View File

@@ -487,6 +487,17 @@ public class TunnelController implements Logging {
String proxies = getProxyList();
if (proxies != null)
opts.setProperty(PROP_PROXIES, proxies);
// Ditto spoof host. Since 0.9.15.
String spoofhost = getSpoofedHost();
if (spoofhost != null)
opts.setProperty(PROP_SPOOFED_HOST, spoofhost);
// Ditto target host/port. Since 0.9.15.
String targethost = getTargetHost();
if (targethost != null)
opts.setProperty(PROP_TARGET_HOST, targethost);
String targetport = getTargetPort();
if (targetport != null)
opts.setProperty(PROP_TARGET_PORT, targetport);
_tunnel.setClientOptions(opts);
}

View File

@@ -258,6 +258,7 @@ public class IndexBean {
// give the messages a chance to make it to the window
try { Thread.sleep(1000); } catch (InterruptedException ie) {}
// and give them something to look at in any case
// FIXME name will be HTML escaped twice
return _("Starting tunnel") + ' ' + getTunnelName(_tunnel) + "...";
}
@@ -271,6 +272,7 @@ public class IndexBean {
// give the messages a chance to make it to the window
try { Thread.sleep(1000); } catch (InterruptedException ie) {}
// and give them something to look at in any case
// FIXME name will be HTML escaped twice
return _("Stopping tunnel") + ' ' + getTunnelName(_tunnel) + "...";
}
@@ -352,6 +354,7 @@ public class IndexBean {
List<String> msgs = doSave();
if (ksMsg != null)
msgs.add(ksMsg);
// FIXME name will be HTML escaped twice
return getMessages(msgs);
}
@@ -402,7 +405,8 @@ public class IndexBean {
name = Long.toString(_context.clock().now());
}
}
name = "i2ptunnel-deleted-" + name.replace(' ', '_') + '-' + _context.clock().now() + "-privkeys.dat";
name = name.replace(' ', '_').replace(':', '_').replace("..", "_").replace('/', '_').replace('\\', '_');
name = "i2ptunnel-deleted-" + name + '-' + _context.clock().now() + "-privkeys.dat";
File backupDir = new SecureFile(_context.getConfigDir(), TunnelController.KEY_BACKUP_DIR);
File to;
if (backupDir.isDirectory() || backupDir.mkdir())
@@ -451,13 +455,11 @@ public class IndexBean {
}
public boolean allowCSS() {
String css = _context.getProperty(PROP_CSS_DISABLED);
return (css == null);
return !_context.getBooleanProperty(PROP_CSS_DISABLED);
}
public boolean allowJS() {
String js = _context.getProperty(PROP_JS_DISABLED);
return (js == null);
return !_context.getBooleanProperty(PROP_JS_DISABLED);
}
public int getTunnelCount() {
@@ -727,8 +729,9 @@ public class IndexBean {
_name = (name != null ? name.trim() : null);
}
/** one line description */
public void setDescription(String description) {
_description = (description != null ? description.trim() : null);
public void setNofilter_description(String description) {
// '#' will blow up DataHelper.storeProps()
_description = (description != null ? description.replace('#', ' ').trim() : null);
}
/** I2CP host the router is on, ignored when in router context */
public void setClientHost(String host) {