Changes in / [2d8f0c2:50450ec]


Ignore:
Files:
488 added
55 deleted
194 edited

Legend:

Unmodified
Added
Removed
  • LICENSE.txt

    r2d8f0c2 r50450ec  
    246246       Silk icons: See licenses/LICENSE-SilkIcons.txt
    247247       FatCow icons: See licenses/LICENSE-FatCowIcons.txt
     248       Fugue Icons: See licenses/LICENSE-FugueIcons.txt
    248249
    249250       GeoIP Data:
  • apps/i2psnark/java/build.xml

    r2d8f0c2 r50450ec  
    277277            <fileset dir="../../../installer/resources/themes/console/images/" />
    278278        </copy>
    279         <copy file="../../../installer/resources/themes/console/dark/images/transparent.gif"
     279        <copy file="../../../installer/resources/themes/console/images/transparent.gif"
    280280              todir="build/standalone-resources/.resources/themes/snark/ubergine/images" />
    281281        <copy file="../../../installer/resources/themes/console/dark/images/header.png"
  • apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java

    r2d8f0c2 r50450ec  
    10791079            if(!theme.equals(_config.getProperty(PROP_THEME))) {
    10801080                _config.setProperty(PROP_THEME, theme);
    1081                 addMessage(_t("{0} theme loaded, return to main i2psnark page to view.", theme));
     1081                addMessage(_t("{0} theme loaded.", theme));
    10821082                changed = true;
    10831083            }
  • apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java

    r2d8f0c2 r50450ec  
    139139     */
    140140    public void renderStatusHTML(StringBuilder buf) {
    141         buf.append(_kad.toString().replace("\n", "<br>\n"));
     141        buf.append(_kad.toString().replace("\n", "<br><hr class=\"debug\">\n"));
    142142    }
    143143
  • apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java

    r2d8f0c2 r50450ec  
    141141     */
    142142    public void renderStatusHTML(StringBuilder buf) {
    143         buf.append("DHT tracker: ").append(_torrentCount).append(" torrents ")
     143        buf.append("<b>DHT tracker:</b> ").append(_torrentCount).append(" torrents ")
    144144           .append(_peerCount).append(" peers ")
    145145           .append(DataHelper.formatDuration(_expireTime)).append(" expiration<br>");
  • apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java

    r2d8f0c2 r50450ec  
    683683        long uptime = Math.max(1000, _context.clock().now() - _started);
    684684        StringBuilder buf = new StringBuilder(256);
    685         buf.append("<br><b>DHT DEBUG</b><br>TX: ").append(_txPkts.get()).append(" pkts / ")
     685        buf.append("<br><hr class=\"debug\"><b>DHT DEBUG</b><br><hr class=\"debug\"><hr><b>TX:</b> ").append(_txPkts.get()).append(" pkts / ")
    686686           .append(DataHelper.formatSize2(_txBytes.get())).append("B / ")
    687687           .append(DataHelper.formatSize2(_txBytes.get() * 1000 / uptime)).append("Bps<br>" +
    688                    "RX: ").append(_rxPkts.get()).append(" pkts / ")
     688                   "<b>RX:</b> ").append(_rxPkts.get()).append(" pkts / ")
    689689           .append(DataHelper.formatSize2(_rxBytes.get())).append("B / ")
    690690           .append(DataHelper.formatSize2(_rxBytes.get() * 1000 / uptime)).append("Bps<br>" +
    691                    "DHT Peers: ").append( _knownNodes.size()).append("<br>" +
    692                    "Blacklisted: ").append(_blacklist.size()).append("<br>" +
    693                    "Sent tokens: ").append(_outgoingTokens.size()).append("<br>" +
    694                    "Rcvd tokens: ").append(_incomingTokens.size()).append("<br>" +
    695                    "Pending queries: ").append(_sentQueries.size()).append("<br>");
     691                   "<b>DHT Peers:</b> ").append( _knownNodes.size()).append("<br>" +
     692                   "<b>Blacklisted:</b> ").append(_blacklist.size()).append("<br>" +
     693                   "<b>Sent tokens:</b> ").append(_outgoingTokens.size()).append("<br>" +
     694                   "<b>Rcvd tokens:</b> ").append(_incomingTokens.size()).append("<br>" +
     695                   "<b>Pending queries:</b> ").append(_sentQueries.size()).append("<br><br><hr class=\"debug\">");
    696696        _tracker.renderStatusHTML(buf);
    697697        _knownNodes.renderStatusHTML(buf);
  • apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java

    r2d8f0c2 r50450ec  
    507507        if (showSort)
    508508            out.write("</a>");
    509         out.write("</th>\n<th align=\"center\">");
     509        out.write("</th>\n<th id=\"pagenav\" align=\"center\">");
    510510        if (total > 0 && (start > 0 || total > pageSize)) {
    511511            writePageNav(out, req, start, pageSize, total, noThinsp);
     
    833833                out.write(getQueryString(req, null, "", null));
    834834                out.write("\">");
    835                 out.write(toThemeImg("control_rewind_blue", _t("First"), _t("First page")));
     835                out.write(toThemeImg("first", _t("First"), _t("First page")));
    836836                out.write("</a>&nbsp;");
    837837                int prev = Math.max(0, start - pageSize);
     
    843843                    out.write(getQueryString(req, null, sprev, null));
    844844                    out.write("\">");
    845                     out.write(toThemeImg("control_back_blue", _t("Prev"), _t("Previous page")));
     845                    out.write(toThemeImg("previous", _t("Prev"), _t("Previous page")));
    846846                    out.write("</a>&nbsp;");
    847847                }
     
    849849                out.write(
    850850                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    851                           _imgPath + "control_rewind_blue.png\">" +
     851                          _imgPath + "first.png\">" +
    852852                          "&nbsp;" +
    853853                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    854                           _imgPath + "control_back_blue.png\">" +
     854                          _imgPath + "previous.png\">" +
    855855                          "&nbsp;");
    856856            }
     
    876876                    out.write(getQueryString(req, null, Integer.toString(next), null));
    877877                    out.write("\">");
    878                     out.write(toThemeImg("control_play_blue", _t("Next"), _t("Next page")));
     878                    out.write(toThemeImg("next", _t("Next"), _t("Next page")));
    879879                    out.write("</a>&nbsp;");
    880880                }
     
    884884                out.write(getQueryString(req, null, Integer.toString(last), null));
    885885                out.write("\">");
    886                 out.write(toThemeImg("control_fastforward_blue", _t("Last"), _t("Last page")));
     886                out.write(toThemeImg("last", _t("Last"), _t("Last page")));
    887887                out.write("</a>&nbsp;");
    888888            } else {
    889889                out.write("&nbsp;" +
    890890                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    891                           _imgPath + "control_play_blue.png\">" +
     891                          _imgPath + "next.png\">" +
    892892                          "&nbsp;" +
    893893                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    894                           _imgPath + "control_fastforward_blue.png\">");
     894                          _imgPath + "last.png\">");
    895895            }
    896896    }
     
    20722072        out.write("<form action=\"_post\" method=\"POST\">\n");
    20732073        writeHiddenInputs(out, req, "Add");
    2074         out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">");
     2074        out.write("<div class=\"addtorrentsection\">");
     2075        out.write("<input class=\"toggle_input\" id=\"toggle_addtorrent\" type=\"checkbox\"><label class=\"toggleview\" for=\"toggle_addtorrent\">");
    20752076        out.write(toThemeImg("add"));
    20762077        out.write(' ');
    20772078        out.write(_t("Add Torrent"));
    2078 
    2079         out.write("</span><hr>\n<table border=\"0\"><tr><td>");
     2079        out.write("</label>");
     2080
     2081        out.write("<hr>\n<table border=\"0\"><tr><td>");
    20802082        out.write(_t("From URL"));
    20812083        out.write(":<td><input type=\"text\" name=\"nofilter_newURL\" size=\"85\" value=\"" + newURL + "\" spellcheck=\"false\"");
    20822084        out.write(" title=\"");
    20832085        out.write(_t("Enter the torrent file download URL (I2P only), magnet link, maggot link, or info hash"));
    2084         out.write("\"> \n");
     2086        out.write("\">\n");
    20852087        // not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
    20862088        //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>");
     
    20882090        out.write(_t("Add torrent"));
    20892091        out.write("\" name=\"foo\" ><br>\n" +
    2090 
    20912092                  "<tr><td>");
     2093
    20922094        out.write(_t("Data dir"));
    20932095        out.write(":<td><input type=\"text\" name=\"nofilter_newDir\" size=\"85\" value=\"\" spellcheck=\"false\"");
     
    21032105        out.write("</div></form></div>"); 
    21042106    }
    2105    
     2107
    21062108    private void writeSeedForm(PrintWriter out, HttpServletRequest req, List<Tracker> sortedTrackers) throws IOException {
    21072109        out.write("<a name=\"add\"></a><div class=\"newtorrentsection\"><div class=\"snarkNewTorrent\">\n");
     
    21092111        out.write("<form action=\"_post\" method=\"POST\">\n");
    21102112        writeHiddenInputs(out, req, "Create");
    2111         out.write("<span class=\"snarkConfigTitle\">");
     2113        out.write("<input class=\"toggle_input\" id=\"toggle_createtorrent\" type=\"checkbox\"><label class=\"toggleview\" for=\"toggle_createtorrent\">");
    21122114        out.write(toThemeImg("create"));
    21132115        out.write(' ');
    21142116        out.write(_t("Create Torrent"));
    2115         out.write("</span><hr>\n<table border=\"0\"><tr><td>");
     2117        out.write("</label><hr>\n<table border=\"0\"><tr><td>");
    21162118        //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
    21172119        out.write(_t("Data to seed"));
     
    21212123        out.write(_t("File or directory to seed (full path or within the directory {0} )",
    21222124                    _manager.getDataDir().getAbsolutePath() + File.separatorChar));
    2123         out.write("\" ><tr><td>\n");
     2125        out.write("\" > <input type=\"submit\" class=\"create\" value=\"");
     2126        out.write(_t("Create torrent"));
     2127        out.write("\" name=\"foo\" >");
     2128        out.write("<tr><td>\n");
    21242129        out.write(_t("Trackers"));
    2125         out.write(":<td><table style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
     2130        out.write(":<td><table id=\"trackerselect\" style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
    21262131        out.write(_t("Primary"));
    21272132        out.write("</td><td align=\"center\">");
    21282133        out.write(_t("Alternates"));
    2129         out.write("</td><td rowspan=\"0\">" +
    2130                   " <input type=\"submit\" class=\"create\" value=\"");
    2131         out.write(_t("Create torrent"));
    2132         out.write("\" name=\"foo\" >" +
    2133                   "</td></tr>\n");
     2134        out.write("</td><td>");
     2135        out.write(_t("Tracker URL"));
     2136        out.write("</td></tr>\n");
     2137
    21342138        for (Tracker t : sortedTrackers) {
    21352139            String name = t.name;
    21362140            String announceURL = t.announceURL.replace("&#61;", "=");
     2141            String homeURL = t.baseURL;
    21372142            out.write("<tr><td>");
    21382143            out.write(name);
     
    21442149            out.write("></td><td align=\"center\"><input type=\"checkbox\" name=\"backup_");
    21452150            out.write(announceURL);
    2146             out.write("\" value=\"foo\"></td></tr>\n");
     2151            out.write("\" value=\"foo\"></td><td><a href=\"");
     2152            out.write(homeURL);
     2153            out.write("\">");
     2154            out.write(homeURL);
     2155            out.write("</a></td></tr>\n");
    21472156        }
    21482157        out.write("<tr><td><i>");
     
    21512160        if (_lastAnnounceURL == null)
    21522161            out.write(" checked");
    2153         out.write("></td><td></td></tr></table>\n");
     2162        out.write("></td><td></td><td></td></tr></table>\n");
    21542163        // make the user add a tracker on the config form now
    21552164        //out.write(_t("or"));
     
    23942403        buf.append(_t("Trackers"));
    23952404        buf.append("</span><hr>\n"   +
    2396                    "<table class=\"trackerconfig\"><tr><th>")
     2405                   "<table class=\"trackerconfig\"><tr><th title=\"")
     2406            .append(_t("Select trackers for removal from I2PSnark's known list"))
    23972407           //.append(_t("Remove"))
    2398            .append("</th><th>")
     2408           .append("\"></th><th>")
    23992409           .append(_t("Name"))
    24002410           .append("</th><th>")
     
    24192429            boolean isOpen = isKnownOpen || openTrackers.contains(t.announceURL);
    24202430            buf.append("<tr><td><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
    2421                .append(name).append("\" title=\"").append(_t("Delete")).append("\">" +
     2431               .append(name).append("\" title=\"").append(_t("Mark tracker for deletion")).append("\">" +
    24222432                       "</td><td>").append(name)
    24232433               .append("</td><td>").append(urlify(homeURL, 35))
     
    33153325                 mime.equals("text/x-sfv") ||
    33163326                 mime.equals("application/rtf") ||
    3317                  mime.equals("application/epub+zip") ||
    3318                  mime.equals("application/x-mobipocket-ebook") ||
    33193327                 plc.endsWith(".azw4"))
    33203328            icon = "page";
     3329        else if  (mime.equals("application/epub+zip") ||
     3330                 mime.equals("application/x-mobipocket-ebook"))
     3331            icon = "ebook";
    33213332        else if (mime.equals("application/java-archive") ||
    33223333                 plc.endsWith(".deb"))
     
    33443355        else if (plc.endsWith(".exe"))
    33453356            icon = "application";
    3346         else if (plc.endsWith(".iso"))
     3357        else if (plc.endsWith(".iso") || plc.endsWith(".nrg"))
    33473358            icon = "cd";
    33483359        else if (mime.equals("application/x-bittorrent"))
  • apps/i2ptunnel/jsp/editClient.jsp

    r2d8f0c2 r50450ec  
    2424    <% if (editBean.allowCSS()) {
    2525  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
    26     <link href="<%=editBean.getTheme()%>default.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
    27     <link href="<%=editBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
     26    <link href="<%=editBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
    2827    <% }
    2928  %>
     
    3332</head>
    3433<body id="tunnelEditPage">
    35     <div id="pageHeader">
    36     </div>
     34
    3735<%
    3836
     
    4240    <form method="post" action="list">
    4341
    44         <div id="tunnelEditPanel" class="panel">
    45             <div class="header">
     42        <div class="panel">
    4643                <%
    4744                String tunnelTypeName;
     
    5047                    tunnelTypeName = editBean.getTunnelType(curTunnel);
    5148                    tunnelType = editBean.getInternalType(curTunnel);
    52                   %><h4><%=intl._t("Edit proxy settings")%></h4><%
     49                  %><h2><%=intl._t("Edit proxy settings")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><%
    5350                } else {
    5451                    tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
    5552                    tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type"));
    56                   %><h4><%=intl._t("New proxy settings")%></h4><%
     53                  %><h2><%=intl._t("New proxy settings")%></h2><%
    5754                } %>
    5855                <input type="hidden" name="tunnel" value="<%=curTunnel%>" />
     
    8077                <% } %>
    8178                <input type="submit" class="default" name="action" value="Save changes" />
    82             </div>
    83      
    84             <div class="separator">
    85                 <hr />
    86             </div>
    87 
    88             <div id="nameField" class="rowItem">
    89                 <label for="name" accesskey="N">
    90                     <%=intl._t("Name")%>:(<span class="accessKey">N</span>)
    91                 </label>
    92                 <input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext" />               
    93             </div>
    94             <div id="typeField" class="rowItem">
    95                 <label><%=intl._t("Type")%>:</label>
    96                 <span class="text"><%=tunnelTypeName%></span>
    97             </div>
    98             <div id="descriptionField" class="rowItem">
    99                 <label for="description" accesskey="e">
    100                     <%=intl._t("Description")%>:(<span class="accessKey">E</span>)
    101                 </label>
    102                 <input type="text" size="60" maxlength="80" name="nofilter_description"  id="description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext" />               
    103             </div>
    104                  
    105             <div class="subdivider">
    106                 <hr />
    107             </div>
    108                  
    109             <div id="accessField" class="rowItem">
     79
     80    <table id="clientTunnelEdit" class="tunnelConfig">
     81        <tr>
     82            <th>
     83                <%=intl._t("Name")%>
     84            </th>
     85            <th>
     86                <%=intl._t("Type")%>
     87            </th>
     88        </tr>
     89        <tr>
     90            <td>
     91                <input type="text" size="30" maxlength="50" name="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext tunnelName" />
     92            </td>
     93            <td>
     94                <%=tunnelTypeName%>
     95            </td>
     96        </tr>
     97
     98        <tr>
     99            <th>
     100                <%=intl._t("Description")%>
     101            </th>
     102
     103            <th>
     104                <%=intl._t("Auto Start Tunnel")%>
     105            </th>
     106        </tr>
     107
     108        <tr>
     109            <td>
     110                <input type="text" size="60" maxlength="80" name="nofilter_description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />
     111            </td>
     112
     113            <td>
     114                <input value="1" type="checkbox" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     115                <%=intl._t("Automatically start tunnel when router starts")%>
     116            </td>
     117        </tr>
     118
     119        <tr>
     120            <th colspan="2">
    110121         <% if ("streamrclient".equals(tunnelType)) { %>
    111                 <label><%=intl._t("Target")%>:</label>
     122                <%=intl._t("Target")%>
    112123         <% } else { %>
    113                 <label><%=intl._t("Access Point")%>:</label>
     124                <%=intl._t("Access Point")%>
    114125         <% } /* streamrclient */ %>
    115             </div>
    116             <div id="portField" class="rowItem">
    117                 <label for="port" accesskey="P">
    118                     <span class="accessKey">P</span>ort:
     126            </th>
     127        </tr>
     128        <tr>
     129            <td>
     130                <b><%=intl._t("Port")%>:</b>
    119131                    <% String value = editBean.getClientPort(curTunnel);
    120132                       if (value == null || "".equals(value.trim())) {
    121                            out.write(" <font color=\"red\">(");
     133                           out.write(" <span class=\"required\"><font color=\"red\">(");
    122134                           out.write(intl._t("required"));
    123                            out.write(")</font>");
     135                           out.write(")</font></span>");
    124136                       }
    125137                     %>
    126                 </label>
    127                 <input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext" />               
    128             </div>
    129             <div id="reachField" class="rowItem">
    130                 <label for="reachableBy" accesskey="r">
     138                <input type="text" size="6" maxlength="5" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext port" placeholder="required" />
     139            </td>
     140
    131141         <%
    132             if ("streamrclient".equals(tunnelType)) {
    133                        out.write("Host:");
     142            if ("streamrclient".equals(tunnelType)) { %>
     143            <td>
     144                <b><%=intl._t("Host")%>:</b>
     145                    <%
    134146                       String targetHost = editBean.getTargetHost(curTunnel);
    135147                       if (targetHost == null || "".equals(targetHost.trim())) {
    136                            out.write(" <font color=\"red\">(");
     148                           out.write(" <span class=\"required\"><font color=\"red\">(");
    137149                           out.write(intl._t("required"));
    138                            out.write(")</font>");
     150                           out.write(")</font></span>");
    139151                       }   
    140152          %>
    141                 </label>
    142                 <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=targetHost%>" class="freetext" />               
     153
     154                <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=targetHost%>" class="freetext host" placeholder="required" />
     155            </td>
    143156         <% } else { %>
    144                     <%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
    145                 </label>
     157
     158            <td>
     159                <b><%=intl._t("Reachable by")%>:</b>
     160
    146161                <select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
    147162              <%
     
    159174              %>
    160175                </select>               
     176            </td>
    161177         <% } /* streamrclient */ %>
    162             </div>
     178        </tr>
     179
    163180         <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType)) {
    164           %><div id="portField" class="rowItem">
    165                 <label>
     181          %>                   
     182        <tr>
     183            <th colspan="2">
    166184                    <%=intl._t("Use SSL?")%>
    167                 </label>
    168                 <input value="1" type="checkbox" id="startOnLoad" name="useSSL" title="Clients use SSL to connect" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    169             </div>
     185            </th>
     186        </tr>
     187        <tr>
     188            <td colspan="2">
     189                <input value="1" type="checkbox" name="useSSL" title="Clients use SSL to connect" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     190                <%=intl._t("Clients use SSL to connect to tunnel")%>
     191            </td>
     192        </tr>
    170193         <% } /* tunnel types */ %>
    171194
    172             <div class="subdivider">
    173                 <hr />
    174             </div>
    175            
    176195            <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) {
    177           %><div id="destinationField" class="rowItem">
    178                 <label for="proxyList" accesskey="x">
    179                     <%=intl._t("Outproxies")%>(<span class="accessKey">x</span>):
    180                 </label>
    181                 <input type="text" size="30" id="proxyList" name="proxyList" title="List of Outproxy I2P destinations" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext" />               
    182             </div>
     196          %>
     197        <tr>
     198            <th colspan="2">
     199                    <%=intl._t("Outproxies")%>
     200            </th>
     201        </tr>
     202        <tr>
     203            <td colspan="2">
     204                <input type="text" size="30" name="proxyList" title="List of Outproxy I2P destinations" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext proxyList" />&nbsp;(<%=intl._t("comma separated eg. proxy1.i2p,proxy2.i2p")%>)
     205            </td>
     206        </tr>
     207
    183208              <% if ("httpclient".equals(tunnelType)) {
    184                  %><div id="destinationField" class="rowItem">
    185                    <label>
    186                        <%=intl._t("SSL Outproxies")%>:
    187                    </label>
    188                    <input type="text" size="30" id="sslProxyList" name="sslProxies" title="List of Outproxy I2P destinations" value="<%=editBean.getSslProxies(curTunnel)%>" class="freetext" />               
    189                    </div>
     209                 %>
     210        <tr>
     211            <th colspan="2">
     212                       <%=intl._t("SSL Outproxies")%>
     213            </th>
     214        </tr>
     215        <tr>
     216            <td colspan="2">
     217                   <input type="text" size="30" name="sslProxies" title="List of Outproxy I2P destinations" value="<%=editBean.getSslProxies(curTunnel)%>" class="freetext proxyList" />
     218            </td>
     219        </tr>
     220
    190221              <% }  // httpclient %>
    191             <div id="startupField" class="rowItem">
    192                 <label>
    193                     <%=intl._t("Use Outproxy Plugin")%>:
    194                 </label>
    195                 <input value="1" type="checkbox" id="shared" name="useOutproxyPlugin" title="Use plugin instead of above-listed proxies if available"<%=(editBean.getUseOutproxyPlugin(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    196                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    197             </div>
     222        <tr>
     223            <th colspan="2">
     224                    <%=intl._t("Use Outproxy Plugin")%>
     225
     226            </th>
     227        </tr>
     228        <tr>
     229            <td colspan="2">
     230
     231                <input value="1" type="checkbox" name="useOutproxyPlugin" <%=(editBean.getUseOutproxyPlugin(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     232<%=intl._t("Use plugin instead of above-listed proxies if available")%>
     233            </td>
     234        </tr>
    198235            <% } else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) {
    199           %><div id="destinationField" class="rowItem">
    200                 <label for="targetDestination" accesskey="T">
    201                     <%=intl._t("Tunnel Destination")%>(<span class="accessKey">T</span>):
     236          %>
     237        <tr>
     238            <th colspan="2">
     239                    <%=intl._t("Tunnel Destination")%>
     240            </th>
     241        </tr>
     242        <tr>
     243            <td colspan="2">
    202244                    <% String value2 = editBean.getClientDestination(curTunnel);
    203245                       if (value2 == null || "".equals(value2.trim())) {
    204                            out.write(" <font color=\"red\">(");
     246                           out.write(" <span class=\"required\"><font color=\"red\">(");
    205247                           out.write(intl._t("required"));
    206                            out.write(")</font>");
     248                           out.write(")</font></span>");
    207249                       }   
    208250                     %>
    209                 </label>
    210                 <input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext" />               
    211                 <span class="comment">(<%=intl._t("name, name:port, or destination")%>
     251
     252                <input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext destination" placeholder="required" />
     253                (<%=intl._t("name, name:port, or destination")%>
    212254                     <% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
    213255                         - <%=intl._t("b32 not recommended")%>
    214256                     <% } %> )
    215                 </span>
    216             </div>
     257            </td>
     258        </tr>
     259
    217260         <% } %>
     261
    218262         <% if (!"streamrclient".equals(tunnelType)) { %>
    219             <div id="sharedtField" class="rowItem">
    220                 <label for="shared" accesskey="h">
    221                     <%=intl._t("Shared Client")%>(<span class="accessKey">h</span>):
    222                 </label>
    223                 <input value="true" type="checkbox" id="shared" name="shared" title="Share tunnels with other clients"<%=(editBean.isSharedClient(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    224                 <span class="comment"><%=intl._t("(Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy)")%></span>
    225             </div>
     263        <tr>
     264            <th colspan="2">
     265                <%=intl._t("Shared Client")%>
     266            </th>
     267        </tr>
     268        <tr>
     269            <td colspan="2">
     270                <input value="true" type="checkbox" name="shared" title="Share tunnels with other clients"<%=(editBean.isSharedClient(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     271                <%=intl._t("Share tunnels with other clients and irc/httpclients? (Change requires restart of client proxy tunnel)")%>
     272            </td>
     273        </tr>
     274
    226275         <% } // !streamrclient %>
    227             <div id="startupField" class="rowItem">
    228                 <label for="startOnLoad" accesskey="a">
    229                     <%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
    230                 </label>
    231                 <input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    232                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    233             </div>
     276
    234277         <% if ("ircclient".equals(tunnelType)) { %>
    235             <div id="startupField" class="rowItem">
    236                 <label for="dcc" accesskey="d">
    237                     <%=intl._t("Enable DCC")%>:
    238                 </label>
    239                 <input value="1" type="checkbox" id="startOnLoad" name="DCC" title="Enable DCC"<%=(editBean.getDCC(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    240                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    241             </div>
     278        <tr>
     279            <th colspan="2">
     280                    <%=intl._t("Enable DCC")%>
     281            </th>
     282        </tr>
     283        <tr>
     284            <td colspan="2">
     285                <input value="1" type="checkbox" name="DCC" title="Enable DCC"<%=(editBean.getDCC(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     286                <%=intl._t("Enable Direct Client-to-Client protocol. Note that this will compromise your anonymity and is <i>not</i> recommended.")%>
     287            </td>
     288        </tr>
     289
    242290         <% } // ircclient %>
    243            
    244             <div class="footer">
    245             </div>
    246         </div>
    247 
    248         <div id="tunnelAdvancedNetworking" class="panel">
    249             <div class="header">
    250                 <h4><%=intl._t("Advanced networking options")%></h4><br />
    251                 <span class="comment"><%=intl._t("(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)")%></span>
    252             </div>
    253 
    254             <div class="separator">
    255                 <hr />
    256             </div>
    257            
    258             <div id="tunnelOptionsField" class="rowItem">
    259                 <label><%=intl._t("Tunnel Options")%>:</label>
    260             </div>
    261             <div id="depthField" class="rowItem">
    262                 <label for="tunnelDepth" accesskey="t">
    263                     <%=intl._t("Length")%>(<span class="accessKey">t</span>):
    264                 </label>
     291    </table>
     292
     293    <h3><%=intl._t("Advanced Networking Options")%></h3>
     294
     295    <table class="tunnelConfig">
     296
     297
     298<% if (!"streamrclient".equals(tunnelType)) { %> <% // no shared client tunnels for streamr %>
     299        <tr>
     300            <td class="infohelp" colspan="2">
     301                <%=intl._t("Note: When this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!")%>
     302            </td>
     303        </tr>
     304         <% } // !streamrclient %>
     305        <tr>
     306            <th colspan="2">
     307                <%=intl._t("Tunnel Options")%>
     308            </th>
     309        </tr>
     310        <tr>
     311            <td>
     312                <b><%=intl._t("Length")%></b>
     313            </td>
     314
     315            <td>
     316                <b><%=intl._t("Variance")%></b>
     317            </td>
     318        </tr>
     319
     320        <tr>
     321            <td>
    265322                <select id="tunnelDepth" name="tunnelDepth" title="Length of each Tunnel" class="selectbox">
    266323                    <% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
     
    278335                <% }
    279336              %></select>
    280             </div>
    281             <div id="varianceField" class="rowItem">
    282                 <label for="tunnelVariance" accesskey="v">
    283                     <%=intl._t("Variance")%>(<span class="accessKey">V</span>):
    284                 </label>
     337            </td>
     338
     339            <td>
    285340                <select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Length" class="selectbox">
    286341                    <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
     
    293348                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._t("hop variance")%></option>
    294349                <% }
    295               %></select>               
    296             </div>               
    297             <div id="countField" class="rowItem">
    298                 <label for="tunnelQuantity" accesskey="C">
    299                     <%=intl._t("Count")%>(<span class="accessKey">C</span>):
    300                 </label>
     350              %></select>
     351            </td>
     352        </tr>
     353        <tr>
     354            <td>
     355                <b><%=intl._t("Count")%></b>
     356            </td>
     357
     358            <td>
     359                <b><%=intl._t("Backup Count")%></b>
     360            </td>
     361        </tr>
     362
     363        <tr>
     364            <td>
    301365                <select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
    302366                    <%=editBean.getQuantityOptions(curTunnel)%>
    303                 </select>               
    304             </div>
    305             <div id="backupField" class="rowItem">
    306                 <label for="tunnelBackupQuantity" accesskey="b">
    307                     <%=intl._t("Backup Count")%>(<span class="accessKey">B</span>):
    308                 </label>
     367                </select>
     368            </td>
     369
     370            <td>
    309371                <select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
    310372                    <% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
     
    316378                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._t("backup tunnels")%></option>
    317379                <% }
    318               %></select>               
    319             </div>
     380              %></select>
     381            </td>
     382        </tr>
    320383                           
    321             <div class="subdivider">
    322                 <hr />
    323             </div>
    324384
    325385         <% if (!"streamrclient".equals(tunnelType)) { %>
    326             <div id="profileField" class="rowItem">
    327                 <label for="profile" accesskey="f">
    328                     <%=intl._t("Profile")%>(<span class="accessKey">f</span>):
    329                 </label>
    330                 <select id="profile" name="profile" title="Connection Profile" class="selectbox">
     386        <tr>
     387            <th>
     388                <%=intl._t("Profile")%>
     389            </th>
     390
     391            <th>
     392                <%=intl._t("Delay Connect")%>
     393            </th>
     394
     395        </tr>
     396
     397        <tr>
     398            <td>
     399                <select id="connectionProfile" name="profile" title="Connection Profile" class="selectbox">
    331400                    <% boolean interactiveProfile = editBean.isInteractive(curTunnel);
    332401                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
    333402                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
    334403                </select>               
    335             </div>
    336             <div id="delayConnectField" class="rowItem">
    337                 <label for="connectDelay" accesskey="y">
    338                     <%=intl._t("Delay Connect")%>(<span class="accessKey">y</span>):
    339                 </label>
    340                 <input value="1000" type="checkbox" id="connectDelay" name="connectDelay" title="Delay Connection"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    341                 <span class="comment">(<%=intl._t("for request/response connections")%>)</span>
    342             </div>
    343 
    344             <div class="subdivider">
    345                 <hr />
    346             </div>
     404            </td>
     405
     406            <td>
     407                <input value="1000" type="checkbox" name="connectDelay" title="Delay Connection"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     408                (<%=intl._t("for request/response connections")%>)
     409            </td>
     410        </tr>
    347411         <% } // !streamrclient %>
    348412
    349             <div id="optionsField" class="rowItem">
    350                 <label><%=intl._t("Router I2CP Address")%>:</label>
    351             </div>
    352             <div id="optionsHostField" class="rowItem">
    353                 <label for="clientHost" accesskey="o">
    354                     <%=intl._t("Host")%>(<span class="accessKey">o</span>):
    355                 </label>
    356                 <input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />               
    357             </div>
    358             <div id="optionsPortField" class="rowItem">
    359                 <label for="clientPort" accesskey="r">
    360                     <%=intl._t("Port")%>(<span class="accessKey">r</span>):
    361                 </label>
    362                 <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />               
    363             </div>
     413        <tr>
     414            <th colspan="2">
     415                <%=intl._t("Router I2CP Address")%>
     416            </th>
     417        </tr>
     418
     419        <tr>
     420            <td>
     421                <b><%=intl._t("Host")%>:</b>
     422                <input type="text" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext host" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
     423            </td>
     424
     425
     426            <td>
     427                <b><%=intl._t("Port")%>:</b>
     428                <input type="text" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext port" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
     429            </td>
     430        </tr>
    364431                 
    365432         <% if (!"streamrclient".equals(tunnelType)) { // streamr client sends pings so it will never be idle %>
    366             <div class="subdivider">
    367                 <hr />
    368             </div>
    369 
    370             <div id="optionsField" class="rowItem">
    371                 <label for="reduce" accesskey="c">
    372                     <%=intl._t("Delay tunnel open until required")%>(<span class="accessKey">D</span>):
    373                 </label>
    374             </div>
    375             <div id="portField" class="rowItem">
    376                 <label for="access" accesskey="c">
    377                     <%=intl._t("Enable")%>:
    378                 </label>
    379                 <input value="1" type="checkbox" id="startOnLoad" name="delayOpen" title="Delay Tunnel Open"<%=(editBean.getDelayOpen(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    380             </div>
     433
     434        <tr>
     435            <th colspan="2">
     436                <%=intl._t("Delay tunnel open until required")%>
     437            </th>
     438        </tr>
     439
     440        <tr>
     441            <td colspan="2">
     442                <input value="1" type="checkbox" name="delayOpen" title="Delay Tunnel Open"<%=(editBean.getDelayOpen(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     443                <%=intl._t("Delay opening client tunnel until activity is detected on the configured tunnel port")%>
     444            </td>
     445        </tr>
     446
    381447         <% } // !streamrclient %>
    382448                 
    383             <div class="subdivider">
    384                 <hr />
    385             </div>
    386            
    387             <div id="optionsField" class="rowItem">
    388                 <label for="reduce" accesskey="d">
    389                     <%=intl._t("Reduce tunnel quantity when idle")%>(<span class="accessKey">d</span>):
    390                 </label>
    391             </div>
    392             <div id="portField" class="rowItem">
    393                 <label for="access" accesskey="d">
    394                     <%=intl._t("Enable")%>:
    395                 </label>
    396                 <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    397             </div>
    398             <div id="portField" class="rowItem">
    399                 <label for="reduceCount" accesskey="d">
    400                     <%=intl._t("Reduced tunnel count")%>:
    401                 </label>
    402                 <input type="text" id="port" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext" />               
    403             </div>
    404             <div id="portField" class="rowItem">
    405                 <label for="reduceTime" accesskey="d">
    406                     <%=intl._t("Idle minutes")%>:
    407                 </label>
    408                 <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />               
    409             </div>
    410            
    411             <div class="subdivider">
    412                 <hr />
    413             </div>
    414            
    415             <div id="optionsField" class="rowItem">
    416                 <label for="reduce" accesskey="c">
    417                     <%=intl._t("Close tunnels when idle")%>(<span class="accessKey">C</span>):
    418                 </label>
    419             </div>
    420             <div id="portField" class="rowItem">
    421                 <label for="access" accesskey="c">
    422                     <%=intl._t("Enable")%>:
    423                 </label>
    424                 <input value="1" type="checkbox" id="startOnLoad" name="close" title="Close Tunnels"<%=(editBean.getClose(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    425             </div>
    426             <div id="portField" class="rowItem">
    427                 <label for="access" accesskey="c">
    428                     <%=intl._t("New Keys on Reopen")%>:
    429                 </label>
    430                 <table border="0"><tr><!-- I give up -->
    431                 <td><input value="1" type="radio" id="startOnLoad" name="newDest" title="New Destination"
    432                      <%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /></td>
    433                 <td><%=intl._t("Enable")%></td>
    434                 <td><input value="0" type="radio" id="startOnLoad" name="newDest" title="New Destination"
    435                      <%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" /></td>
    436                 <td><%=intl._t("Disable")%></td></tr>
    437                 </table>
    438             </div>
    439             <div id="portField" class="rowItem">
    440                 <label for="reduceTime" accesskey="c">
    441                     <%=intl._t("Idle minutes")%>:
    442                 </label>
    443                 <input type="text" id="port" name="closeTime" size="4" maxlength="4" title="Close Tunnel Idle Time" value="<%=editBean.getCloseTime(curTunnel)%>" class="freetext" />               
    444             </div>
    445                  
    446             <div class="subdivider">
    447                 <hr />
    448             </div>
     449        <tr>
     450            <th colspan="2">
     451                <%=intl._t("Reduce tunnel quantity when idle")%>
     452            </th>
     453        </tr>
     454
     455        <tr>
     456            <td colspan="2">
     457                <input value="1" type="checkbox" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     458                <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%>
     459            </td>
     460        </tr>
     461
     462        <tr>
     463            <td>
     464                <b><%=intl._t("Reduced tunnel count")%>:</b>
     465                <input type="text" id="reducedTunnelCount" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
     466            </td>
     467
     468            <td>
     469                <b><%=intl._t("Idle period")%>:</b>
     470                <input type="text" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
     471                minutes
     472            </td>
     473        </tr>
     474
     475        <tr>
     476            <th colspan="2">
     477                <%=intl._t("Close tunnels when idle")%>
     478            </th>
     479        </tr>
     480
     481        <tr>
     482            <td>
     483                <input value="1" type="checkbox" name="close" title="Close Tunnels"<%=(editBean.getClose(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     484                <%=intl._t("Close client tunnels after specified idle period")%>
     485            </td>
     486
     487            <td>
     488                <b><%=intl._t("Idle period")%>:</b>
     489                <input type="text" name="closeTime" size="4" maxlength="4" title="Close Tunnel Idle Time" value="<%=editBean.getCloseTime(curTunnel)%>" class="freetext period" />   
     490                minutes
     491            </td>
     492        </tr>
     493
     494        <tr>
     495            <td colspan="2">
     496                <b><%=intl._t("New Keys on Reopen")%>:</b>
     497                <span class="multiOption">
     498                    <input value="1" type="radio" name="newDest" title="New Destination"
     499                        <%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     500                    <%=intl._t("Enable")%>
     501                </span>
     502                <span class="multiOption">
     503                    <input value="0" type="radio" name="newDest" title="New Destination"
     504                        <%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" />
     505                    <%=intl._t("Disable")%>
     506                </span>
     507            </td>
     508        </tr>
    449509
    450510         <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "socksirctunnel".equals(tunnelType) || "sockstunnel".equals(tunnelType)) { %>
    451             <div id="optionsField" class="rowItem">
    452                 <label for="privKeyFile" accesskey="k">
    453                     <%=intl._t("Persistent private key")%>(<span class="accessKey">k</span>):
    454                 </label>
    455             </div>
    456             <div id="portField" class="rowItem">
    457                 <label><%=intl._t("Enable")%>:</label>
    458                 <input value="2" type="radio" id="startOnLoad" name="newDest" title="New Destination"
    459                      <%=(editBean.getPersistentClientKey(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    460             </div>
    461             <div id="reachField" class="rowItem">
    462                 <label><%=intl._t("File")%>:</label>
    463                 <input type="text" size="30" id="clientHost" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />               
    464             </div>
     511
     512        <tr>
     513            <th colspan="2">
     514                <%=intl._t("Persistent private key")%>
     515            </th>
     516        </tr>
     517        <tr>
     518            <td>
     519                <input value="2" type="radio" name="newDest" title="New Destination"
     520                     <%=(editBean.getPersistentClientKey(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     521                <%=intl._t("Generate key to enable persistent client tunnel identity")%>
     522            </td>
     523            <td>
     524                <b><%=intl._t("File")%>:</b>
     525                <input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />
     526            </td>
     527        </tr>
    465528         <%
    466529            String destb64 = editBean.getDestinationBase64(curTunnel);     
    467530            if (destb64.length() > 0) {
    468            %>   <div id="destinationField" class="rowItem">
    469                     <label for="localDestination" accesskey="L">
    470                         <%=intl._t("Local destination")%>(<span class="accessKey">L</span>):
    471                     </label>
    472                     <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=destb64%></textarea>               
    473                 </div>
    474                 <div id="destinationField" class="rowItem">
    475                     <label><%=intl._t("Local Base 32")%>:</label>
    476                     <%=editBean.getDestHashBase32(curTunnel)%>
    477                 </div>
     531           %>   
     532
     533        <tr>
     534            <td colspan="2">
     535                <b><%=intl._t("Local destination")%></b>
     536            </td>
     537        </tr>
     538        <tr>
     539            <td colspan="2">
     540                    <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=destb64%></textarea>
     541            </td>
     542        </tr>
     543
     544        <tr>
     545            <td colspan="2">
     546                <b><%=intl._t("Local Base 32")%>:</b>
     547                <%=editBean.getDestHashBase32(curTunnel)%>
     548            </td>
     549        </tr>
    478550         <% } // if destb64  %>
    479 
    480             <div class="subdivider">
    481                 <hr />
    482             </div>
    483551         <% } %>
    484552
    485553         <% if ("httpclient".equals(tunnelType)) { %>
    486             <div id="optionsField" class="rowItem">
    487                 <label><%=intl._t("Pass User-Agent header through")%>:</label>
    488             </div>
    489             <div id="portField" class="rowItem">
    490                 <label><%=intl._t("Enable")%>:</label>
    491                 <input value="1" type="checkbox" id="startOnLoad" name="allowUserAgent" title="Do not spoof user agent string when checked"<%=(editBean.getAllowUserAgent(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    492             </div><br />
    493             <div id="optionsField" class="rowItem">
    494                 <label><%=intl._t("Pass Referer header through")%>:</label>
    495             </div>
    496             <div id="portField" class="rowItem">
    497                 <label><%=intl._t("Enable")%>:</label>
    498                 <input value="1" type="checkbox" id="startOnLoad" name="allowReferer" title="Do not block referer header when checked"<%=(editBean.getAllowReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    499             </div><br />
    500             <div id="optionsField" class="rowItem">
    501                 <label><%=intl._t("Pass Accept headers through")%>:</label>
    502             </div>
    503             <div id="portField" class="rowItem">
    504                 <label><%=intl._t("Enable")%>:</label>
    505                 <input value="1" type="checkbox" id="startOnLoad" name="allowAccept" title="Do not block accept headers when checked"<%=(editBean.getAllowAccept(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    506             </div><br />
    507             <div id="optionsField" class="rowItem">
    508                 <label><%=intl._t("Allow SSL to I2P addresses")%>:</label>
    509             </div>
    510             <div id="portField" class="rowItem">
    511                 <label><%=intl._t("Enable")%>:</label>
    512                 <input value="1" type="checkbox" id="startOnLoad" name="allowInternalSSL" title="Allow SSL to I2P addresses when checked"<%=(editBean.getAllowInternalSSL(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    513             </div>
    514             <div class="subdivider">
    515                 <hr />
    516             </div>
     554
     555        <tr>
     556            <th colspan="2">
     557                <%=intl._t("HTTP Filtering")%>
     558            </th>
     559        </tr>
     560
     561        <tr>
     562            <td>
     563                <input value="1" type="checkbox" name="allowUserAgent" title="Do not spoof user agent string when checked"<%=(editBean.getAllowUserAgent(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     564                <%=intl._t("Do not spoof User-Agent header")%>
     565            </td>
     566            <td>
     567                <input value="1" type="checkbox" name="allowReferer" title="Do not block referer header when checked"<%=(editBean.getAllowReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     568                <%=intl._t("Do not block Referer header")%>
     569            </td>
     570        </tr>
     571
     572        <tr>
     573            <td>
     574                <input value="1" type="checkbox" name="allowAccept" title="Do not block accept headers when checked"<%=(editBean.getAllowAccept(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     575<%=intl._t("Do not block Accept headers")%>
     576            </td>
     577
     578            <td>
     579                <input value="1" type="checkbox" name="allowInternalSSL" title="Allow SSL to I2P addresses when checked"<%=(editBean.getAllowInternalSSL(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     580                <%=intl._t("Allow SSL to I2P addresses")%>
     581            </td>
     582        </tr>
    517583         <% } // if httpclient %>
    518            
     584
    519585         <% if (true /* editBean.isAdvanced() */ ) {
    520586                int currentSigType = editBean.getSigType(curTunnel, tunnelType);
    521587           %>
    522             <div id="tunnelOptionsField" class="rowItem">
    523                 <label>
    524                     <%=intl._t("Signature type")%>
    525                     (<%=intl._t("Experts only!")%>)
    526                 </label>
    527             </div>
    528             <div id="hostField" class="rowItem">
    529               <div id="portField" class="rowItem">
    530                 <label>DSA-SHA1</label>
    531                 <input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    532               </div>
     588        <tr>
     589            <th colspan="2">
     590                <%=intl._t("Signature type")%> (<%=intl._t("Experts only!")%>)
     591            </th>
     592        </tr>
     593
     594        <tr>
     595            <td colspan="2">
     596                <span class="multiOption">
     597                    <input value="0" type="radio" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
     598                    DSA-SHA1
     599                </span>
     600
     601
    533602           <% if (editBean.isSigTypeAvailable(1)) { %>
    534               <div id="portField" class="rowItem">
    535                 <label>ECDSA-P256</label>
    536                 <input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    537               </div>
     603
     604                <span class="multiOption">
     605                    <input value="1" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
     606                    ECDSA-P256
     607                </span>
     608
     609
    538610           <% }
     611
    539612              if (editBean.isSigTypeAvailable(2)) { %>
    540               <div id="portField" class="rowItem">
    541                 <label>ECDSA-P384</label>
    542                 <input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    543               </div>
     613
     614                <span class="multiOption">
     615                    <input value="2" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
     616                    ECDSA-P384
     617                </span>
     618
    544619           <% }
    545620              if (editBean.isSigTypeAvailable(3)) { %>
    546               <div id="portField" class="rowItem">
    547                 <label>ECDSA-P521</label>
    548                 <input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    549               </div>
     621
     622                <span class="multiOption">
     623                    <input value="3" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
     624                    ECDSA-P521
     625                </span>
     626
     627
    550628           <% }
    551629              if (editBean.isSigTypeAvailable(7)) { %>
    552               <div id="portField" class="rowItem">
    553                 <label>Ed25519-SHA-512</label>
    554                 <input value="7" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    555               </div>
     630
     631                <span class="multiOption">
     632                    <input value="7" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
     633                    Ed25519-SHA-512
     634                </span>
     635            </td>
     636        </tr>
    556637           <% }   // isAvailable %>
    557             </div>
    558                  
    559             <div class="subdivider">
    560                 <hr />
    561             </div>
     638         
    562639         <% } // isAdvanced %>
    563640
    564641         <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %>
    565             <div id="accessField" class="rowItem">
    566                 <label><%=intl._t("Local Authorization")%>:</label>
    567             </div>
    568             <div id="portField" class="rowItem">
    569                 <label>
    570                     <%=intl._t("Enable")%>:
    571                 </label>
    572                 <input value="1" type="checkbox" id="startOnLoad" name="proxyAuth" title="Check to require authorization for this service"<%=(editBean.getProxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    573             </div>
    574             <div id="portField" class="rowItem">
    575                 <label>
    576                     <%=intl._t("Username")%>:
    577                 </label>
    578                 <input type="text" id="clientPort" name="proxyUsername" title="Set username for this service" value="" class="freetext" />               
    579             </div>
    580             <div id="portField" class="rowItem">
    581                 <label>
    582                     <%=intl._t("Password")%>:
    583                 </label>
    584                 <input type="password" id="clientPort" name="nofilter_proxyPassword" title="Set password for this service" value="" class="freetext" />               
    585             </div>
    586             <div class="subdivider">
    587                 <hr />
    588             </div>
    589             <div id="accessField" class="rowItem">
    590                 <label><%=intl._t("Outproxy Authorization")%>:</label>
    591             </div>
    592             <div id="portField" class="rowItem">
    593                 <label>
    594                     <%=intl._t("Enable")%>:
    595                 </label>
    596                 <input value="1" type="checkbox" id="startOnLoad" name="outproxyAuth" title="Check if the outproxy requires authorization"<%=(editBean.getOutproxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    597             </div>
    598             <div id="portField" class="rowItem">
    599                 <label>
    600                     <%=intl._t("Username")%>:
    601                 </label>
    602                 <input type="text" id="clientPort" name="outproxyUsername" title="Enter username required by outproxy" value="<%=editBean.getOutproxyUsername(curTunnel)%>" class="freetext" />               
    603             </div>
    604             <div id="portField" class="rowItem">
    605                 <label>
    606                     <%=intl._t("Password")%>:
    607                 </label>
    608                 <input type="password" id="clientPort" name="nofilter_outproxyPassword" title="Enter password required by outproxy" value="<%=editBean.getOutproxyPassword(curTunnel)%>" class="freetext" />               
    609             </div>
    610             <div class="subdivider">
    611                 <hr />
    612             </div>
     642        <tr>
     643            <th colspan="2">
     644                <%=intl._t("Local Authorization")%>
     645            </th>
     646        </tr>
     647        <tr>
     648            <td colspan="2">
     649                <input value="1" type="checkbox" name="proxyAuth" title="Check to require authorization for this service"<%=(editBean.getProxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     650                <%=intl._t("Require local authorization for this service")%>
     651            </td>
     652        </tr>
     653
     654        <tr>
     655            <td>
     656                <b><%=intl._t("Username")%>:</b>
     657                <input type="text" name="proxyUsername" title="Set username for this service" value="" class="freetext username" />
     658            </td>
     659            <td>
     660                <b><%=intl._t("Password")%>:</b>
     661                <input type="password" name="nofilter_proxyPassword" title="Set password for this service" value="" class="freetext password" />
     662            </td>
     663        </tr>
     664
     665        <tr>
     666            <th colspan="2">
     667                <%=intl._t("Outproxy Authorization")%>
     668            </th>
     669        </tr>
     670        <tr>
     671            <td colspan="2">
     672                <input value="1" type="checkbox" id="startOnLoad" name="outproxyAuth" title="Check if the outproxy requires authorization"<%=(editBean.getOutproxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     673                <%=intl._t("Outproxy requires authorization")%>
     674            </td>
     675        </tr>
     676
     677        <tr>
     678            <td>
     679                <b><%=intl._t("Username")%>:</b>
     680                <input type="text" name="outproxyUsername" title="Enter username required by outproxy" value="<%=editBean.getOutproxyUsername(curTunnel)%>" class="freetext username" />
     681            </td>
     682
     683            <td>
     684                <b><%=intl._t("Password")%>:</b>
     685                <input type="password" name="nofilter_outproxyPassword" title="Enter password required by outproxy" value="<%=editBean.getOutproxyPassword(curTunnel)%>" class="freetext password" />
     686            </td>
     687        </tr>
     688
    613689         <% } // httpclient || connect || socks || socksirc %>
    614690
    615691         <% if ("httpclient".equals(tunnelType)) { %>
    616             <div id="optionsField" class="rowItem">
    617                 <label><%=intl._t("Jump URL List")%>:</label>
    618             </div>
    619             <div id="hostField" class="rowItem">
    620                 <textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="jumpList" title="List of helper URLs to offer when a host is not found in your addressbook" wrap="off" spellcheck="false"><%=editBean.getJumpList(curTunnel)%></textarea>               
    621             </div>
    622             <div class="subdivider">
    623                 <hr />
    624             </div>
     692
     693        <tr>
     694            <th colspan="2">
     695                <%=intl._t("Jump URL List")%>
     696            </th>
     697        </tr>
     698        <tr>
     699            <td colspan="2">
     700                <textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="jumpList" title="List of helper URLs to offer when a host is not found in your addressbook" wrap="off" spellcheck="false"><%=editBean.getJumpList(curTunnel)%></textarea>
     701            </td>
     702        </tr>
     703
    625704         <% } // httpclient %>
    626705
    627             <div id="customOptionsField" class="rowItem">
    628                 <label for="customOptions" accesskey="u">
    629                     <%=intl._t("Custom options")%>(<span class="accessKey">u</span>):
    630                 </label>
    631                 <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>               
    632             </div>
    633            
    634             <div class="footer">
    635             </div>
    636         </div>
    637         <div id="globalOperationsPanel" class="panel">
    638             <div class="header"></div>
    639             <div class="footer">
    640                 <div class="toolbox">
     706        <tr>
     707            <th colspan="2">
     708                <%=intl._t("Custom options")%>
     709            </th>
     710        </tr>
     711
     712        <tr>
     713            <td colspan="2">
     714                <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>
     715            </td>
     716        </tr>
     717
     718        <tr>
     719            <td class="buttons" colspan="2">
    641720                    <input type="hidden" value="true" name="removeConfirm" />
    642721                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
    643                     <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%>(<span class="accessKey">D</span>)</button>
    644                     <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%>(<span class="accessKey">S</span>)</button>
    645                 </div>
    646             </div>
    647         </div>
    648     </form>
    649     <div id="pageFooter">
    650         </div>
     722                    <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%></button>
     723                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%></button>
     724            </td>
     725        </tr>
     726    </table>
     727</div>
     728</form>
     729
    651730<%
    652731
    653732  } else {
    654      %>Tunnels are not initialized yet, please reload in two minutes.<%
     733     %><div id="notReady"><%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%></div><%
    655734  }  // isInitialized()
    656735
  • apps/i2ptunnel/jsp/editServer.jsp

    r2d8f0c2 r50450ec  
    2424    <% if (editBean.allowCSS()) {
    2525  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
    26     <link href="<%=editBean.getTheme()%>default.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
    27     <link href="<%=editBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
     26    <link href="<%=editBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
    2827    <% }
    2928  %>
     
    3332</head>
    3433<body id="tunnelEditPage">
    35     <div id="pageHeader">
    36     </div>
     34
    3735<%
    3836
     
    4240    <form method="post" action="list">
    4341
    44         <div id="tunnelEditPanel" class="panel">
    45             <div class="header">
     42<div class="panel">
     43
    4644                <%
    4745                String tunnelTypeName;
     
    5048                    tunnelTypeName = editBean.getTunnelType(curTunnel);
    5149                    tunnelType = editBean.getInternalType(curTunnel);
    52                   %><h4><%=intl._t("Edit server settings")%></h4><%
     50                  %><h2><%=intl._t("Edit Server Settings")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><%
    5351                } else {
    5452                    tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
    5553                    tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type"));
    56                   %><h4><%=intl._t("New server settings")%></h4><%
     54                  %><h2><%=intl._t("New Server Settings")%></h2><%
    5755                } %>
    5856                <input type="hidden" name="tunnel" value="<%=curTunnel%>" />
     
    8078                <% } %>
    8179                <input type="submit" class="default" name="action" value="Save changes" />
    82             </div>
    83      
    84             <div class="separator">
    85                 <hr />
    86             </div>
    87 
    88             <div id="nameField" class="rowItem">
    89                 <label for="name" accesskey="N">
    90                     <%=intl._t("Name")%>(<span class="accessKey">N</span>):
    91                 </label>
    92                 <input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext" />               
    93             </div>
    94             <div id="typeField" class="rowItem">
    95                 <label><%=intl._t("Type")%>:</label>
    96                 <span class="text"><%=tunnelTypeName%></span>
    97             </div>
    98             <div id="descriptionField" class="rowItem">
    99                 <label for="description" accesskey="e">
    100                     <%=intl._t("Description")%>(<span class="accessKey">e</span>):
    101                 </label>
    102                 <input type="text" size="60" maxlength="80" name="nofilter_description"  id="description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext" />               
    103             </div>
    104             <div id="startupField" class="rowItem">
    105                 <label for="startOnLoad" accesskey="a">
    106                     <%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
    107                 </label>
    108                 <input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    109                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    110             </div>
    111                  
    112             <div class="subdivider">
    113                 <hr />
    114             </div>
    115                  
    116             <div id="targetField" class="rowItem">
     80
     81    <table id="serverTunnelEdit" class="tunnelConfig">
     82        <tr>
     83            <th>
     84                <%=intl._t("Name")%>
     85            </th>
     86            <th>
     87                <%=intl._t("Type")%>
     88            </th>
     89        </tr>
     90
     91        <tr>
     92            <td>
     93                <input type="text" size="30" maxlength="50" name="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext tunnelName" />
     94            </td>
     95            <td>
     96                <%=tunnelTypeName%>
     97            </td>
     98        </tr>
     99
     100        <tr>
     101            <th>
     102                <%=intl._t("Description")%>
     103            </th>
     104
     105            <th>
     106                <%=intl._t("Auto Start Tunnel")%>
     107            </th>
     108        </tr>
     109
     110        <tr>
     111            <td>
     112                <input type="text" size="60" maxlength="80" name="nofilter_description"  title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />
     113            </td>
     114
     115            <td>
     116                <input value="1" type="checkbox" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     117                <%=intl._t("Automatically start tunnel when router starts")%>
     118            </td>
     119        </tr>
     120
     121        <tr>
     122            <th colspan="2">
    117123         <% if ("streamrserver".equals(tunnelType)) { %>
    118                 <label><%=intl._t("Access Point")%>:</label>
     124                <%=intl._t("Access Point")%>
    119125         <% } else { %>
    120                 <label><%=intl._t("Target")%>:</label>
     126                <%=intl._t("Target")%>
    121127         <% } %>
    122             </div>
     128            </th>
     129        </tr>
     130
     131        <tr>
    123132         <% if (!"streamrserver".equals(tunnelType)) { %>
    124             <div id="hostField" class="rowItem">
    125                 <label for="targetHost" accesskey="H">
    126                     <%=intl._t("Host")%>(<span class="accessKey">H</span>):
    127                 </label>
    128                 <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=editBean.getTargetHost(curTunnel)%>" class="freetext" />               
    129             </div>
     133            <td>
     134                <b><%=intl._t("Host")%>:</b>
     135                <input type="text" size="20" name="targetHost" title="Target Hostname or IP" value="<%=editBean.getTargetHost(curTunnel)%>" class="freetext host" />
     136            </td>
    130137         <% } /* !streamrserver */ %>
    131             <div id="portField" class="rowItem">
    132                 <label for="targetPort" accesskey="P">
    133                     <%=intl._t("Port")%>(<span class="accessKey">P</span>):
     138
     139            <td>
     140                <b><%=intl._t("Port")%>:</b>
    134141                    <% String value = editBean.getTargetPort(curTunnel);
    135142                       if (value == null || "".equals(value.trim())) {
    136                            out.write(" <font color=\"red\">(");
     143                           out.write(" <span class=\"required\"><font color=\"red\">(");
    137144                           out.write(intl._t("required"));
    138                            out.write(")</font>");
    139                        }   
     145                           out.write(")</font></span>");
     146                       }
    140147                     %>
    141                 </label>
    142                 <input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=editBean.getTargetPort(curTunnel)%>" class="freetext" />               
    143             </div>
     148                <input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=editBean.getTargetPort(curTunnel)%>" class="freetext port" placeholder="required" />
     149            </td>
     150
    144151         <% if (!"streamrserver".equals(tunnelType)) { %>
    145             <div id="portField" class="rowItem">
    146                 <label>
    147                     <%=intl._t("Use SSL?")%>
    148                 </label>
    149                 <input value="1" type="checkbox" id="startOnLoad" name="useSSL" title="Use SSL to connect to target" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    150             </div>
     152        </tr>
     153
     154        <tr>
     155            <td colspan="2">
     156                <input value="1" type="checkbox" name="useSSL" title="Use SSL to connect to target" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     157                <%=intl._t("Use SSL to connect to target")%>
    151158         <% } /* !streamrserver */ %>
    152            
     159            </td>
    153160         <% if ("httpbidirserver".equals(tunnelType)) { %>
    154             <div class="subdivider">
    155                 <hr />
    156             </div>
    157             <div id="accessField" class="rowItem">
    158                 <label><%=intl._t("Access Point")%>:</label>
    159             </div>
    160             <div id="portField" class="rowItem">
    161                 <label for="port" accesskey="P">
    162                      <span class="accessKey">P</span>ort:
     161        </tr>
     162
     163        <tr>
     164            <th colspan="2">
     165                <%=intl._t("Access Point")%>
     166            </th>
     167        </tr>
     168
     169        <tr>
     170            <td>
     171                <b><%=intl._t("Port")%>:</b>
     172
    163173                     <% String value4 = editBean.getClientPort(curTunnel);
    164174                        if (value4 == null || "".equals(value4.trim())) {
    165                             out.write(" <font color=\"red\">(");
     175                            out.write(" <span class=\"required\"><font color=\"red\">(");
    166176                            out.write(intl._t("required"));
    167                             out.write(")</font>");
     177                            out.write(")</font></span>");
    168178                        }
    169179                      %>
    170                  </label>
    171                  <input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext" />
    172             </div>
     180
     181                 <input type="text" size="6" maxlength="5" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext port" placeholder="required" />
     182            </td>
    173183         <% } /* httpbidirserver */ %>
    174184         <% if ("httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) { %>
    175             <div id="reachField" class="rowItem">
    176                 <label for="reachableBy" accesskey="r">
    177                     <%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
    178                 </label>
     185
     186            <td>
     187                <b><%=intl._t("Reachable by")%>:</b>
     188
    179189                <select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
    180190              <%
     
    191201                    }
    192202              %>
    193                 </select>               
    194             </div>
     203                </select>
     204            </td>
    195205         <% } /* httpbidirserver || streamrserver */ %>
    196 
    197             <div class="subdivider">
    198                 <hr />
    199             </div>
    200            
     206        </tr>
     207
     208
    201209            <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    202           %><div id="websiteField" class="rowItem">
    203                 <label for="spoofedHost" accesskey="W">
    204                     <%=intl._t("Website name")%>(<span class="accessKey">W</span>):
    205                 </label>
    206                 <input type="text" size="20" id="targetHost" name="spoofedHost" title="Website Host Name" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />               
    207                 <span class="comment"><%=intl._t("(leave blank for outproxies)")%></span>
    208             </div>
     210          %>
     211
     212        <tr>
     213            <th>
     214                <%=intl._t("Website Hostname")%>
     215            </th>
     216            <th></th>
     217        </tr>
     218
     219        <tr>
     220            <td colspan="2">
     221                <input type="text" size="20" id="websiteName" name="spoofedHost" title="Website Hostname" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />
     222                <%=intl._t("(leave blank for outproxies)")%>
     223            </td>
     224        </tr>
    209225            <% }
    210           %><div id="privKeyField" class="rowItem">
    211                 <label for="privKeyFile" accesskey="k">
    212                     <%=intl._t("Private key file")%>(<span class="accessKey">k</span>):
     226          %>
     227
     228        <tr>
     229            <th colspan="2">
     230                <%=intl._t("Private key file")%>
     231            </th>
     232        </tr>
     233
     234        <tr>
     235            <td colspan="2">
    213236                    <% String value3 = editBean.getPrivateKeyFile(curTunnel);
    214237                       if (value3 == null || "".equals(value3.trim())) {
    215                            out.write(" <font color=\"red\">(");
     238                           out.write(" <span class=\"required\"><font color=\"red\">(");
    216239                           out.write(intl._t("required"));
    217                            out.write(")</font>");
     240                           out.write(")</font></span>");
    218241                       }
    219242                     %>
    220                 </label>
    221                 <input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />               
    222             </div>
    223 
    224             <div id="destinationField" class="rowItem">
    225                 <label for="localDestination" accesskey="L">
    226                     <%=intl._t("Local destination")%>(<span class="accessKey">L</span>):
    227                 </label>
    228                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>               
    229             </div>
     243                <input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" placeholder="required" />
     244            </td>
     245        </tr>
     246
     247        <tr>
     248            <th colspan="2">
     249                <%=intl._t("Local destination")%>
     250            </th>
     251        </tr>
     252
     253        <tr>
     254            <td colspan="2">
     255                <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>
     256            </td>
     257        </tr>
    230258
    231259<%
     
    239267                    <%=intl._t("Hostname Signature")%>
    240268                </label>
    241                 <input type="text" size="30" readonly="readonly" title="Use to prove that the website name is for this destination" value="<%=sig%>" wrap="off" class="freetext" />               
     269                <input type="text" size="30" readonly="readonly" title="Use to prove that the website name is for this destination" value="<%=sig%>" wrap="off" class="freetext" />
    242270            </div>
    243271         <%
     
    249277            if (!"".equals(b64)) {
    250278         %>
    251             <div id="destinationField" class="rowItem">
     279        <tr>
     280
    252281        <%
    253282                b64 = b64.replace("=", "%3d");
     
    258287                if (name != null && !name.equals("") && !name.equals("mysite.i2p") && !name.contains(" ") && name.endsWith(".i2p")) {
    259288         %>
    260               <label>
     289
     290            <td class="buttons" colspan="2">
    261291              <a class="control" title="<%=intl._t("Generate QR Code")%>" href="/imagegen/qr?s=320&amp;t=<%=name%>&amp;c=http%3a%2f%2f<%=name%>%2f%3fi2paddresshelper%3d<%=b64%>" target="_top"><%=intl._t("Generate QR Code")%></a>
    262               </label>
    263292              <a class="control" href="/susidns/addressbook.jsp?book=private&amp;hostname=<%=name%>&amp;destination=<%=b64%>#add"><%=intl._t("Add to local addressbook")%></a>   
    264               &nbsp;&nbsp;&nbsp;&nbsp;
    265               <a class="control" href="register?tunnel=<%=curTunnel%>"><%=intl._t("Registration Authentication")%></a>   
     293              <a class="control" href="register?tunnel=<%=curTunnel%>"><%=intl._t("Registration Authentication")%></a>
     294            </td>
    266295        <%
    267296                } else {
    268297          %>
    269               <label> </label>
    270               <span class="comment"><%=intl._t("Set name with .i2p suffix to enable QR code generation")%></span>
    271               <span class="comment"><%=intl._t("Set name with .i2p suffix to enable registration authentication")%></span>
     298            <td class="infohelp" colspan="2">
     299                <%=intl._t("Note: In order to enable QR code generation or registration authentication, configure the Name field above with .i2p suffix eg.  mynewserver.i2p")%>
     300            </td>
    272301        <%
    273302                }  // name
    274303         %>
    275             </div>
     304        </tr>
     305
    276306        <%
    277307            }  // b64
    278308
    279309         %>
    280             <div class="footer">
    281             </div>
    282         </div>
    283 
    284         <div id="tunnelAdvancedNetworking" class="panel">
    285             <div class="header">
    286                 <h4><%=intl._t("Advanced networking options")%></h4>
    287             </div>
    288 
    289             <div class="separator">
    290                 <hr />
    291             </div>
    292            
    293             <div id="tunnelOptionsField" class="rowItem">
    294                 <label><%=intl._t("Tunnel Options")%>:</label>
    295             </div>
    296             <div id="depthField" class="rowItem">
    297                 <label for="tunnelDepth" accesskey="t">
    298                     <%=intl._t("Length")%>(<span class="accessKey">t</span>):
    299                 </label>
     310    </table>
     311
     312    <h3><%=intl._t("Advanced Networking Options")%></h3>
     313
     314    <table id="#advancedServerTunnelOptions" class="tunnelConfig">
     315        <tr>
     316            <th colspan="2">
     317                <%=intl._t("Tunnel Options")%>
     318            </th>
     319        </tr>
     320
     321        <tr>
     322            <td>
     323                <b><%=intl._t("Length")%></b>
     324            </td>
     325
     326            <td>
     327                <b><%=intl._t("Variance")%></b>
     328            </td>
     329        </tr>
     330
     331        <tr>
     332            <td>
    300333                <select id="tunnelDepth" name="tunnelDepth" title="Length of each Tunnel" class="selectbox">
    301334                    <% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
     
    313346                <% }
    314347              %></select>
    315             </div>
    316             <div id="varianceField" class="rowItem">
    317                 <label for="tunnelVariance" accesskey="v">
    318                     <%=intl._t("Variance")%>(<span class="accessKey">V</span>):
    319                 </label>
     348            </td>
     349
     350            <td>
    320351                <select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Depth" class="selectbox">
    321352                    <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
     
    328359                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._t("hop variance")%></option>
    329360                <% }
    330               %></select>               
    331             </div>
    332             <div id="countField" class="rowItem">
    333                 <label for="tunnelQuantity" accesskey="C">
    334                     <%=intl._t("Count")%>(<span class="accessKey">C</span>):
    335                 </label>
     361              %></select>
     362            </td>
     363        </tr>
     364
     365        <tr>
     366            <td>
     367                <b><%=intl._t("Count")%></b>
     368            </td>
     369
     370            <td>
     371                <b><%=intl._t("Backup Count")%></b>
     372            </td>
     373        </tr>
     374
     375        <tr>
     376            <td>
    336377                <select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
    337378                    <%=editBean.getQuantityOptions(curTunnel)%>
    338                 </select>               
    339             </div>
    340             <div id="backupField" class="rowItem">
    341                 <label for="tunnelBackupQuantity" accesskey="b">
    342                     <%=intl._t("Backup Count")%>(<span class="accessKey">B</span>):
    343                 </label>
     379                </select>
     380            </td>
     381
     382            <td>
    344383                <select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
    345384                    <% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
     
    351390                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._t("backup tunnels")%></option>
    352391                <% }
    353               %></select>               
    354             </div>
    355                            
    356             <div class="subdivider">
    357                 <hr />
    358             </div>
    359            
     392              %></select>
     393            </td>
     394        </tr>
     395
    360396         <% if (!"streamrserver".equals(tunnelType)) { %>
    361             <div id="profileField" class="rowItem">
    362                 <label for="profile" accesskey="f">
    363                     <%=intl._t("Profile")%>(<span class="accessKey">f</span>):
    364                 </label>
     397
     398        <tr>
     399            <th colspan="2">
     400                <%=intl._t("Profile")%>
     401            </th>
     402        </tr>
     403
     404        <tr>
     405            <td colspan="2">
    365406                <select id="profile" name="profile" title="Connection Profile" class="selectbox">
    366407                    <% boolean interactiveProfile = editBean.isInteractive(curTunnel);
    367408                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
    368409                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
    369                 </select>               
    370             </div>
    371 
    372             <div class="subdivider">
    373                 <hr />
    374             </div>
     410                </select>
     411            </td>
     412        </tr>
     413
    375414         <% } /* !streamrserver */ %>
    376415
    377             <div id="optionsField" class="rowItem">
    378                 <label><%=intl._t("Router I2CP Address")%>:</label>
    379             </div>
    380             <div id="optionsHostField" class="rowItem">
    381                 <label for="clientHost" accesskey="o">
    382                     <%=intl._t("Host")%>(<span class="accessKey">o</span>):
    383                 </label>
    384                 <input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />               
    385             </div>
    386             <div id="optionsPortField" class="rowItem">
    387                 <label for="clientPort" accesskey="r">
    388                     <%=intl._t("Port")%>(<span class="accessKey">r</span>):
    389                 </label>
    390                 <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />               
    391             </div>
    392            
    393             <div class="subdivider">
    394                 <hr />
    395             </div>
    396            
    397             <div id="optionsField" class="rowItem">
    398                 <label for="encrypt" accesskey="e">
    399                     <%=intl._t("Encrypt Leaseset")%>(<span class="accessKey">E</span>):
    400                 </label>
    401             </div>
    402             <div id="portField" class="rowItem">
    403                 <label for="encrypt" accesskey="e">
    404                     <%=intl._t("Enable")%>:
    405                 </label>
    406                 <input value="1" type="checkbox" id="startOnLoad" name="encrypt" title="ONLY clients with the encryption key will be able to connect"<%=(editBean.getEncrypt(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    407             </div>
    408             <div id="portField" class="rowItem">
    409                 <label for="encrypt" accesskey="e">
    410                     <%=intl._t("Encryption Key")%>:
    411                 </label>
    412                 <textarea rows="1" style="height: 3em;" cols="44" id="portField" name="encryptKey" title="Encrypt Key" wrap="off" spellcheck="false"><%=editBean.getEncryptKey(curTunnel)%></textarea>               
    413             </div>
    414             <div id="portField" class="rowItem">
    415                 <label for="force" accesskey="c">
    416                     <%=intl._t("Generate New Key")%>:
    417                 </label>
    418                 <button accesskey="S" class="control" type="submit" name="action" value="Generate" title="Generate New Key Now"><%=intl._t("Generate")%></button>
    419                 <span class="comment"><%=intl._t("(Tunnel must be stopped first)")%></span>
    420             </div>
    421                  
    422             <div class="subdivider">
    423                 <hr />
    424             </div>
    425            
    426             <div id="optionsField" class="rowItem">
    427                 <label for="access" accesskey="s">
    428                     <%=intl._t("Restricted Access List")%>(<span class="accessKey">s</span>):
    429                 </label>
    430             </div>
    431             <div id="portField" class="rowItem">
     416        <tr>
     417            <th colspan="2">
     418                <%=intl._t("Router I2CP Address")%>
     419            </th>
     420        </tr>
     421        <tr>
     422            <td>
     423                <b><%=intl._t("Host")%>:</b>
     424                <input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
     425            </td>
     426            <td>
     427                <b><%=intl._t("Port")%>:</b>
     428                <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
     429            </td>
     430        </tr>
     431
     432        <tr>
     433            <th colspan="2">
     434                <%=intl._t("Encrypt Leaseset")%>
     435            </th>
     436        </tr>
     437
     438        <tr>
     439            <td colspan="2">
     440                <input value="1" type="checkbox" id="startOnLoad" name="encrypt" title="ONLY clients with the encryption key will be able to connect"<%=(editBean.getEncrypt(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     441                <%=intl._t("Only allow clients with the encryption key to connect to this server")%>
     442            </td>
     443        </tr>
     444
     445        <tr>
     446            <td>
     447                <b><%=intl._t("Encryption Key")%></b>
     448            </td>
     449
     450            <td>
     451                <b><%=intl._t("Generate New Key")%></b> (<%=intl._t("Tunnel must be stopped first")%>)
     452            </td>
     453        </tr>
     454
     455        <tr>
     456            <td>
     457                <textarea rows="1" style="height: 3em;" cols="44" id="leasesetKey" name="encryptKey" title="Encrypt Key" wrap="off" spellcheck="false"><%=editBean.getEncryptKey(curTunnel)%></textarea>
     458            </td>
     459
     460            <td>
     461                <button class="control" type="submit" name="action" value="Generate" title="Generate New Key Now"><%=intl._t("Generate")%></button>
     462            </td>
     463        </tr>
     464
     465        <tr>
     466            <th colspan="2">
     467                <%=intl._t("Restricted Access List")%>
     468            </th>
     469        </tr>
     470
     471        <tr>
     472            <td colspan="2">
    432473                <% /* can't use <label> here */ %>
    433                 <p><input value="0" type="radio" id="startOnLoad" name="accessMode" title="Allow all clients"<%=(editBean.getAccessMode(curTunnel).equals("0") ? " checked=\"checked\"" : "")%> class="tickbox" />               
    434                 <b><%=intl._t("Disable")%></b></p>
    435                 <p><input value="2" type="radio" id="startOnLoad" name="accessMode" title="Reject listed clients"<%=(editBean.getAccessMode(curTunnel).equals("2") ? " checked=\"checked\"" : "")%> class="tickbox" />               
    436                 <b><%=intl._t("Blacklist")%></b></p>
    437                 <p><input value="1" type="radio" id="startOnLoad" name="accessMode" title="Allow listed clients only"<%=(editBean.getAccessMode(curTunnel).equals("1") ? " checked=\"checked\"" : "")%> class="tickbox" />               
    438                 <b><%=intl._t("Whitelist")%></b></p>
    439             </div>
    440             <div id="accessListField" class="rowItem">
    441                 <label for="accessList" accesskey="s">
    442                     <%=intl._t("Access List")%>:
    443                 </label>
    444                 <textarea rows="2" style="height: 8em;" cols="60" name="accessList" title="Access List" wrap="off" spellcheck="false"><%=editBean.getAccessList(curTunnel)%></textarea>               
    445             </div>
    446                  
     474                <span class="multiOption"><input value="0" type="radio" name="accessMode" title="<%=intl._t("Allow all clients")%>"<%=(editBean.getAccessMode(curTunnel).equals("0") ? " checked=\"checked\"" : "")%> class="tickbox" />
     475                    <%=intl._t("Disable")%></span>
     476                <span class="multiOption"><input value="2" type="radio" name="accessMode" title="<%=intl._t("Reject listed clients")%>"<%=(editBean.getAccessMode(curTunnel).equals("2") ? " checked=\"checked\"" : "")%> class="tickbox" />
     477                    <%=intl._t("Blacklist")%></span>
     478                <span class="multiOption"><input value="1" type="radio" name="accessMode" title="<%=intl._t("Allow listed clients only")%>"<%=(editBean.getAccessMode(curTunnel).equals("1") ? " checked=\"checked\"" : "")%> class="tickbox" />
     479                    <%=intl._t("Whitelist")%></span>
     480            </td>
     481        </tr>
     482
     483        <tr>
     484            <td colspan="2">
     485                <b><%=intl._t("Access List")%></b> (<%=intl._t("Specify clients, 1 per line")%>)
     486            </td>
     487        </tr>
     488
     489        <tr>
     490            <td colspan="2">
     491                <textarea rows="2" style="height: 8em;" cols="60" name="accessList" title="Access List" wrap="off" spellcheck="false"><%=editBean.getAccessList(curTunnel)%></textarea>
     492            </td>
     493        </tr>
     494
     495        <tr>
     496            <th colspan="2">
     497                <%=intl._t("Server Access Options")%>
     498            </th>
     499        </tr>
     500
    447501            <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    448             %><div class="rowItem">
    449                 <div id="optionsField" class="rowItem">
    450                     <label>
    451                         <%=intl._t("Block Access via Inproxies")%>:
    452                     </label>
    453                 </div>
    454                 <div id="portField" class="rowItem">
    455                     <label for="access" accesskey="d">
    456                         <%=intl._t("Enable")%>:
    457                     </label>
    458                     <input value="1" type="checkbox" id="startOnLoad" name="rejectInproxy" title="Deny inproxy access when enabled"<%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    459                 </div>
    460               </div>
    461             <div class="rowItem">
    462                 <div id="optionsField" class="rowItem">
    463                     <label>
    464                         <%=intl._t("Block Accesses containing Referers")%>:
    465                     </label>
    466                 </div>
    467                 <div id="portField" class="rowItem">
    468                     <label for="access" accesskey="d">
    469                         <%=intl._t("Enable")%>:
    470                     </label>
    471                     <input value="1" type="checkbox" id="startOnLoad" name="rejectReferer" title="Deny accesseses with referers (probably from inproxies)"<%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    472                 </div>
    473               </div>
    474             <div class="rowItem">
    475                 <div id="optionsField" class="rowItem">
    476                     <label>
    477                         <%=intl._t("Block these User-Agents")%>:
    478                     </label>
    479                 </div>
    480                 <div id="portField" class="rowItem">
    481                     <label for="access" accesskey="d">
    482                         <%=intl._t("Enable")%>:
    483                     </label>
    484                     <input value="1" type="checkbox" id="startOnLoad" name="rejectUserAgents" title="Deny User-Agents matching these strings (probably from inproxies)"<%=(editBean.isRejectUserAgents(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    485                 </div>
    486                 <div id="optionsHostField" class="rowItem">
    487                     <input type="text" id="userAgents" name="userAgents" size="20" title="comma separated, e.g. Mozilla,Opera (case-sensitive)" value="<%=editBean.getUserAgents(curTunnel)%>" class="freetext" />               
    488                 </div>
    489               </div>
     502            %>
     503
     504        <tr>
     505            <td>
     506                <input value="1" type="checkbox" name="rejectInproxy" title="<%=intl._t("Deny inproxy access when enabled")%>" <%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     507                <%=intl._t("Block Access via Inproxies")%>
     508            </td>
     509
     510            <td>
     511                <input value="1" type="checkbox" name="rejectReferer" title="<%=intl._t("Deny accesseses with referers (probably from inproxies)")%>" <%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     512                <%=intl._t("Block Accesses containing Referers")%>
     513            </td>
     514        </tr>
     515
     516        <tr>
     517            <td>
     518                <input value="1" type="checkbox" name="rejectUserAgents" title="<%=intl._t("Deny User-Agents matching these strings (probably from inproxies)")%>" <%=(editBean.isRejectUserAgents(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     519                <%=intl._t("Block these User-Agents")%>
     520            </td>
     521
     522            <td>
     523                <input type="text" id="userAgents" name="userAgents" size="20" title="<%=intl._t("comma separated, e.g. Mozilla,Opera (case-sensitive)")%>" value="<%=editBean.getUserAgents(curTunnel)%>" class="freetext" />
     524            </td>
     525        </tr>
    490526            <% } // httpserver
    491             %><div class="rowItem">
    492                 <div id="optionsField" class="rowItem">
    493                     <label>
    494                         <%=intl._t("Unique Local Address per Client")%>:
    495                     </label>
    496                 </div>
    497                 <div id="portField" class="rowItem">
    498                     <label for="access" accesskey="d">
    499                         <%=intl._t("Enable")%>:
    500                     </label>
    501                     <input value="1" type="checkbox" id="startOnLoad" name="uniqueLocal" title="Use unique IP addresses for each connecting client (local non-SSL servers only)"<%=(editBean.getUniqueLocal(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    502                 </div>
    503             </div>
    504             <div class="rowItem">
    505                 <div id="optionsField" class="rowItem">
    506                     <label>
    507                         <%=intl._t("Optimize for Multihoming")%>:
    508                     </label>
    509                 </div>
    510                 <div id="portField" class="rowItem">
    511                     <label for="access" accesskey="d">
    512                         <%=intl._t("Enable")%>:
    513                     </label>
    514                     <input value="1" type="checkbox" id="startOnLoad" name="multihome" title="Only enable if you are hosting this service on multiple routers"<%=(editBean.getMultihome(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    515                 </div>
    516             </div>
    517             <div class="subdivider">
    518                 <hr />
    519             </div>
    520 
    521             <div class="rowItem">
    522               <div id="optionsField" class="rowItem">
    523                   <label><%=intl._t("Inbound connection limits (0=unlimited)")%><br /><%=intl._t("Per client")%>:</label>
    524               </div>
    525               <div id="portField" class="rowItem">
    526                   <label><%=intl._t("Per minute")%>:</label>
    527                   <input type="text" id="port" name="limitMinute" value="<%=editBean.getLimitMinute(curTunnel)%>" class="freetext" />               
    528               </div>
    529               <div id="portField" class="rowItem">
    530                   <label><%=intl._t("Per hour")%>:</label>
    531                   <input type="text" id="port" name="limitHour" value="<%=editBean.getLimitHour(curTunnel)%>" class="freetext" />               
    532               </div>
    533               <div id="portField" class="rowItem">
    534                   <label><%=intl._t("Per day")%>:</label>
    535                   <input type="text" id="port" name="limitDay" value="<%=editBean.getLimitDay(curTunnel)%>" class="freetext" />               
    536               </div>
    537             </div>
    538             <div class="rowItem">
    539               <div id="optionsField" class="rowItem">
    540                   <label><%=intl._t("Total")%>:</label>
    541               </div>
    542               <div id="portField" class="rowItem">
    543                   <input type="text" id="port" name="totalMinute" value="<%=editBean.getTotalMinute(curTunnel)%>" class="freetext" />               
    544               </div>
    545               <div id="portField" class="rowItem">
    546                   <input type="text" id="port" name="totalHour" value="<%=editBean.getTotalHour(curTunnel)%>" class="freetext" />               
    547               </div>
    548               <div id="portField" class="rowItem">
    549                   <input type="text" id="port" name="totalDay" value="<%=editBean.getTotalDay(curTunnel)%>" class="freetext" />               
    550               </div>
    551             </div>
    552             <div class="rowItem">
    553               <div id="optionsField" class="rowItem">
    554                   <label><%=intl._t("Max concurrent connections (0=unlimited)")%>:</label>
    555               </div>
    556               <div id="portField" class="rowItem">
    557                   <input type="text" id="port" name="maxStreams" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />               
    558               </div>
    559             </div>
     527            %>
     528
     529        <tr>
     530            <td>
     531                <input value="1" type="checkbox" name="uniqueLocal" title="<%=intl._t("Use unique IP addresses for each connecting client (local non-SSL servers only)")%>" <%=(editBean.getUniqueLocal(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     532                <%=intl._t("Unique Local Address per Client")%>
     533            </td>
     534
     535            <td>
     536                <input value="1" type="checkbox" name="multihome" title="<%=intl._t("Only enable if you are hosting this service on multiple routers")%>" <%=(editBean.getMultihome(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     537                <%=intl._t("Optimize for Multihoming")%>
     538            </td>
     539        </tr>
     540
     541        <tr>
     542            <th colspan="2">
     543                <%=intl._t("Server Throttling")%>
     544            </th>
     545        </tr>
     546        <tr>
     547            <td id="throttle" colspan="4">
     548
     549                <table id="throttler">
     550                    <tr>
     551                        <th colspan="5">
     552                            <%=intl._t("Inbound connection limits (0=unlimited)")%>
     553                        </th>
     554                    </tr>
     555                    <tr>
     556                        <td></td>
     557                        <td><b><%=intl._t("Per Minute")%></b></td>
     558                        <td><b><%=intl._t("Per Hour")%></b></td>
     559                        <td><b><%=intl._t("Per Day")%></b></td>
     560                        <td class="blankColumn"></td>
     561                    </tr>
     562                    <tr>
     563                        <td><b><%=intl._t("Per Client")%></b></td>
     564                        <td>
     565                            <input type="text" name="limitMinute" value="<%=editBean.getLimitMinute(curTunnel)%>" class="freetext" />
     566                        </td>
     567                        <td>
     568                            <input type="text" name="limitHour" value="<%=editBean.getLimitHour(curTunnel)%>" class="freetext" />
     569                        </td>
     570                        <td>
     571                            <input type="text" name="limitDay" value="<%=editBean.getLimitDay(curTunnel)%>" class="freetext" />
     572                        </td>
     573                        <td class="blankColumn"></td>
     574                    </tr>
     575                    <tr>
     576                        <td><b><%=intl._t("Total")%></b></td>
     577                        <td>
     578                            <input type="text" name="totalMinute" value="<%=editBean.getTotalMinute(curTunnel)%>" class="freetext" />
     579                        </td>
     580                        <td>
     581                            <input type="text" name="totalHour" value="<%=editBean.getTotalHour(curTunnel)%>" class="freetext" />
     582                        </td>
     583                        <td>
     584                            <input type="text" name="totalDay" value="<%=editBean.getTotalDay(curTunnel)%>" class="freetext" />
     585                        </td>
     586                        <td class="blankColumn"></td>
     587                    </tr>
     588                    <tr>
     589                        <th colspan="5"><%=intl._t("Max concurrent connections (0=unlimited)")%></th>
     590                    </tr>
     591                    <tr>
     592                        <td></td>
     593                        <td>
     594                            <input type="text" name="maxStreams" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />
     595                        </td>
     596                        <td></td>
     597                        <td></td>
     598                        <td class="blankColumn"></td>
     599                    </tr>
    560600
    561601            <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    562               %><div class="rowItem">
    563                   <div id="optionsField" class="rowItem">
    564                       <label><%=intl._t("POST limits (0=unlimited)")%><br /><%=intl._t("Per client")%>:</label>
    565                   </div>
    566                   <div id="portField" class="rowItem">
    567                       <label><%=intl._t("Per period")%>:</label>
    568                       <input type="text" id="port" name="postMax" value="<%=editBean.getPostMax(curTunnel)%>" class="freetext" />               
    569                   </div>
    570                   <div id="portField" class="rowItem">
    571                       <label><%=intl._t("Ban minutes")%>:</label>
    572                       <input type="text" id="port" name="postBanTime" value="<%=editBean.getPostBanTime(curTunnel)%>" class="freetext" />               
    573                   </div>
    574                 </div>
    575                 <div class="rowItem">
    576                   <div id="optionsField" class="rowItem">
    577                       <label><%=intl._t("Total")%>:</label>
    578                   </div>
    579                   <div id="portField" class="rowItem">
    580                       <input type="text" id="port" name="postTotalMax" value="<%=editBean.getPostTotalMax(curTunnel)%>" class="freetext" />               
    581                   </div>
    582                   <div id="portField" class="rowItem">
    583                       <input type="text" id="port" name="postTotalBanTime" value="<%=editBean.getPostTotalBanTime(curTunnel)%>" class="freetext" />               
    584                   </div>
    585                 </div>
    586                 <div class="rowItem">
    587                   <div id="optionsField" class="rowItem">
    588                       <label><%=intl._t("POST limit period (minutes)")%>:</label>
    589                   </div>
    590                   <div id="portField" class="rowItem">
    591                       <input type="text" id="port" name="postCheckTime" value="<%=editBean.getPostCheckTime(curTunnel)%>" class="freetext" />               
    592                   </div>
    593                 </div>
     602              %>
     603                    <tr>
     604                        <th colspan="5">
     605                            <%=intl._t("POST limits (0=unlimited)")%>
     606                        </th>
     607                    </tr>
     608                    <tr>
     609                        <td></td>
     610                        <td>
     611                            <b><%=intl._t("Per Period")%></b>
     612                        </td>
     613                        <td>
     614                            <b><%=intl._t("Ban Duration")%></b>
     615                        </td>
     616                        <td></td>
     617                        <td class="blankColumn"></td>
     618                    </tr>
     619                    <tr>
     620                        <td>
     621                            <b><%=intl._t("Per Client")%>
     622                            </b>
     623                        </td>
     624                        <td>
     625                            <input type="text" name="postMax" value="<%=editBean.getPostMax(curTunnel)%>" class="freetext quantity"/>
     626                        </td>
     627                        <td colspan="2">
     628                            <input type="text" name="postBanTime" value="<%=editBean.getPostBanTime(curTunnel)%>" class="freetext period"/>
     629                            <%=intl._t("minutes")%>
     630                        </td>
     631                        <td class="blankColumn"></td>
     632                    </tr>
     633                    <tr>
     634                        <td>
     635                            <b><%=intl._t("Total")%>
     636                            </b>
     637                        </td>
     638                        <td>
     639                            <input type="text" name="postTotalMax" value="<%=editBean.getPostTotalMax(curTunnel)%>" class="freetext quantity"/>
     640                        </td>
     641                        <td colspan="2">
     642                            <input type="text" name="postTotalBanTime" value="<%=editBean.getPostTotalBanTime(curTunnel)%>" class="freetext period"/>
     643                            <%=intl._t("minutes")%>
     644                        </td>
     645                        <td class="blankColumn"></td>
     646                    </tr>
     647                    <tr>
     648                        <td>
     649                            <b><%=intl._t("POST limit period")%>
     650                            </b>
     651                        </td>
     652                        <td colspan="2">
     653                            <input type="text" name="postCheckTime" value="<%=editBean.getPostCheckTime(curTunnel)%>" class="freetext period"/>
     654                            <%=intl._t("minutes")%>
     655                        </td>
     656                        <td></td>
     657                        <td class="blankColumn"></td>
     658                    </tr>
     659
    594660            <% } // httpserver
    595           %><div class="subdivider">
    596                 <hr />
    597             </div>
    598            
    599             <div id="optionsField" class="rowItem">
    600                 <label for="reduce" accesskey="d">
    601                     <%=intl._t("Reduce tunnel quantity when idle")%>(<span class="accessKey">d</span>):
    602                 </label>
    603             </div>
    604             <div id="portField" class="rowItem">
    605                 <label for="access" accesskey="d">
    606                     <%=intl._t("Enable")%>:
    607                 </label>
    608                 <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    609             </div>
    610             <div id="portField" class="rowItem">
    611                 <label for="reduceCount" accesskey="d">
    612                     <%=intl._t("Reduced tunnel count")%>:
    613                 </label>
    614                 <input type="text" id="port" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext" />               
    615             </div>
    616             <div id="portField" class="rowItem">
    617                 <label for="reduceTime" accesskey="d">
    618                     <%=intl._t("Idle minutes")%>:
    619                 </label>
    620                 <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />               
    621             </div>
    622 
    623             <div class="subdivider">
    624                 <hr />
    625             </div>
    626            
     661          %>
     662
     663
     664                </table>
     665            </td>
     666        </tr>
     667
     668        <tr>
     669            <th colspan="2">
     670                <%=intl._t("Reduce tunnel quantity when idle")%>
     671            </th>
     672        </tr>
     673
     674        <tr>
     675            <td colspan="2">
     676                <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     677                <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%>
     678            </td>
     679        </tr>
     680        <tr>
     681            <td>
     682                <b><%=intl._t("Reduced tunnel count")%>:</b>
     683                <input type="text" id="reduceCount" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
     684            </td>
     685
     686            <td>
     687                <b><%=intl._t("Idle period")%>:</b>
     688                <input type="text" id="reduceTime" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
     689                <%=intl._t("minutes")%>
     690            </td>
     691        </tr>
     692
    627693<% /***************** %>
    628694            <div id="tunnelOptionsField" class="rowItem">
     
    634700              <div id="portField" class="rowItem">
    635701                <label><%=intl._t("None")%></label>
    636                 <input value="0" type="radio" id="startOnLoad" name="cert" title="No Certificate"<%=(editBean.getCert(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" />               
     702                <input value="0" type="radio" id="startOnLoad" name="cert" title="No Certificate"<%=(editBean.getCert(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
    637703              </div>
    638704              <div id="portField" class="rowItem">
    639705                <label><%=intl._t("Hashcash (effort)")%></label>
    640                 <input value="1" type="radio" id="startOnLoad" name="cert" title="Hashcash Certificate"<%=(editBean.getCert(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    641                 <input type="text" id="port" name="effort" size="2" maxlength="2" title="Hashcash Effort" value="<%=editBean.getEffort(curTunnel)%>" class="freetext" />               
     706                <input value="1" type="radio" id="startOnLoad" name="cert" title="Hashcash Certificate"<%=(editBean.getCert(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
     707                <input type="text" id="port" name="effort" size="2" maxlength="2" title="Hashcash Effort" value="<%=editBean.getEffort(curTunnel)%>" class="freetext" />
    642708              </div>
    643709            </div>
     
    651717              <div id="portField" class="rowItem">
    652718                <label><%=intl._t("Hidden")%></label>
    653                 <input value="2" type="radio" id="startOnLoad" name="cert" title="Hidden Certificate"<%=(editBean.getCert(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />               
     719                <input value="2" type="radio" id="startOnLoad" name="cert" title="Hidden Certificate"<%=(editBean.getCert(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
    654720              </div>
    655721              <div id="portField" class="rowItem">
     
    657723                    <%=intl._t("Signed (signed by)")%>:
    658724                </label>
    659                 <input value="3" type="radio" id="startOnLoad" name="cert" title="Signed Certificate"<%=(editBean.getCert(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    660                 <input type="text" id="port" name="signer" size="50" title="Cert Signer" value="<%=editBean.getSigner(curTunnel)%>" class="freetext" />               
     725                <input value="3" type="radio" id="startOnLoad" name="cert" title="Signed Certificate"<%=(editBean.getCert(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
     726                <input type="text" id="port" name="signer" size="50" title="Cert Signer" value="<%=editBean.getSigner(curTunnel)%>" class="freetext" />
    661727              </div>
    662728            </div>
     
    673739                int currentSigType = editBean.getSigType(curTunnel, tunnelType);
    674740           %>
    675             <div id="tunnelOptionsField" class="rowItem">
    676                 <label>
    677                     <%=intl._t("Signature type")%>
    678                     (<%=intl._t("Experts only! Changes B32!")%>)
    679                 </label>
    680             </div>
    681             <div id="hostField" class="rowItem">
    682               <div id="portField" class="rowItem">
    683                 <label>DSA-SHA1</label>
    684                 <input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    685               </div>
     741        <tr>
     742            <th colspan="2">
     743                <%=intl._t("Signature type")%> (<%=intl._t("Experts only! Changes B32!")%>)
     744            </th>
     745        </tr>
     746        <tr>
     747            <td colspan="2">
     748                <span class="multiOption">
     749                    <input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
     750                    DSA-SHA1
     751                </span>
    686752           <% if (editBean.isSigTypeAvailable(1)) { %>
    687               <div id="portField" class="rowItem">
    688                 <label>ECDSA-P256</label>
    689                 <input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    690               </div>
     753                <span class="multiOption">
     754                    <input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
     755                    ECDSA-P256
     756                </span>
    691757           <% }
    692758              if (editBean.isSigTypeAvailable(2)) { %>
    693               <div id="portField" class="rowItem">
    694                 <label>ECDSA-P384</label>
    695                 <input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    696               </div>
     759                <span class="multiOption">
     760                    <input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
     761                    ECDSA-P384
     762                </span>
    697763           <% }
    698764              if (editBean.isSigTypeAvailable(3)) { %>
    699               <div id="portField" class="rowItem">
    700                 <label>ECDSA-P521</label>
    701                 <input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    702               </div>
     765                <span class="multiOption">
     766                    <input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
     767                    ECDSA-P521
     768                </span>
    703769           <% }
    704770              if (editBean.isSigTypeAvailable(7)) { %>
    705               <div id="portField" class="rowItem">
    706                 <label>Ed25519-SHA-512</label>
    707                 <input value="7" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    708               </div>
     771                <span class="multiOption">
     772                    <input value="7" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
     773                    Ed25519-SHA-512
     774                </span>
    709775           <% }   // isAvailable %>
    710             </div>
    711                  
    712             <div class="subdivider">
    713                 <hr />
    714             </div>
     776
     777            </td>
     778        </tr>
     779
    715780         <% } // isAdvanced %>
    716                  
    717             <div id="customOptionsField" class="rowItem">
    718                 <label for="customOptions" accesskey="u">
    719                     <%=intl._t("Custom options")%>(<span class="accessKey">u</span>):
    720                 </label>
    721                 <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>               
    722             </div>
    723            
    724             <div class="footer">
    725             </div>
    726         </div>
    727         <div id="globalOperationsPanel" class="panel">
    728             <div class="header"></div>
    729             <div class="footer">
    730                 <div class="toolbox">
     781
     782        <tr>
     783            <th colspan="2">
     784                <%=intl._t("Custom options")%>
     785            </th>
     786        </tr>
     787        <tr>
     788            <td colspan="2">
     789                <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>
     790            </td>
     791        </tr>
     792
     793        <tr>
     794            <td class="buttons" colspan="2">
    731795                    <input type="hidden" value="true" name="removeConfirm" />
    732796                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
    733                     <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%>(<span class="accessKey">D</span>)</button>
    734                     <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%>(<span class="accessKey">S</span>)</button>
    735                 </div>
    736             </div>
    737         </div>
     797                    <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%></button>
     798                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%></button>
     799            </td>
     800        </tr>
     801    </table>
     802</div>
    738803    </form>
    739     <div id="pageFooter">
    740     </div>
     804
    741805<%
    742806
    743807  } else {
    744      %>Tunnels are not initialized yet, please reload in two minutes.<%
     808     %><div id="notReady"><%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%></div><%
    745809  }  // isInitialized()
    746810
  • apps/i2ptunnel/jsp/index.jsp

    r2d8f0c2 r50450ec  
    3030    <% if (indexBean.allowCSS()) {
    3131  %><link rel="icon" href="<%=indexBean.getTheme()%>images/favicon.ico" />
    32     <link href="<%=indexBean.getTheme()%>default.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
    33     <link href="<%=indexBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
     32    <link href="<%=indexBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
    3433    <% }
    3534  %>
    3635</head>
    3736<body id="tunnelListPage">
    38             <div id="pageHeader">
    39     </div>
    40 
    41     <div id="statusMessagePanel" class="panel">
    42         <div class="header">
    43             <h4><%=intl._t("Status Messages")%></h4>
    44         </div>
    45 
    46         <div class="separator">
    47             <hr />
    48         </div>
    49 
     37
     38<div class="panel">
     39    <h2><%=intl._t("Status Messages")%></h2>
     40    <table id="statusMessagesTable">
     41        <tr>
     42            <td id="tunnelMessages">
    5043        <textarea id="statusMessages" rows="4" cols="60" readonly="readonly"><jsp:getProperty name="indexBean" property="messages" /></textarea>
    51 
    52         <div class="separator">
    53             <hr />
    54         </div>
    55 
    56         <div class="footer">
    57             <div class="toolbox">
     44            </td>
     45        </tr>
     46
     47
     48        <tr>
     49            <td class="buttons">
    5850                <a class="control" href="list"><%=intl._t("Refresh")%></a>
    59             </div>
    60         </div>   
    61     </div>
     51            </td>
     52        </tr>
     53    </table>
     54</div>
     55
    6256<%
    6357
     
    6660
    6761%>
    68     <div id="globalOperationsPanel" class="panel">
    69         <div class="header"></div>
    70         <div class="footer">
    71             <div class="toolbox">
     62
     63<div class="panel" id="globalTunnelControl">
     64    <h2><%=intl._t("Global Tunnel Control")%></h2>
     65    <table>
     66        <tr>
     67            <td class="buttons">
    7268                <a class="control" href="wizard"><%=intl._t("Tunnel Wizard")%></a>
    7369                <a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Stop%20all"><%=intl._t("Stop All")%></a>
     
    7874                <a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Reload%20configuration"><%=intl._t("Reload Config")%></a>
    7975--%>
    80             </div>
    81         </div>
    82     </div>
    83 
    84 
    85 
    86     <div id="localServerTunnelList" class="panel">
    87         <div class="header">
    88            
    89     <h4><%=intl._t("I2P Hidden Services")%></h4>
    90         </div>
    91 
    92        
    93   <div class="separator"> </div>
    94 
    95         <div class="nameHeaderField rowItem">
    96             <label><%=intl._t("Name")%>:</label>
    97         </div>
    98         <div class="previewHeaderField rowItem">
    99             <label><%=intl._t("Points at")%>:</label>
    100         </div>
    101         <div class="targetHeaderField rowItem">
    102             <label><%=intl._t("Preview")%>:</label>
    103         </div>
    104         <div class="statusHeaderField rowItem">
    105             <label><%=intl._t("Status")%>:</label>
    106 <hr />        </div>
    107        
     76            </td>
     77        </tr>
     78    </table>
     79</div>
     80
     81<div class="panel">
     82   
     83    <h2><%=intl._t("I2P Hidden Services")%></h2>
     84
     85<table id="serverTunnels">
     86    <tr>
     87        <th class="tunnelName"><%=intl._t("Name")%></th>
     88        <th class="tunnelType"><%=intl._t("Type")%></th>
     89        <th class="tunnelLocation"><%=intl._t("Points at")%></th>
     90        <th class="tunnelPreview"><%=intl._t("Preview")%></th>
     91        <th class="tunnelStatus"><%=intl._t("Status")%></th>
     92        <th class="tunnelControl"><%=intl._t("Control")%></th>
     93    </tr>
     94
    10895        <%
    10996        for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) {
     
    11198           
    11299      %>
    113         <div class="nameField rowItem">
    114             <label><%=intl._t("Name")%>:</label>
    115             <span class="text"><a href="edit?tunnel=<%=curServer%>" title="Edit Server Tunnel Settings for <%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a></span>
    116         </div>
    117         <div class="previewField rowItem">
    118             <label><%=intl._t("Points at")%>:</label>
    119             <span class="text">
     100
     101
     102    <tr class="tunnelProperties">
     103        <td class="tunnelName">
     104            <a href="edit?tunnel=<%=curServer%>" title="<%=intl._t("Edit Server Tunnel Settings for")%>&nbsp;<%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a>
     105        </td>
     106        <td class="tunnelType"><%=indexBean.getTunnelType(curServer)%></td>
     107        <td class="tunnelLocation">
    120108        <%
    121109            if (indexBean.isServerTargetLinkValid(curServer)) {
    122110                if (indexBean.isSSLEnabled(curServer)) { %>
    123                     <a href="https://<%=indexBean.getServerTarget(curServer)%>/" title="Test HTTPS server, bypassing I2P" target="_top"><%=indexBean.getServerTarget(curServer)%> SSL</a>
     111                    <a href="https://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTPS server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%> SSL</a>
    124112             <% } else { %>
    125                     <a href="http://<%=indexBean.getServerTarget(curServer)%>/" title="Test HTTP server, bypassing I2P" target="_top"><%=indexBean.getServerTarget(curServer)%></a>
     113                    <a href="http://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTP server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%></a>
    126114        <%
    127115                }
     
    134122                }
    135123            }
    136           %></span>
    137         </div>
    138         <div class="targetField rowItem">
     124          %>
     125        </td>
     126        <td class="tunnelPreview">
    139127            <%
    140128            if (("httpserver".equals(indexBean.getInternalType(curServer)) || ("httpbidirserver".equals(indexBean.getInternalType(curServer)))) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
    141           %><label><%=intl._t("Preview")%>:</label>   
    142             <a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
     129          %>
     130            <a class="control" title="<%=intl._t("Test HTTP server through I2P")%>" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
    143131            <%
    144132            } else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
    145           %><span class="text"><%=intl._t("Base32 Address")%>:<br /><%=indexBean.getDestHashBase32(curServer)%></span>
     133          %><%=intl._t("Base32 Address")%>:<%=indexBean.getDestHashBase32(curServer)%>
    146134        <%
    147135            } else {
    148           %><span class="comment"><%=intl._t("No Preview")%></span>
     136          %><%=intl._t("No Preview")%>
    149137        <%
    150138            }
    151       %></div>
    152         <div class="statusField rowItem">
    153             <label><%=intl._t("Status")%>:</label>
     139      %>
     140        </td>
     141        <td class="tunnelStatus">
    154142            <%
    155143            switch (indexBean.getTunnelStatus(curServer)) {
    156144                case IndexBean.STARTING:
    157           %><div class="statusStarting text"><%=intl._t("Starting...")%></div>   
    158             <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
     145          %><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
     146        </td>
     147        <td class="tunnelControl">
     148            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
    159149        <%
    160150                break;
    161151                case IndexBean.RUNNING:
    162           %><div class="statusRunning text"><%=intl._t("Running")%></div>   
    163             <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
     152          %><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
     153        </td>
     154        <td class="tunnelControl">
     155            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
    164156        <%
    165157                break;
    166158                case IndexBean.NOT_RUNNING:
    167           %><div class="statusNotRunning text"><%=intl._t("Stopped")%></div>   
    168             <a class="control" title="Start this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
     159          %><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
     160        </td>
     161        <td class="tunnelControl">
     162            <a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
    169163        <%
    170164                break;
    171165            }
    172       %></div>
    173 
    174         <div class="descriptionField rowItem">
    175             <label><%=intl._t("Description")%>:</label>
    176             <div class="text"><%=indexBean.getTunnelDescription(curServer)%></div>
    177         </div>
    178 
    179         <div class="subdivider">
    180             <hr />
    181         </div>
     166      %>
     167        </td>
     168    </tr>
     169    <tr>
     170        <td class="tunnelDescription" colspan="6">
     171            <span class="tunnelDescriptionLabel"><b>Description:</b></span>
     172            <%=indexBean.getTunnelDescription(curServer)%>
     173        </td>
     174    </tr>
     175
    182176        <%
    183177        }
    184178      %>
    185         <div class="separator">
    186             <hr />
    187         </div>
    188            
    189         <div class="footer">
    190             <form id="addNewServerTunnelForm" action="edit">
    191             <div class="toolbox">
    192                    
    193         <label><%=intl._t("New hidden service")%>:</label>
     179
     180    <tr>
     181        <td class="newTunnel" colspan="6">
     182           <form id="addNewServerTunnelForm" action="edit">
     183               <b><%=intl._t("New hidden service")%>:</b>&nbsp;
    194184                    <select name="type">
    195185                        <option value="httpserver">HTTP</option>
     
    200190                    </select>
    201191                    <input class="control" type="submit" value="<%=intl._t("Create")%>" />
    202                 </div>
    203192            </form>
    204         </div>
    205     </div>   
    206 
    207 
    208     <div id="localClientTunnelList" class="panel">
    209         <div class="header">
    210            
    211     <h4><%=intl._t("I2P Client Tunnels")%></h4>
    212         </div>
    213 
    214        
    215   <div class="separator"> </div>
    216        
    217         <div class="nameHeaderField rowItem">
    218             <label><%=intl._t("Name")%>:</label>
    219         </div>
    220         <div class="portHeaderField rowItem">
    221             <label><%=intl._t("Port")%>:</label>
    222         </div>
    223         <div class="typeHeaderField rowItem">
    224             <label><%=intl._t("Type")%>:</label>
    225         </div>
    226         <div class="interfaceHeaderField rowItem">
    227             <label><%=intl._t("Interface")%>:</label>
    228         </div>
    229         <div class="statusHeaderField rowItem">
    230             <label><%=intl._t("Status")%>:</label>
    231         </div>
    232 
    233         <div class="separator">
    234             <hr />
    235         </div>
     193        </td>
     194    </tr>
     195</table>
     196         
     197    <h2><%=intl._t("I2P Client Tunnels")%></h2>
     198
     199<table id="clientTunnels">
     200    <tr>
     201        <th class="tunnelName"><%=intl._t("Name")%></th>
     202        <th class="tunnelType"><%=intl._t("Type")%></th>
     203        <th class="tunnelInterface"><%=intl._t("Interface")%></th>
     204        <th class="tunnelPort"><%=intl._t("Port")%></th>
     205        <th class="tunnelStatus"><%=intl._t("Status")%></th>
     206        <th class="tunnelControl"><%=intl._t("Control")%></th>
     207    </tr>
     208
    236209        <%
    237210        for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) {
    238211            if (!indexBean.isClient(curClient)) continue;
    239       %>
    240         <div class="nameField rowItem">
    241             <label><%=intl._t("Name")%>:</label>
    242             <span class="text"><a href="edit?tunnel=<%=curClient%>" title="Edit Tunnel Settings for <%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a></span>
    243         </div>
    244         <div class="portField rowItem">
    245             <label><%=intl._t("Port")%>:</label>
    246             <span class="text">
    247          <%
    248                String cPort= indexBean.getClientPort2(curClient);
    249                out.write(cPort);
    250                if (indexBean.isSSLEnabled(curClient))
    251                    out.write(" SSL");
    252           %>
    253             </span>
    254         </div>
    255         <div class="typeField rowItem">
    256             <label><%=intl._t("Type")%>:</label>
    257             <span class="text"><%=indexBean.getTunnelType(curClient)%></span>
    258         </div>
    259         <div class="interfaceField rowItem">
    260             <label><%=intl._t("Interface")%>:</label>
    261             <span class="text">
     212      %>       
     213
     214
     215    <tr class="tunnelProperties">
     216        <td class="tunnelName">
     217            <a href="edit?tunnel=<%=curClient%>" title="<%=intl._t("Edit Tunnel Settings for")%>&nbsp;<%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a>
     218        </td>
     219
     220        <td class="tunnelType"><%=indexBean.getTunnelType(curClient)%></td>
     221        <td class="tunnelInterface">
    262222         <%
    263223               /* should only happen for streamr client */
     
    271231               }
    272232          %>
    273             </span>
    274         </div>
    275         <div class="statusField rowItem">
    276             <label><%=intl._t("Status")%>:</label>
     233        </td>
     234        <td class="tunnelPort">
     235         <%
     236               String cPort= indexBean.getClientPort2(curClient);
     237               out.write(cPort);
     238               if (indexBean.isSSLEnabled(curClient))
     239                   out.write(" SSL");
     240          %>
     241        </td>
     242        <td class="tunnelStatus">
    277243            <%
    278244            switch (indexBean.getTunnelStatus(curClient)) {
    279245                case IndexBean.STARTING:
    280           %><div class="statusStarting text"><%=intl._t("Starting...")%></div>
     246          %><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
     247        </td>
     248        <td class="tunnelControl">
     249            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
     250        <%
     251                break;
     252                case IndexBean.STANDBY:
     253          %><div class="statusStarting text" title="<%=intl._t("Standby")%>"><%=intl._t("Standby")%></div>
     254        </td>
     255        <td class="tunnelControl">
    281256            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
    282257        <%
    283258                break;
    284                 case IndexBean.STANDBY:
    285           %><div class="statusStarting text"><%=intl._t("Standby")%></div>
     259                case IndexBean.RUNNING:
     260          %><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
     261        </td>
     262        <td class="tunnelControl">
    286263            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
    287264        <%
    288265                break;
    289                 case IndexBean.RUNNING:
    290           %><div class="statusRunning text"><%=intl._t("Running")%></div>
    291             <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
    292         <%
    293                 break;
    294266                case IndexBean.NOT_RUNNING:
    295           %><div class="statusNotRunning text"><%=intl._t("Stopped")%></div>
    296             <a class="control" title="Start this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
     267          %><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
     268        </td>
     269        <td class="tunnelControl">
     270            <a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
    297271        <%
    298272                break;
    299273            }
    300       %></div>
    301 
    302         <div class="destinationField rowItem">
    303             <label>
     274      %>
     275        </td>
     276    </tr>
     277    <tr>
     278        <td class="tunnelDestination" colspan="6">
     279            <span class="tunnelDestinationLabel">
    304280            <% if ("httpclient".equals(indexBean.getInternalType(curClient)) || "connectclient".equals(indexBean.getInternalType(curClient)) ||
    305281                   "sockstunnel".equals(indexBean.getInternalType(curClient)) || "socksirctunnel".equals(indexBean.getInternalType(curClient))) { %>
    306                 <%=intl._t("Outproxy")%>:
     282                <b><%=intl._t("Outproxy")%>:</b>
    307283            <% } else { %>
    308                 <%=intl._t("Destination")%>:
     284                <b><%=intl._t("Destination")%>:</b>
    309285            <% } %>
    310             </label>
    311             <div class="text">
     286</span>
    312287            <%
    313288               if (indexBean.getIsUsingOutproxyPlugin(curClient)) {
     
    323298                   }
    324299               } %>
    325             </div>
    326         </div>
     300        </td>
     301    </tr>
    327302        <% /* TODO SSL outproxy for httpclient if plugin not present */ %>
    328 
    329         <div class="descriptionField rowItem">
    330             <label><%=intl._t("Description")%>:</label>
    331             <div class="text"><%=indexBean.getTunnelDescription(curClient)%></div>
    332         </div>
    333 
    334         <div class="subdivider">
    335             <hr />
    336         </div>
     303    <tr>
     304        <td class="tunnelDescription" colspan="6">
     305            <span class="tunnelDescriptionLabel"><b><%=intl._t("Description")%>:</b></span>
     306            <%=indexBean.getTunnelDescription(curClient)%>
     307        </td>
     308    </tr>
    337309        <%
    338310        }
    339       %>           
    340         <div class="separator">
    341             <hr />
    342         </div>
    343    
    344         <div class="footer">
     311      %>
     312    <tr>
     313        <td class="newTunnel" colspan="6">
    345314            <form id="addNewClientTunnelForm" action="edit">
    346                 <div class="toolbox">
    347                    
    348         <label><%=intl._t("New client tunnel")%>:</label>
     315                <b><%=intl._t("New client tunnel")%>:</b>&nbsp;
    349316                    <select name="type">
    350317                        <option value="client"><%=intl._t("Standard")%></option>
     
    357324                    </select>
    358325                    <input class="control" type="submit" value="<%=intl._t("Create")%>" />
    359                 </div>
    360326            </form>
    361         </div>
    362     </div>
     327        </td>
     328    </tr>
     329</table>
     330</div>
     331
    363332<%
    364333
     
    366335
    367336%>
    368     <div id="pageFooter">
    369     </div>
     337
    370338</body>
    371339</html>
  • apps/i2ptunnel/jsp/register.jsp

    r2d8f0c2 r50450ec  
    3030    <% if (editBean.allowCSS()) {
    3131  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
    32     <link href="<%=editBean.getTheme()%>default.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
    33     <link href="<%=editBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
     32    <link href="<%=editBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
    3433    <% }
    3534  %>
     
    3837</style>
    3938</head>
    40 <body id="tunnelEditPage">
    41     <div id="pageHeader">
    42     </div>
     39<body id="tunnelRegistration">
     40
    4341<%
    4442
     
    4745%>
    4846    <form method="post" enctype="multipart/form-data" action="register" accept-charset="UTF-8">
    49         <div id="tunnelEditPanel" class="panel">
    50             <div class="header">
     47        <div class="panel" id="registration">
    5148<%
    5249    String tunnelTypeName;
     
    5653        tunnelTypeName = editBean.getTunnelType(curTunnel);
    5754        tunnelType = editBean.getInternalType(curTunnel);
    58       %><h4><%=intl._t("Registration Helper")%></h4><%
     55      %><h2><%=intl._t("Registration Helper")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><%
    5956    } else {
    6057        tunnelTypeName = "new";
    6158        tunnelType = "new";
    62       %><h4>Fail</h4><p>Tunnel not found</p><%
     59      %><h2>Fail</h2><p>Tunnel not found</p><%
    6360    }
    6461    String b64 = editBean.getDestinationBase64(curTunnel);
     
    7168                <input type="hidden" name="type" value="<%=tunnelType%>" />
    7269                <input type="submit" class="default" name="action" value="Save changes" />
    73             </div>
    7470<%
    7571    if (!"new".equals(tunnelType)) {     
    7672%>
    77   <div class="rowItem"><span class="comment">
     73
     74<table>
     75    <tr>
     76        <td class="infohelp">
    7877    <%=intl._t("Please be sure to select, copy, and paste the entire contents of the appropriate authentication data into the form of your favorite registration site")%>
    79   </span><br /></div>
    80             <div class="separator">
    81                 <hr />
    82             </div>
    83             <div id="nameField" class="rowItem">
    84                 <label for="name" accesskey="N">
    85                     <%=intl._t("Name")%>
    86                 </label>
    87                 <span class="text"><%=editBean.getTunnelName(curTunnel)%></span>
    88             </div>
     78        </td>
     79    </tr>
     80    <tr>
     81        <td>
     82            <b><%=intl._t("Tunnel Name")%>:</b> <%=editBean.getTunnelName(curTunnel)%>
     83        </td>
     84    </tr>
     85
    8986<%           
    9087      if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    91           %><div id="websiteField" class="rowItem">
    92                 <label for="spoofedHost" accesskey="W">
    93                     <%=intl._t("Website name")%>
    94                 </label>
    95                 <span class="text"><%=editBean.getSpoofedHost(curTunnel)%></span>   
    96             </div>
     88          %>
     89    <tr><td><b><%=intl._t("Website Name")%>:</b> <%=editBean.getSpoofedHost(curTunnel)%></td></tr>
    9790<%
    9891       }
    9992%>
    100             <div id="destinationField" class="rowItem">
    101                 <label for="localDestination" accesskey="L">
    102                     <%=intl._t("Local destination")%>
    103                 </label>
    104                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>               
    105             </div>
    106             <div class="subdivider">
    107                 <hr />
    108             </div>
     93
     94    <tr>
     95        <th>
     96            <b><%=intl._t("Local Destination")%></b>
     97        </th>
     98    </tr>
     99    <tr>
     100        <td>
     101            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>
     102        </td>
     103    </tr>
     104
    109105<%
    110106       if (b64 == null || b64.length() < 516) {
    111            %><%=intl._t("Local destination is not available. Start the tunnel.")%><%
     107           %><tr><td class="infohelp"><%=intl._t("Local destination is not available. Start the tunnel.")%></td></tr><%
    112108       } else if (name == null || name.equals("") || name.contains(" ") || !name.endsWith(".i2p")) {
    113109           if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    114                %><%=intl._t("To enable registration verification, edit tunnel and set name (or website name) to a valid host name ending in '.i2p'")%><%
     110               %><tr><td class="infohelp"><%=intl._t("To enable registration verification, edit tunnel and set name (or website name) to a valid host name ending in '.i2p'")%></td></tr><%
    115111           } else {
    116                %><%=intl._t("To enable registration verification, edit tunnel and set name to a valid host name ending in '.i2p'")%><%
     112               %><tr><td class="infohelp"><%=intl._t("To enable registration verification, edit tunnel and set name to a valid host name ending in '.i2p'")%></td></tr><%
    117113           }
    118114       } else {
    119115           SigningPrivateKey spk = editBean.getSigningPrivateKey(curTunnel);
    120116           if (spk == null) {
    121                %><%=intl._t("Destination signing key is not available. Start the tunnel.")%><%
     117               %><tr><td class="infohelp"><%=intl._t("Destination signing key is not available. Start the tunnel.")%></td></tr><%
    122118           } else {
    123119               valid = true;
     
    125121               HostTxtEntry he = new HostTxtEntry(name, b64, props);
    126122               he.sign(spk);
    127           %><div id="sigField" class="rowItem">
    128                 <label for="signature">
    129                     <%=intl._t("Authentication for adding host")%>
    130                 </label>
    131                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    132             </div>
    133         </div>
    134         <div id="tunnelAdvancedNetworking" class="panel">
    135             <div class="header">
    136                 <h4><%=intl._t("Advanced authentication strings")%></h4>
    137             </div>
     123          %>
     124
     125    <tr>
     126        <th>
     127            <%=intl._t("Authentication for adding host {0}", name)%>
     128        </th>
     129    </tr>
     130    <tr>
     131        <td>
     132            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
     133        </td>
     134    </tr>
     135</table>
     136
     137<h3><%=intl._t("Advanced authentication strings")%></h3>
     138
    138139<%
    139140               props.remove(HostTxtEntry.PROP_SIG);
    140141               props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_REMOVE);
    141142               he.signRemove(spk);
    142           %><div id="sigField" class="rowItem">
    143                 <label for="signature">
    144                     <%=intl._t("Authentication for removing host")%>
    145                 </label>
    146                 <textarea rows="1" style="height: 3em; margin: 0 10px 0 0;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeRemove(out); %></textarea>               
    147                 <span class="comment"><%=intl._t("This will remove the entry for {0}", name)%></span>
    148             </div>
    149             <div class="separator">
    150                 <hr />
    151             </div>
     143          %>
     144         
     145<table>
     146    <tr>
     147        <th>
     148            <%=intl._t("Authentication for removing host {0}", name)%>
     149        </th>
     150    </tr>
     151    <tr>
     152        <td>
     153            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.writeRemove(out); %></textarea>
     154        </td>
     155    </tr>
     156
    152157<%
    153158               String oldname = wrequest.getParameter("oldname");
     
    172177               }
    173178               props.remove(HostTxtEntry.PROP_SIG);
    174           %><div id="sigField" class="rowItem">
    175                 <label for="signature">
     179          %>
     180    <tr>
     181        <th>
    176182                    <%=intl._t("Authentication for changing name")%>
    177                 </label>
     183        </th>
     184    </tr>
    178185<%
    179186               if (oldname != null && oldname.length() > 0 && !oldname.equals(name)) {
     
    181188                   props.setProperty(HostTxtEntry.PROP_OLDNAME, oldname);
    182189                   he.sign(spk);
    183                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    184                 <span class="comment"><%=intl._t("This will change the name from {0} to {1}, using the same destination", oldname, name)%></span>
     190                %>
     191    <tr>
     192        <td>
     193            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
     194        </td>
     195    </tr>
     196    <tr>
     197        <td class="infohelp">
     198            <%=intl._t("This will change the name from {0} to {1}, using the same destination", oldname, name)%>
     199        </td>
     200    </tr>
     201
    185202<%
    186203               } else {
    187                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new host name.")%></span>
    188                   <span class="comment"><%=intl._t("Enter old host name below.")%></span>
    189 <%
    190                }
    191           %></div>
    192             <div class="separator">
    193                 <hr />
    194             </div>
    195 <%
    196                props.remove(HostTxtEntry.PROP_SIG);
    197           %><div id="sigField" class="rowItem">
    198                 <label for="signature">
     204                %><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new host name.")%>
     205                  &nbsp;<%=intl._t("Enter old hostname below.")%></td></tr>
     206<%
     207               }
     208          %>
     209
     210<%
     211               props.remove(HostTxtEntry.PROP_SIG);
     212          %>
     213    <tr>
     214        <th>
    199215                    <%=intl._t("Authentication for adding alias")%>
    200                 </label>
     216        </th>
     217    </tr>
    201218<%
    202219               if (oldname != null && oldname.length() > 0 && !oldname.equals(name)) {
     
    204221                   props.setProperty(HostTxtEntry.PROP_OLDNAME, oldname);
    205222                   he.sign(spk);
    206                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    207                 <span class="comment"><%=intl._t("This will add an alias {0} for {1}, using the same destination", name, oldname)%></span>
     223                %>
     224    <tr>
     225        <td>
     226            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
     227        </td>
     228    </tr>
     229    <tr>
     230        <td class="infohelp">
     231            <%=intl._t("This will add an alias {0} for {1}, using the same destination", name, oldname)%>
     232        </td>
     233    </tr>
    208234<%
    209235               } else {
    210                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new host name.")%></span>
    211                   <span class="comment"><%=intl._t("Enter old host name below.")%></span>
    212 <%
    213                }
    214           %></div>
    215             <div class="separator">
    216                 <hr />
    217             </div>
    218 <%
    219                props.remove(HostTxtEntry.PROP_SIG);
    220           %><div id="sigField" class="rowItem">
    221                 <label for="signature">
     236                %><tr> <td class="infohelp"><%=intl._t("This tunnel must be configured with the new host name.")%>
     237                  &nbsp;<%=intl._t("Enter old hostname below.")%></td></tr>
     238<%
     239               }
     240          %>
     241         
     242<%
     243               props.remove(HostTxtEntry.PROP_SIG);
     244          %>
     245
     246    <tr>
     247        <th>
    222248                    <%=intl._t("Authentication for changing destination")%>
    223                 </label>
     249        </th>
     250    </tr>
     251
    224252<%
    225253               if (spk2 != null) {
     
    228256                   he.signInner(spk2);
    229257                   he.sign(spk);
    230                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    231                 <span class="comment"><%=intl._t("This will change the destination for {0}", name)%></span>
     258                %>
     259
     260    <tr>
     261        <td>
     262            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
     263        </td>
     264    </tr>
     265    <tr>
     266        <td class="infohelp">
     267            <%=intl._t("This will change the destination for {0}", name)%>
     268        </td>
     269    </tr>
     270
    232271<%
    233272               } else {
    234                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new destination.")%></span>
    235                   <span class="comment"><%=intl._t("Enter old destination below.")%></span>
    236 <%
    237                }
    238           %></div>
    239             <div class="separator">
    240                 <hr />
    241             </div>
     273                %><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new destination.")%>
     274                  &nbsp;<%=intl._t("Enter old destination below.")%></td></tr>
     275<%
     276               }
     277          %>
     278
    242279<%
    243280               props.remove(HostTxtEntry.PROP_SIG);
    244281               props.remove(HostTxtEntry.PROP_OLDSIG);
    245           %><div id="sigField" class="rowItem">
    246                 <label for="signature" style="height: 42px;" >
     282          %>
     283         
     284    <tr>
     285        <th>
    247286                    <%=intl._t("Authentication for adding alternate destination")%>
    248                 </label>
     287        </th>
     288    </tr>
     289
    249290<%
    250291               if (spk2 != null) {
     
    253294                   he.signInner(spk2);
    254295                   he.sign(spk);
    255                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    256                 <span class="comment"><%=intl._t("This will add an alternate destination for {0}", name)%></span>
     296                %>
     297    <tr>
     298        <td>
     299            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
     300        </td>
     301    </tr>
     302    <tr>
     303        <td class="infohelp">
     304            <%=intl._t("This will add an alternate destination for {0}", name)%>
     305        </td>
     306    </tr>
    257307<%
    258308               } else {
    259                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new destination.")%></span>
    260                   <span class="comment"><%=intl._t("Enter old destination below.")%></span>
    261 <%
    262                }
    263           %></div>
    264             <div class="separator">
    265                 <hr />
    266             </div>
    267 <%
     309                %><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new destination.")%>
     310                  &nbsp;<%=intl._t("Enter old destination below.")%></td></tr>
     311<%
     312               }
     313          %>
     314         
     315<%
     316
     317
    268318               props.remove(HostTxtEntry.PROP_SIG);
    269319               props.remove(HostTxtEntry.PROP_OLDSIG);
    270           %><div id="sigField" class="rowItem">
    271                 <label for="signature">
     320          %>
     321
     322    <tr>
     323        <th>
    272324                    <%=intl._t("Authentication for adding subdomain")%>
    273                 </label>
     325        </th>
     326    </tr>
    274327<%
    275328               if (oldname != null && oldname.length() > 0 && !oldname.equals(name) && spk2 != null) {
     
    279332                   he.signInner(spk2);
    280333                   he.sign(spk);
    281                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    282                 <span class="comment"><%=intl._t("This will add a subdomain {0} of {1}, with a different destination", name, oldname)%></span>
     334                %>
     335               
     336    <tr>
     337        <td>
     338            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
     339        </td>
     340    </tr>
     341    <tr>
     342        <td class="infohelp">
     343            <%=intl._t("This will add a subdomain {0} of {1}, with a different destination", name, oldname)%>
     344        </td>
     345    </tr>
     346
    283347<%
    284348               } else {
    285                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new subdomain and destination.")%></span>
    286                   <span class="comment"><%=intl._t("Enter higher-level domain and destination below.")%></span>
    287 <%
    288                }
    289           %></div>
    290 
    291           <div class="footer">
    292             </div>
     349                %>
     350    <tr>
     351        <td class="infohelp">
     352            <%=intl._t("This tunnel must be configured with the new subdomain and destination.")%>
     353            &nbsp;<%=intl._t("Enter higher-level domain and destination below.")%>
     354        </td>
     355    </tr>
     356
     357<%
     358               }
     359          %>
     360
    293361<%
    294362          }  // spk != null