Changeset c620420


Ignore:
Timestamp:
Jan 20, 2009 5:24:28 PM (12 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
10e2c38
Parents:
6be5494
Message:
  • I2PTunnel Edit Pages:
    • Change default length to 2+0
    • Cleanup helper code
    • Stub out the following new options (C=client, S=server): + Access list (S) + Certificate type (S) + Encrypted LeaseSet? (S) + New dest on idle restart © + Tunnel closure on idle © + Tunnel reduction on idle (C,S)
Location:
apps/i2ptunnel
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java

    r6be5494 rc620420  
    99 */
    1010
     11import java.util.Arrays;
     12import java.util.HashSet;
    1113import java.util.Iterator;
    1214import java.util.List;
    1315import java.util.Properties;
     16import java.util.Set;
    1417import java.util.StringTokenizer;
    1518
     
    8386   
    8487    public boolean shouldDelay(int tunnel) {
     88        return getProperty(tunnel, "i2p.streaming.connectDelay", 0) > 0;
     89    }
     90   
     91    public boolean isInteractive(int tunnel) {
     92        return getProperty(tunnel, "i2p.streaming.maxWindowSize", 128) == 12;
     93    }
     94   
     95    public int getTunnelDepth(int tunnel, int defaultLength) {
     96        return getProperty(tunnel, "inbound.length", defaultLength);
     97    }
     98   
     99    public int getTunnelQuantity(int tunnel, int defaultQuantity) {
     100        return getProperty(tunnel, "inbound.quantity", defaultQuantity);
     101    }
     102   
     103    public int getTunnelBackupQuantity(int tunnel, int defaultBackupQuantity) {
     104        return getProperty(tunnel, "inbound.backupQuantity", defaultBackupQuantity);
     105    }
     106 
     107    public int getTunnelVariance(int tunnel, int defaultVariance) {
     108        return getProperty(tunnel, "inbound.lengthVariance", defaultVariance);
     109    }
     110   
     111    public boolean getReduce(int tunnel) {
     112        return false;
     113    }
     114   
     115    public int getReduceCount(int tunnel) {
     116        return getProperty(tunnel, "inbound.reduceQuantity", 1);
     117    }
     118   
     119    public int getReduceTime(int tunnel) {
     120        return getProperty(tunnel, "reduceIdleTime", 20);
     121    }
     122   
     123    public int getCert(int tunnel) {
     124        return 0;
     125    }
     126   
     127    public int getEffort(int tunnel) {
     128        return 23;
     129    }
     130   
     131    public String getSigner(int tunnel) {
     132        return "";
     133    }
     134   
     135    public boolean getEncrypt(int tunnel) {
     136        return false;
     137    }
     138   
     139    public String getEncryptKey(int tunnel) {
     140        return getProperty(tunnel, "encryptKey", "");
     141    }
     142   
     143    public boolean getAccess(int tunnel) {
     144        return false;
     145    }
     146   
     147    public String getAccessList(int tunnel) {
     148        return getProperty(tunnel, "accessList", "");
     149    }
     150   
     151    public boolean getClose(int tunnel) {
     152        return false;
     153    }
     154   
     155    public boolean getNewDest(int tunnel) {
     156        return false;
     157    }
     158   
     159    private int getProperty(int tunnel, String prop, int def) {
    85160        TunnelController tun = getController(tunnel);
    86161        if (tun != null) {
    87162            Properties opts = getOptions(tun);
    88163            if (opts != null) {
    89                 String delay = opts.getProperty("i2p.streaming.connectDelay");
    90                 if ( (delay == null) || ("0".equals(delay)) )
    91                     return false;
    92                 else
    93                     return true;
    94             } else {
    95                 return false;
     164                String s = opts.getProperty(prop);
     165                if (s == null) return def;
     166                try {
     167                    return Integer.parseInt(s);
     168                } catch (NumberFormatException nfe) {}
    96169            }
    97         } else {
    98             return false;
    99         }
    100     }
    101    
    102     public boolean isInteractive(int tunnel) {
     170        }
     171        return def;
     172    }
     173   
     174    private String getProperty(int tunnel, String prop, String def) {
    103175        TunnelController tun = getController(tunnel);
    104176        if (tun != null) {
    105177            Properties opts = getOptions(tun);
    106             if (opts != null) {
    107                 String wsiz = opts.getProperty("i2p.streaming.maxWindowSize");
    108                 if ( (wsiz == null) || (!"1".equals(wsiz)) )
    109                     return false;
    110                 else
    111                     return true;
    112             } else {
    113                 return false;
    114             }
    115         } else {
    116             return false;
    117         }
    118     }
    119    
    120     public int getTunnelDepth(int tunnel, int defaultLength) {
    121         TunnelController tun = getController(tunnel);
    122         if (tun != null) {
    123             Properties opts = getOptions(tun);
    124             if (opts != null) {
    125                 String len = opts.getProperty("inbound.length");
    126                 if (len == null) return defaultLength;
    127                 try {
    128                     return Integer.parseInt(len);
    129                 } catch (NumberFormatException nfe) {
    130                     return defaultLength;
    131                 }
    132             } else {
    133                 return defaultLength;
    134             }
    135         } else {
    136             return defaultLength;
    137         }
    138     }
    139    
    140     public int getTunnelQuantity(int tunnel, int defaultQuantity) {
    141         TunnelController tun = getController(tunnel);
    142         if (tun != null) {
    143             Properties opts = getOptions(tun);
    144             if (opts != null) {
    145                 String len = opts.getProperty("inbound.quantity");
    146                 if (len == null) return defaultQuantity;
    147                 try {
    148                     return Integer.parseInt(len);
    149                 } catch (NumberFormatException nfe) {
    150                     return defaultQuantity;
    151                 }
    152             } else {
    153                 return defaultQuantity;
    154             }
    155         } else {
    156             return defaultQuantity;
    157         }
    158     }
    159    
    160     public int getTunnelBackupQuantity(int tunnel, int defaultBackupQuantity) {
    161         TunnelController tun = getController(tunnel);
    162         if (tun != null) {
    163             Properties opts = getOptions(tun);
    164             if (opts != null) {
    165                 String len = opts.getProperty("inbound.backupQuantity");
    166                 if (len == null) return defaultBackupQuantity;
    167                 try {
    168                     return Integer.parseInt(len);
    169                 } catch (NumberFormatException nfe) {
    170                     return defaultBackupQuantity;
    171                 }
    172             } else {
    173                 return defaultBackupQuantity;
    174             }
    175         } else {
    176             return defaultBackupQuantity;
    177         }
    178     }
    179  
    180     public int getTunnelVariance(int tunnel, int defaultVariance) {
    181         TunnelController tun = getController(tunnel);
    182         if (tun != null) {
    183             Properties opts = getOptions(tun);
    184             if (opts != null) {
    185                 String len = opts.getProperty("inbound.lengthVariance");
    186                 if (len == null) return defaultVariance;
    187                 try {
    188                     return Integer.parseInt(len);
    189                 } catch (NumberFormatException nfe) {
    190                     return defaultVariance;
    191                 }
    192             } else {
    193                 return defaultVariance;
    194             }
    195         } else {
    196             return defaultVariance;
    197         }
     178            if (opts != null)
     179                return opts.getProperty(prop, def);
     180        }
     181        return def;
    198182    }
    199183   
     
    213197            return "7654";
    214198    }
     199
     200    private static final String noShowProps[] = {
     201        "inbound.length", "outbound.length", "inbound.lengthVariance", "outbound.lengthVariance",
     202        "inbound.backupQuantity", "outbound.backupQuantity", "inbound.quantity", "outbound.quantity",
     203        "inbound.nickname", "outbound.nickname", "i2p.streaming.connectDelay", "i2p.streaming.maxWindowSize"
     204        };
     205    private static final Set noShowSet = new HashSet(noShowProps.length);
     206    static { noShowSet.addAll(Arrays.asList(noShowProps)); }
    215207
    216208    public String getCustomOptions(int tunnel) {
     
    223215            for (Iterator iter = opts.keySet().iterator(); iter.hasNext(); ) {
    224216                String key = (String)iter.next();
     217                if (noShowSet.contains(key))
     218                    continue;
    225219                String val = opts.getProperty(key);
    226                 if ("inbound.length".equals(key)) continue;
    227                 if ("outbound.length".equals(key)) continue;
    228                 if ("inbound.lengthVariance".equals(key)) continue;
    229                 if ("outbound.lengthVariance".equals(key)) continue;
    230                 if ("inbound.backupQuantity".equals(key)) continue;
    231                 if ("outbound.backupQuantity".equals(key)) continue;
    232                 if ("inbound.quantity".equals(key)) continue;
    233                 if ("outbound.quantity".equals(key)) continue;
    234                 if ("inbound.nickname".equals(key)) continue;
    235                 if ("outbound.nickname".equals(key)) continue;
    236                 if ("i2p.streaming.connectDelay".equals(key)) continue;
    237                 if ("i2p.streaming.maxWindowSize".equals(key)) continue;
    238220                if (i != 0) buf.append(' ');
    239221                buf.append(key).append('=').append(val);
  • apps/i2ptunnel/jsp/editClient.jsp

    r6be5494 rc620420  
    208208                    <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, -1);
    209209                  %><option value="0"<%=(tunnelVariance  ==  0 ? " selected=\"selected\"" : "") %>>0 hop variance (no randomisation, consistant performance)</option>
    210                     <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>>+/- 0-1 hop variance (standard randomisation, standard performance)</option>
    211                     <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>>+/- 0-2 hop variance (high randomisation, variable performance)</option>
    212210                    <option value="1"<%=(tunnelVariance  ==  1 ? " selected=\"selected\"" : "") %>>+ 0-1 hop variance (medium additive randomisation, subtractive performance)</option>
    213211                    <option value="2"<%=(tunnelVariance  ==  2 ? " selected=\"selected\"" : "") %>>+ 0-2 hop variance (high additive randomisation, subtractive performance)</option>
     212                    <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>>+/- 0-1 hop variance (standard randomisation, standard performance)</option>
     213                    <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>>+/- 0-2 hop variance (not recommended)</option>
    214214                <% if (tunnelVariance > 2 || tunnelVariance < -2) {
    215215                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> hop variance</option>
     
    266266                <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" />               
    267267            </div>
     268                 
     269            <div class="subdivider">
     270                <hr />
     271            </div>
     272           
     273            <div id="optionsField" class="rowItem">
     274                <label for="reduce" accesskey="c">
     275                    <span class="accessKey">C</span>lose tunnels when idle:
     276                </label>
     277            </div>
     278            <div id="portField" class="rowItem">
     279                <label for="access" accesskey="c">
     280                    Enable:
     281                </label>
     282                <input value="1" type="checkbox" id="startOnLoad" name="close" title="Close Tunnels"<%=(editBean.getClose(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
     283            </div>
     284            <div id="portField" class="rowItem">
     285                <label for="access" accesskey="c">
     286                    Generate New Destination Keys On Reopen:
     287                </label>
     288                <input value="1" type="checkbox" id="startOnLoad" name="newDest" title="New Destination"<%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
     289            </div>
     290            <div id="portField" class="rowItem">
     291                <label for="reduceTime" accesskey="c">
     292                    Reduce when idle (minutes):
     293                </label>
     294                <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />               
     295            </div>
     296                 
     297            <div class="subdivider">
     298                <hr />
     299            </div>
     300           
     301            <div id="optionsField" class="rowItem">
     302                <label for="reduce" accesskey="d">
     303                    Re<span class="accessKey">d</span>uce tunnel quantity when idle:
     304                </label>
     305            </div>
     306            <div id="portField" class="rowItem">
     307                <label for="access" accesskey="d">
     308                    Enable:
     309                </label>
     310                <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
     311            </div>
     312            <div id="portField" class="rowItem">
     313                <label for="reduceCount" accesskey="d">
     314                    Reduced tunnel count:
     315                </label>
     316                <input type="text" id="port" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext" />               
     317            </div>
     318            <div id="portField" class="rowItem">
     319                <label for="reduceTime" accesskey="d">
     320                    Reduce when idle (minutes):
     321                </label>
     322                <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />               
     323            </div>
    268324           
    269325            <div class="subdivider">
     
    285341            <div class="footer">
    286342                <div class="toolbox">
     343                    <span class="comment">NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted</span>
    287344                    <input type="hidden" value="true" name="removeConfirm" />
    288                     <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button><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"><span class="accessKey">D</span>elete</button>
     345                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button>
     346                    <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"><span class="accessKey">D</span>elete</button>
    289347                </div>
    290348            </div>
  • apps/i2ptunnel/jsp/editServer.jsp

    r6be5494 rc620420  
    178178                </label>
    179179                <select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Depth" class="selectbox">
    180                     <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, -1);
     180                    <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
    181181                  %><option value="0"<%=(tunnelVariance  ==  0 ? " selected=\"selected\"" : "") %>>0 hop variance          (no randomisation, consistant performance)</option>
    182                     <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>>+/- 0-1 hop variance    (standard randomisation, standard performance)</option>
    183                     <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>>+/- 0-2 hop variance    (high randomisation, variable performance)</option>
    184182                    <option value="1"<%=(tunnelVariance  ==  1 ? " selected=\"selected\"" : "") %>>+ 0-1 hop variance      (medium additive randomisation, subtractive performance)</option>
    185183                    <option value="2"<%=(tunnelVariance  ==  2 ? " selected=\"selected\"" : "") %>>+ 0-2 hop variance      (high additive randomisation, subtractive performance)</option>
     184                    <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>>+/- 0-1 hop variance    (standard randomisation, standard performance)</option>
     185                    <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>>+/- 0-2 hop variance    (not recommended)</option>
    186186                <% if (tunnelVariance > 2 || tunnelVariance < -2) {
    187187                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> hop variance</option>
     
    243243            </div>
    244244           
     245            <div id="optionsField" class="rowItem">
     246                <label for="encrypt" accesskey="e">
     247                    <span class="accessKey">E</span>ncrypt Leaseset:
     248                </label>
     249            </div>
     250            <div id="portField" class="rowItem">
     251                <label for="encrypt" accesskey="e">
     252                    Enable:
     253                </label>
     254                <input value="1" type="checkbox" id="startOnLoad" name="encrypt" title="Encrypt LeaseSet"<%=(editBean.getEncrypt(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
     255            </div>
     256            <div id="hostField" class="rowItem">
     257                <label for="encrypt" accesskey="e">
     258                    Leaseset Encryption Key:
     259                </label>
     260                <input type="text" id="hostField" name="encryptKey" size="60" title="Encrypt Key" value="<%=editBean.getEncryptKey(curTunnel)%>" class="freetext" />               
     261                <span class="comment">(Users will require this key)</span>
     262            </div>
     263                 
     264            <div class="subdivider">
     265                <hr />
     266            </div>
     267           
     268            <div id="optionsField" class="rowItem">
     269                <label for="access" accesskey="s">
     270                    Restricted Acce<span class="accessKey">s</span>s List:
     271                </label>
     272            </div>
     273            <div id="portField" class="rowItem">
     274                <label for="access" accesskey="s">
     275                    Enable:
     276                </label>
     277                <input value="1" type="checkbox" id="startOnLoad" name="access" title="Enable Access List"<%=(editBean.getAccess(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
     278            </div>
     279            <div id="hostField" class="rowItem">
     280                <label for="accessList" accesskey="s">
     281                    Access List:
     282                </label>
     283                <textarea rows="2" cols="60" id="hostField" title="Access List" wrap="off"><%=editBean.getAccessList(curTunnel)%></textarea>               
     284                <span class="comment">(Restrict to these clients only)</span>
     285            </div>
     286                 
     287            <div class="subdivider">
     288                <hr />
     289            </div>
     290           
     291            <div id="optionsField" class="rowItem">
     292                <label for="reduce" accesskey="d">
     293                    Re<span class="accessKey">d</span>uce tunnel quantity when idle:
     294                </label>
     295            </div>
     296            <div id="portField" class="rowItem">
     297                <label for="access" accesskey="d">
     298                    Enable:
     299                </label>
     300                <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
     301            </div>
     302            <div id="portField" class="rowItem">
     303                <label for="reduceCount" accesskey="d">
     304                    Reduced tunnel count:
     305                </label>
     306                <input type="text" id="port" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext" />               
     307            </div>
     308            <div id="portField" class="rowItem">
     309                <label for="reduceTime" accesskey="d">
     310                    Reduce when idle (minutes):
     311                </label>
     312                <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />               
     313            </div>
     314
     315            <div class="subdivider">
     316                <hr />
     317            </div>
     318           
     319            <div id="tunnelOptionsField" class="rowItem">
     320                <label for="cert" accesskey="c">
     321                    <span class="accessKey">C</span>ertificate type:
     322                </label>
     323            </div>
     324            <div id="hostField" class="rowItem">
     325              <div id="portField" class="rowItem">
     326                <label>None</label>
     327                <input value="0" type="radio" id="startOnLoad" name="cert" title="No Certificate"<%=(editBean.getCert(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" />               
     328                <span class="comment"></span>
     329              </div>
     330              <div id="portField" class="rowItem">
     331                <label>Hashcash (effort)</label>
     332                <input value="1" type="radio" id="startOnLoad" name="cert" title="Hashcash Certificate"<%=(editBean.getCert(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" />               
     333                <input type="text" id="port" name="effort" size="2" title="Hashcash Effort" value="<%=editBean.getEffort(curTunnel)%>" class="freetext" />               
     334              </div>
     335            </div>
     336            <div id="portField" class="rowItem">
     337                <label for="force" accesskey="c">
     338                    Estimate Hashcash Calc Time:
     339                </label>
     340                <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Estimate Calculation Time" title="Estimate Calculation Time">Estimate</button>
     341            </div>
     342            <div id="hostField" class="rowItem">
     343              <div id="portField" class="rowItem">
     344                <label>Hidden</label>
     345                <input value="2" type="radio" id="startOnLoad" name="cert" title="Hidden Certificate"<%=(editBean.getCert(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />               
     346                <span class="comment"></span>
     347              </div>
     348              <div id="portField" class="rowItem">
     349                <label for="signer" accesskey="c">
     350                    Signed (signed by):
     351                </label>
     352                <input value="3" type="radio" id="startOnLoad" name="cert" title="Signed Certificate"<%=(editBean.getCert(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" />               
     353                <input type="text" id="port" name="signer" size="50" title="Cert Signer" value="<%=editBean.getSigner(curTunnel)%>" class="freetext" />               
     354                <span class="comment"></span>
     355              </div>
     356            </div>
     357            <div id="portField" class="rowItem">
     358                <label for="force" accesskey="c">
     359                    Modify Certificate:
     360                </label>
     361                <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Modify Cert Now" title="Force New Cert Now">Modify</button>
     362                <span class="comment">(Tunnel must be stopped first)</span>
     363            </div>
     364                 
     365            <div class="subdivider">
     366                <hr />
     367            </div>
     368                 
    245369            <div id="customOptionsField" class="rowItem">
    246370                <label for="customOptions" accesskey="u">
     
    257381            <div class="footer">
    258382                <div class="toolbox">
     383                    <span class="comment">NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted</span>
    259384                    <input type="hidden" value="true" name="removeConfirm" />
    260                     <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button><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"><span class="accessKey">D</span>elete</button>
     385                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button>
     386                    <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"><span class="accessKey">D</span>elete</button>
    261387                </div>
    262388            </div>
Note: See TracChangeset for help on using the changeset viewer.