package net.i2p.router.web;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
import net.i2p.data.Destination;
import net.i2p.router.TunnelPoolSettings;
public class ConfigTunnelsHelper extends HelperBase {
public ConfigTunnelsHelper() {}
public String getForm() {
StringBuilder buf = new StringBuilder(1024);
buf.append("
\n");
TunnelPoolSettings exploratoryIn = _context.tunnelManager().getInboundSettings();
TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings();
buf.append("");
renderForm(buf, 0, "exploratory", _("Exploratory tunnels"), exploratoryIn, exploratoryOut);
int cur = 1;
Set clients = _context.clientManager().listClients();
for (Iterator iter = clients.iterator(); iter.hasNext(); ) {
Destination dest = (Destination)iter.next();
TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(dest.calculateHash());
TunnelPoolSettings out = _context.tunnelManager().getOutboundSettings(dest.calculateHash());
if ( (in == null) || (out == null) ) continue;
String name = in.getDestinationNickname();
if (name == null)
name = out.getDestinationNickname();
if (name == null)
name = dest.calculateHash().toBase64().substring(0,6);
String prefix = dest.calculateHash().toBase64().substring(0,4);
buf.append("");
renderForm(buf, cur, prefix, _("Client tunnels for") + " " + name, in, out);
cur++;
}
buf.append("
\n");
return buf.toString();
}
private static final int WARN_LENGTH = 4;
private static final int MAX_LENGTH = 4;
private static final int WARN_QUANTITY = 5;
private static final int MAX_QUANTITY = 6;
private static final int MAX_BACKUP_QUANTITY = 3;
private static final int MAX_VARIANCE = 2;
private static final int MIN_NEG_VARIANCE = -1;
private void renderForm(StringBuilder buf, int index, String prefix, String name, TunnelPoolSettings in, TunnelPoolSettings out) {
buf.append("
" + _("PERFORMANCE WARNING - Settings include high tunnel quantities.") + "
");
buf.append("
" + _("Inbound") + "
" + _("Outbound") + "
\n");
// buf.append("
Inbound
Outbound
\n");
// tunnel depth
buf.append("
" + _("Depth") + ":
\n");
buf.append("
\n");
buf.append("
\n");
buf.append("
\n");
// tunnel depth variance
buf.append("
" + _("Randomization") + ":
\n");
buf.append("
\n");
buf.append("
\n");
// tunnel quantity
buf.append("
" + _("Quantity") + ":
\n");
buf.append("
\n");
buf.append("
\n");
buf.append("
\n");
// tunnel backup quantity
buf.append("
" + _("Backup quantity") + ":
\n");
buf.append("
\n");
buf.append("
\n");
buf.append("
\n");
// custom options
// There is no facility to set these, either in ConfigTunnelsHandler or
// TunnelPoolOptions, so make the boxes readonly.
// And let's not display them at all unless they have contents, which should be rare.
Properties props = in.getUnknownOptions();
if (props.size() > 0) {
buf.append("