Author: j16sdiz
Date: 2008-06-16 12:45:45 +0000 (Mon, 16 Jun 2008)
New Revision: 20360

Modified:
   branches/saltedhashstore/freenet/README
   branches/saltedhashstore/freenet/src/freenet/client/ArchiveContext.java
   branches/saltedhashstore/freenet/src/freenet/client/Metadata.java
   
branches/saltedhashstore/freenet/src/freenet/client/async/ClientRequestScheduler.java
   branches/saltedhashstore/freenet/src/freenet/client/async/USKFetcher.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/ConfigToadlet.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectivityToadlet.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/PageMaker.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/StatisticsToadlet.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/WelcomeToadlet.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
   branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java
   branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
   
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
   
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
   branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java
   branches/saltedhashstore/freenet/src/freenet/node/Node.java
   branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java
   branches/saltedhashstore/freenet/src/freenet/node/ProbeCallback.java
   branches/saltedhashstore/freenet/src/freenet/node/RequestScheduler.java
   branches/saltedhashstore/freenet/src/freenet/node/RequestStarter.java
   branches/saltedhashstore/freenet/src/freenet/node/UptimeEstimator.java
   branches/saltedhashstore/freenet/src/freenet/node/Version.java
   branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientGet.java
   branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientPut.java
   
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdateManager.java
   
branches/saltedhashstore/freenet/src/freenet/node/useralerts/UserAlertManager.java
   
branches/saltedhashstore/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
   branches/saltedhashstore/freenet/src/freenet/support/Serializer.java
Log:
Merge from trunk (build #1152, r20269)


Modified: branches/saltedhashstore/freenet/README
===================================================================
--- branches/saltedhashstore/freenet/README     2008-06-15 19:53:33 UTC (rev 
20359)
+++ branches/saltedhashstore/freenet/README     2008-06-16 12:45:45 UTC (rev 
20360)
@@ -11,7 +11,7 @@
 - Mantissa is under the modified BSD license. See README.Mantissa. According 
   to the FSF, modified BSD is compatible with GPL; we must include both 
   licenses.
-
+
 The installer creates a firefox profile. If you don't use it, you should have 
a 
 look at user.js in the firefox_profile directory for some useful settings for 
 browsing Freenet (both for performance and security).

Modified: 
branches/saltedhashstore/freenet/src/freenet/client/ArchiveContext.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/client/ArchiveContext.java     
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/client/ArchiveContext.java     
2008-06-16 12:45:45 UTC (rev 20360)
@@ -8,6 +8,7 @@

 /**
  * @author amphibian (Matthew Toseland)
+ *
  * Object passed down a full fetch, including all the recursion.
  * Used, at present, for detecting archive fetch loops, hence the
  * name.
@@ -23,11 +24,11 @@

        /**
         * Check for a loop.
+        *
         * The URI provided is expected to be a reasonably unique identifier 
for the archive.
         */
        public synchronized void doLoopDetection(FreenetURI key) throws 
ArchiveFailureException {
                if(soFar.size() > maxArchiveLevels)
                        throw new 
ArchiveFailureException(ArchiveFailureException.TOO_MANY_LEVELS);
        }
-
 }

Modified: branches/saltedhashstore/freenet/src/freenet/client/Metadata.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/client/Metadata.java   
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/client/Metadata.java   
2008-06-16 12:45:45 UTC (rev 20360)
@@ -33,7 +33,7 @@
        static final long FREENET_METADATA_MAGIC = 0xf053b2842d91482bL;
        static final int MAX_SPLITFILE_PARAMS_LENGTH = 32768;
        /** Soft limit, to avoid memory DoS */
-       static final int MAX_SPLITFILE_BLOCKS = 100*1000;
+       static final int MAX_SPLITFILE_BLOCKS = 1000*1000;

        // URI at which this Metadata has been/will be inserted.
        FreenetURI resolvedURI;

Modified: 
branches/saltedhashstore/freenet/src/freenet/client/async/ClientRequestScheduler.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/client/async/ClientRequestScheduler.java
       2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/client/async/ClientRequestScheduler.java
       2008-06-16 12:45:45 UTC (rev 20360)
@@ -538,21 +538,21 @@
                                for(int j=0;j<getsLength;j++) {
                                        if(gets[j] == getter) {
                                                found = true;
+                                               dropped = true;
                                                continue;
                                        }
-                                       if(j == newGets.length) {
+                                       if(x == newGets.length) {
                                                if(!found) {
                                                        if(complain)
                                                                
Logger.normal(this, "Not found: "+getter+" for "+key+" removing ("+getsLength+" 
getters)");
                                                        return; // not here
-                                               }
+                                               } // else is a contradiction, 
let it get an ArrayIndexOutOfBounds.
                                        }
                                        if(gets[j] == null || 
gets[j].isCancelled()) continue;
                                        newGets[x++] = gets[j];
                                }
                                if(x == 0) {
                                        pendingKeys.remove(key);
-                                       dropped = true;
                                } else if(x == 1) {
                                        pendingKeys.put(key, newGets[0]);
                                } else {

Modified: 
branches/saltedhashstore/freenet/src/freenet/client/async/USKFetcher.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/client/async/USKFetcher.java   
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/client/async/USKFetcher.java   
2008-06-16 12:45:45 UTC (rev 20360)
@@ -295,25 +295,12 @@
                LinkedList l = null;
                final long lastEd = uskManager.lookup(origUSK);
                long curLatest;
+               boolean decode = false;
                synchronized(this) {
                        runningAttempts.remove(att);
                        curLatest = att.number;
                        if(completed || cancelled) return;
-                       if(curLatest >= lastEd && !(dontUpdate && block == 
null)) {
-                               try {
-                                       Bucket data = lastRequestData = 
block.decode(ctx.bucketFactory, 1025 /* it's an SSK */, true);
-                                       lastCompressionCodec = 
block.getCompressionCodec();
-                                       lastWasMetadata = block.isMetadata();
-                                       if(keepLastData)
-                                               lastRequestData = data;
-                                       else
-                                               data.free();
-                               } catch (KeyDecodeException e) {
-                                       lastRequestData = null;
-                               } catch (IOException e) {
-                                       lastRequestData = null;
-                               }
-                       }
+                       decode = curLatest >= lastEd && !(dontUpdate && block 
== null);
                        curLatest = Math.max(lastEd, curLatest);
                        if(logMINOR) Logger.minor(this, "Latest: "+curLatest);
                        long addTo = curLatest + minFailures;
@@ -328,6 +315,26 @@
                        }
                        cancelBefore(curLatest);
                }
+               Bucket data = null;
+               if(decode) {
+                       try {
+                               data = lastRequestData = 
block.decode(ctx.bucketFactory, 1025 /* it's an SSK */, true);
+                       } catch (KeyDecodeException e) {
+                               data = null;
+                       } catch (IOException e) {
+                               data = null;
+                       }
+               }
+               synchronized(this) {
+                       if (decode) {
+                                       lastCompressionCodec = 
block.getCompressionCodec();
+                                       lastWasMetadata = block.isMetadata();
+                                       if(keepLastData)
+                                               lastRequestData = data;
+                                       else
+                                               data.free();
+                       }
+               }
                if(!dontUpdate)
                        uskManager.update(origUSK, curLatest);
                if(l == null) return;

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConfigToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConfigToadlet.java    
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConfigToadlet.java    
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -29,8 +29,6 @@
 public class ConfigToadlet extends Toadlet {
        // If a setting has to be more than a meg, something is seriously wrong!
        private static final int MAX_PARAM_VALUE_SIZE = 1024*1024;
-       private static final int MODE_SIMPLE = 1;
-       private static final int MODE_ADVANCED = 2;
        private final Config config;
        private final NodeClientCore core;
        private final Node node;
@@ -142,30 +140,9 @@

                contentNode.addChild(core.alerts.createSummary());

-               // Mode can be changed by a link, not just by the default
+               final int mode = 
ctx.getPageMaker().drawModeSelectionArray(core, req, contentNode);

-               int mode = core.isAdvancedModeEnabled() ? MODE_ADVANCED : 
MODE_SIMPLE;
-               
-               if(req.isParameterSet("mode")) {
-                       mode = req.getIntParam("mode", mode);
-               }
-               
-               // FIXME style this properly
-               HTMLNode table = contentNode.addChild("table", "border", "1");
-               HTMLNode row = table.addChild("tr");
-               HTMLNode cell = row.addChild("td");
-               
-               if(mode != MODE_SIMPLE)
-                       cell.addChild("a", new String[] { "href", "title" }, 
new String[] { "/config/?mode=1", l10n("modeSimpleTooltip") }, 
l10n("modeSimple"));
-               else
-                       cell.addChild("b", "title", l10n("modeSimpleTooltip"), 
l10n("modeSimple"));
-               cell = row.addChild("td");
-               if(mode != MODE_ADVANCED)
-                       cell.addChild("a", new String[] { "href", "title" }, 
new String[] { "/config/?mode=2", l10n("modeAdvancedTooltip") }, 
l10n("modeAdvanced"));
-               else
-                       cell.addChild("b", "title", 
l10n("modeAdvancedTooltip"), l10n("modeAdvanced"));
-               
-               if(mode >= MODE_ADVANCED){
+               if(mode >= PageMaker.MODE_ADVANCED){
                        HTMLNode navigationBar = 
ctx.getPageMaker().getInfobox("navbar", l10n("configNavTitle"));
                        HTMLNode navigationContent = 
ctx.getPageMaker().getContentNode(navigationBar).addChild("ul");
                        
if(!L10n.getSelectedLanguage().equals(L10n.FALLBACK_DEFAULT))
@@ -207,13 +184,13 @@
                        HTMLNode configGroupUlNode = new HTMLNode("ul", 
"class", "config");

                        for(int j=0; j<o.length; j++){
-                               if(! (mode == MODE_SIMPLE && o[j].isExpert())){
+                               if(! (mode == PageMaker.MODE_SIMPLE && 
o[j].isExpert())){
                                        displayedConfigElements++;
                                        String configName = o[j].getName();

                                        HTMLNode configItemNode = 
configGroupUlNode.addChild("li");
                                        configItemNode.addChild("span", new 
String[]{ "class", "title", "style" },
-                                                       new String[]{ 
"configshortdesc", L10n.getString("ConfigToadlet.defaultIs", new String[] { 
"default" }, new String[] { o[j].getDefault() }) + (mode >= MODE_ADVANCED ? " 
["+sc[i].getPrefix() + '.' + o[j].getName() + ']' : ""), 
+                                                       new String[]{ 
"configshortdesc", L10n.getString("ConfigToadlet.defaultIs", new String[] { 
"default" }, new String[] { o[j].getDefault() }) + (mode >= 
PageMaker.MODE_ADVANCED ? " ["+sc[i].getPrefix() + '.' + o[j].getName() + ']' : 
""), 
                                                        "cursor: help;" 
}).addChild(L10n.getHTMLNode(o[j].getShortDesc()));
                                        HTMLNode configItemValueNode = 
configItemNode.addChild("span", "class", "config");
                                        if(o[j].getValueString() == null){

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   2008-06-16 12:45:45 UTC (rev 20360)
@@ -163,7 +163,6 @@
                        return;
                }

-               final boolean advancedModeEnabled = 
node.isAdvancedModeEnabled();
                final boolean fProxyJavascriptEnabled = 
node.isFProxyJavascriptEnabled();
                boolean drawMessageTypes = 
path.endsWith("displaymessagetypes.html");

@@ -189,7 +188,7 @@
                int numberOfSimpleConnected = numberOfConnected + 
numberOfRoutingBackedOff;
                int numberOfNotConnected = numberOfTooNew + numberOfTooOld + 
numberOfDisconnected + numberOfNeverConnected + numberOfDisabled + 
numberOfBursting + numberOfListening + numberOfListenOnly + 
numberOfClockProblem + numberOfConnError;
                String titleCountString = null;
-               if(advancedModeEnabled) {
+               if(node.isAdvancedModeEnabled()) {
                        titleCountString = "(" + numberOfConnected + '/' + 
numberOfRoutingBackedOff + '/' + numberOfTooNew + '/' + numberOfTooOld + '/' + 
numberOfRoutingDisabled + '/' + numberOfNotConnected + ')';
                } else {
                        titleCountString = (numberOfNotConnected + 
numberOfSimpleConnected)>0 ? String.valueOf(numberOfSimpleConnected) : "";
@@ -203,6 +202,7 @@

                if(ctx.isAllowedFullAccess())
                        contentNode.addChild(core.alerts.createSummary());
+               final int mode = 
ctx.getPageMaker().drawModeSelectionArray(core, request, contentNode);

                if(peerNodeStatuses.length>0){

@@ -226,7 +226,7 @@
                        HTMLNode nextTableCell = 
overviewTableRow.addChild("td", "class", "first");

                        /* node status overview box */
-                       if(advancedModeEnabled) {
+                       if(mode >= PageMaker.MODE_ADVANCED) {
                                HTMLNode overviewInfobox = 
nextTableCell.addChild("div", "class", "infobox");
                                overviewInfobox.addChild("div", "class", 
"infobox-header", "Node status overview");
                                HTMLNode overviewInfoboxContent = 
overviewInfobox.addChild("div", "class", "infobox-content");
@@ -251,21 +251,21 @@
                        activityInfobox.addChild("div", "class", 
"infobox-header", l10n("activityTitle"));
                        HTMLNode activityInfoboxContent = 
activityInfobox.addChild("div", "class", "infobox-content");
                        HTMLNode activityList = 
StatisticsToadlet.drawActivity(activityInfoboxContent, node);
-                       if (advancedModeEnabled && activityList != null) {
+                       if ((mode >= PageMaker.MODE_ADVANCED) && (activityList 
!= null)) {
                                if (numARKFetchers > 0) {
                                        activityList.addChild("li", 
"ARK\u00a0Fetch\u00a0Requests:\u00a0" + numARKFetchers);
                                }
-                               StatisticsToadlet.drawBandwidth(activityList, 
node, nodeUptimeSeconds, advancedModeEnabled);
+                               StatisticsToadlet.drawBandwidth(activityList, 
node, nodeUptimeSeconds, mode >= PageMaker.MODE_ADVANCED);
                        }

-                       nextTableCell = advancedModeEnabled ? 
overviewTableRow.addChild("td") : overviewTableRow.addChild("td", "class", 
"last");
+                       nextTableCell = (mode >= PageMaker.MODE_ADVANCED) ? 
overviewTableRow.addChild("td") : overviewTableRow.addChild("td", "class", 
"last");

                        // Peer statistics box
                        HTMLNode peerStatsInfobox = 
nextTableCell.addChild("div", "class", "infobox");
-                       StatisticsToadlet.drawPeerStatsBox(peerStatsInfobox, 
advancedModeEnabled, numberOfConnected, numberOfRoutingBackedOff, 
numberOfTooNew, numberOfTooOld, numberOfDisconnected, numberOfNeverConnected, 
numberOfDisabled, numberOfBursting, numberOfListening, numberOfListenOnly, 0, 
0, numberOfRoutingDisabled, numberOfClockProblem, numberOfConnError, 
numberOfDisconnecting);
+                       StatisticsToadlet.drawPeerStatsBox(peerStatsInfobox, 
mode >= PageMaker.MODE_ADVANCED, numberOfConnected, numberOfRoutingBackedOff, 
numberOfTooNew, numberOfTooOld, numberOfDisconnected, numberOfNeverConnected, 
numberOfDisabled, numberOfBursting, numberOfListening, numberOfListenOnly, 0, 
0, numberOfRoutingDisabled, numberOfClockProblem, numberOfConnError, 
numberOfDisconnecting);

                        // Peer routing backoff reason box
-                       if(advancedModeEnabled) {
+                       if(mode >= PageMaker.MODE_ADVANCED) {
                                nextTableCell = overviewTableRow.addChild("td", 
"class", "last");
                                HTMLNode backoffReasonInfobox = 
nextTableCell.addChild("div", "class", "infobox");
                                backoffReasonInfobox.addChild("div", "class", 
"infobox-header", "Peer backoff reasons");
@@ -322,7 +322,7 @@
                        HTMLNode peerTableInfobox = contentNode.addChild("div", 
"class", "infobox infobox-normal");
                        HTMLNode peerTableInfoboxHeader = 
peerTableInfobox.addChild("div", "class", "infobox-header");
                        peerTableInfoboxHeader.addChild("#", 
getPeerListTitle());
-                       if (advancedModeEnabled) {
+                       if (mode >= PageMaker.MODE_ADVANCED) {
                                if (!path.endsWith("displaymessagetypes.html")) 
{
                                        peerTableInfoboxHeader.addChild("#", " 
");
                                        peerTableInfoboxHeader.addChild("a", 
"href", "displaymessagetypes.html", "(more detailed)");
@@ -348,11 +348,11 @@
                                peerTableHeaderRow.addChild("th").addChild("a", 
"href", sortString(isReversed, "status")).addChild("#", l10n("statusTitle"));
                                if(hasNameColumn())
                                        
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"name")).addChild("span", new String[] { "title", "style" }, new String[] { 
l10n("nameClickToMessage"), "border-bottom: 1px dotted; cursor: help;" }, 
l10n("nameTitle"));
-                               if (advancedModeEnabled) {
+                               if (mode >= PageMaker.MODE_ADVANCED) {
                                        
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"address")).addChild("span", new String[] { "title", "style" }, new String[] { 
l10n("ipAddress"), "border-bottom: 1px dotted; cursor: help;" }, 
l10n("ipAddressTitle"));
                                }
                                peerTableHeaderRow.addChild("th").addChild("a", 
"href", sortString(isReversed, "version")).addChild("#", l10n("versionTitle"));
-                               if (advancedModeEnabled) {
+                               if (mode >= PageMaker.MODE_ADVANCED) {
                                        
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"location")).addChild("#", "Location");
                                        
peerTableHeaderRow.addChild("th").addChild("span", new String[] { "title", 
"style" }, new String[] { "Other node busy? Display: Percentage of time the 
node is overloaded, Current wait time remaining (0=not overloaded)/total/last 
overload reason", "border-bottom: 1px dotted; cursor: help;" }, "Backoff");

@@ -362,7 +362,7 @@
                                if(hasPrivateNoteColumn())
                                        
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed, 
"privnote")).addChild("span", new String[] { "title", "style" }, new String[] { 
l10n("privateNote"), "border-bottom: 1px dotted; cursor: help;" }, 
l10n("privateNoteTitle"));

-                               if(advancedModeEnabled) {
+                               if(mode >= PageMaker.MODE_ADVANCED) {
                                        peerTableHeaderRow.addChild("th", 
"%\u00a0Time Routable");
                                        peerTableHeaderRow.addChild("th", 
"Total\u00a0Traffic\u00a0(in/out/resent)");
                                        peerTableHeaderRow.addChild("th", 
"Congestion\u00a0Control");
@@ -370,7 +370,7 @@
                                        peerTableHeaderRow.addChild("th", 
"Reported\u00a0Uptime");
                                }

-                               SimpleColumn[] endCols = 
endColumnHeaders(advancedModeEnabled);
+                               SimpleColumn[] endCols = endColumnHeaders(mode 
>= PageMaker.MODE_ADVANCED);
                                if(endCols != null) {
                                        for(int i=0;i<endCols.length;i++) {
                                                SimpleColumn col = endCols[i];
@@ -385,19 +385,19 @@
                                for (int peerIndex = 0, peerCount = 
peerNodeStatuses.length; peerIndex < peerCount; peerIndex++) {

                                        PeerNodeStatus peerNodeStatus = 
peerNodeStatuses[peerIndex];
-                                       drawRow(peerTable, peerNodeStatus, 
advancedModeEnabled, fProxyJavascriptEnabled, now, path, enablePeerActions, 
endCols, drawMessageTypes);
+                                       drawRow(peerTable, peerNodeStatus, mode 
>= PageMaker.MODE_ADVANCED, fProxyJavascriptEnabled, now, path, 
enablePeerActions, endCols, drawMessageTypes);

                                }

                                if(peerForm != null) {
-                                       drawPeerActionSelectBox(peerForm, 
advancedModeEnabled);
+                                       drawPeerActionSelectBox(peerForm, mode 
>= PageMaker.MODE_ADVANCED);
                                }
                        }
                        // END PEER TABLE
                }

                // our reference
-               if(shouldDrawNoderefBox(advancedModeEnabled)) {
+               if(shouldDrawNoderefBox(mode >= PageMaker.MODE_ADVANCED)) {
                        drawAddPeerBox(contentNode, ctx);
                        drawNoderefBox(contentNode, ctx);
                }

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectivityToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectivityToadlet.java
  2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectivityToadlet.java
  2008-06-16 12:45:45 UTC (rev 20360)
@@ -63,6 +63,7 @@
                /* add alert summary box */
                if(ctx.isAllowedFullAccess())
                        contentNode.addChild(core.alerts.createSummary());
+               final int mode = 
ctx.getPageMaker().drawModeSelectionArray(core, request, contentNode);

                // Add connection type box.

@@ -84,7 +85,7 @@
                        row.addChild("td", 
AddressTracker.statusString(tracker.getPortForwardStatus()));
                }

-               if(node.isAdvancedModeEnabled()) {
+               if(mode >= PageMaker.MODE_ADVANCED) {

                // One box per port


Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java    
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java    
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -336,7 +336,12 @@
                                }

                                if(logMINOR) Logger.minor(this, "Redirecting to 
FreenetURI: "+newURI);
-                               headers.put("Location", "/"+newURI);
+                               String type = httprequest.getParam("type");
+                               if (type != null) {
+                                       headers.put("Location", "/"+newURI + 
"?type=" + type);
+                               } else {
+                                       headers.put("Location", "/"+newURI);
+                               }
                                ctx.sendReplyHeaders(302, "Found", headers, 
null, 0);
                                return;
                        }
@@ -523,7 +528,7 @@
                                option = optionList.addChild("li");
                                
option.addChild(ctx.getPageMaker().createBackLink(ctx, l10n("goBackToPrev")));

-                               this.writeHTMLReply(ctx, 500 /* close enough - 
FIXME probably should depend on status code */,
+                               this.writeHTMLReply(ctx, (e.mode == 10) ? 404 : 
500 /* close enough - FIXME probably should depend on status code */,
                                                "Internal Error", 
pageNode.generate());
                        }
                } catch (SocketException e) {

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/PageMaker.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/clients/http/PageMaker.java    
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/clients/http/PageMaker.java    
2008-06-16 12:45:45 UTC (rev 20360)
@@ -16,8 +16,10 @@
 import java.util.jar.JarFile;

 import freenet.l10n.L10n;
+import freenet.node.NodeClientCore;
 import freenet.support.HTMLNode;
 import freenet.support.Logger;
+import freenet.support.api.HTTPRequest;
 import freenet.support.io.FileUtil;

 /** Simple class to output standard heads and tail for web interface pages. 
@@ -25,6 +27,8 @@
 public final class PageMaker {

        public static final String DEFAULT_THEME = "clean";
+       public static final int MODE_SIMPLE = 1;
+       public static final int MODE_ADVANCED = 2;
        private String theme;
        private File override;
        private final List navigationLinkTexts = new ArrayList();
@@ -258,4 +262,35 @@

                return result;
        }
+       
+       protected int drawModeSelectionArray(NodeClientCore core, HTTPRequest 
req, HTMLNode contentNode) {
+               // Mode can be changed by a link, not just by the default
+               
+               int mode = core.isAdvancedModeEnabled() ? MODE_ADVANCED : 
MODE_SIMPLE;
+               
+               if(req.isParameterSet("mode")) {
+                       mode = req.getIntParam("mode", mode);
+               }
+               
+               // FIXME style this properly
+               HTMLNode table = contentNode.addChild("table", "border", "1");
+               HTMLNode row = table.addChild("tr");
+               HTMLNode cell = row.addChild("td");
+               
+               if(mode != MODE_SIMPLE)
+                       cell.addChild("a", new String[] { "href", "title" }, 
new String[] { "?mode=1", l10n("modeSimpleTooltip") }, l10n("modeSimple"));
+               else
+                       cell.addChild("b", "title", l10n("modeSimpleTooltip"), 
l10n("modeSimple"));
+               cell = row.addChild("td");
+               if(mode != MODE_ADVANCED)
+                       cell.addChild("a", new String[] { "href", "title" }, 
new String[] { "?mode=2", l10n("modeAdvancedTooltip") }, l10n("modeAdvanced"));
+               else
+                       cell.addChild("b", "title", 
l10n("modeAdvancedTooltip"), l10n("modeAdvanced"));
+               
+               return mode;
+       }
+       
+       private static final String l10n(String string) {
+               return L10n.getString("PageMaker." + string);
+       }
 }

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java 
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java 
2008-06-16 12:45:45 UTC (rev 20360)
@@ -54,6 +54,7 @@
 import freenet.support.io.BucketTools;
 import freenet.support.io.Closer;
 import freenet.support.io.FileBucket;
+import java.util.StringTokenizer;

 public class QueueToadlet extends Toadlet implements RequestCompletionCallback 
{

@@ -221,6 +222,60 @@
                                }
                                writePermanentRedirect(ctx, "Done", "/queue/");
                                return;
+                       }else if(request.isPartSet("bulkDownloads")) {
+                               String bulkDownloadsAsString = 
request.getPartAsString("bulkDownloads", Integer.MAX_VALUE);
+                               String[] keys = 
bulkDownloadsAsString.split("\n");
+                               if(("".equals(bulkDownloadsAsString)) || 
(keys.length < 1)) {
+                                       writePermanentRedirect(ctx, "Done", 
"/queue/");
+                                       return;
+                               }
+                               LinkedList success = new LinkedList(), failure 
= new LinkedList();
+                               
+                               for(int i=0; i<keys.length; i++) {
+                                       String currentKey = keys[i];
+                                       try {
+                                               FreenetURI fetchURI = new 
FreenetURI(currentKey);
+                                               
fcp.makePersistentGlobalRequest(fetchURI, null, "forever", "disk");
+                                               success.add(currentKey);
+                                       } catch (Exception e) {
+                                               failure.add(currentKey);
+                                               Logger.error(this, "An error 
occured while attempting to download key("+i+") : "+currentKey+ " : 
"+e.getMessage());
+                                       }
+                               }
+
+                               boolean displayFailureBox = failure.size() > 0;
+                               boolean displaySuccessBox = success.size() > 0;
+                               
+                               HTMLNode pageNode = 
ctx.getPageMaker().getPageNode(L10n.getString("QueueToadlet.downloadFiles"), 
ctx);
+                               HTMLNode contentNode = 
ctx.getPageMaker().getContentNode(pageNode);
+                               HTMLNode alertNode = 
contentNode.addChild(ctx.getPageMaker().getInfobox((displayFailureBox ? 
"infobox-warning" : "infobox-info"), 
L10n.getString("QueueToadlet.downloadFiles")));
+                               HTMLNode alertContent = 
ctx.getPageMaker().getContentNode(alertNode);
+                               Iterator it;
+                               if(displaySuccessBox) {
+                                       HTMLNode successDiv = 
alertContent.addChild("ul");
+                                       successDiv.addChild("#", 
L10n.getString("QueueToadlet.enqueuedSuccessfully", "number", 
String.valueOf(success.size())));
+                                       it = success.iterator();
+                                       while(it.hasNext()) {
+                                               HTMLNode line = 
successDiv.addChild("li");
+                                               line.addChild("#", (String) 
it.next());
+                                       }
+                                       successDiv.addChild("br");
+                               }
+                               if(displayFailureBox) {
+                                       HTMLNode failureDiv = 
alertContent.addChild("ul");
+                                       if(displayFailureBox) {
+                                               failureDiv.addChild("#", 
L10n.getString("QueueToadlet.enqueuedFailure", "number", 
String.valueOf(failure.size())));
+                                               it = failure.iterator();
+                                               while(it.hasNext()) {
+                                                       HTMLNode line = 
failureDiv.addChild("li");
+                                                       line.addChild("#", 
(String) it.next());
+                                               }
+                                       }
+                                       failureDiv.addChild("br");
+                               }
+                               alertContent.addChild("a", "href", "/queue/", 
L10n.getString("Toadlet.returnToQueuepage"));
+                               writeHTMLReply(ctx, 200, "OK", 
pageNode.generate());
+                               return;
                        } else if (request.isPartSet("change_priority")) {
                                String identifier = 
request.getPartAsString("identifier", MAX_IDENTIFIER_LENGTH);
                                short newPriority = 
Short.parseShort(request.getPartAsString("priority", 32));
@@ -494,6 +549,7 @@
                        HTMLNode infoboxContent = 
pageMaker.getContentNode(infobox);
                        infoboxContent.addChild("#", 
L10n.getString("QueueToadlet.noTaskOnGlobalQueue"));
                        contentNode.addChild(createInsertBox(pageMaker, ctx, 
core.isAdvancedModeEnabled()));
+                       contentNode.addChild(createBulkDownloadForm(ctx, 
pageMaker));
                        writeHTMLReply(ctx, 200, "OK", pageNode.generate());
                        return;
                }
@@ -610,8 +666,9 @@
                /* add alert summary box */
                if(ctx.isAllowedFullAccess())
                        contentNode.addChild(core.alerts.createSummary());
+               final int mode = pageMaker.drawModeSelectionArray(core, 
request, contentNode);
                /* add file insert box */
-               contentNode.addChild(createInsertBox(pageMaker, ctx, 
core.isAdvancedModeEnabled()));
+               contentNode.addChild(createInsertBox(pageMaker, ctx, mode >= 
PageMaker.MODE_ADVANCED));

                /* navigation bar */
                HTMLNode navigationBar = pageMaker.getInfobox("navbar", 
L10n.getString("QueueToadlet.requestNavigation"));
@@ -672,7 +729,7 @@
                                L10n.getString("QueueToadlet.priority6")
                };

-               boolean advancedModeEnabled = core.isAdvancedModeEnabled();
+               boolean advancedModeEnabled = (mode >= PageMaker.MODE_ADVANCED);

                HTMLNode legendBox = 
contentNode.addChild(pageMaker.getInfobox("legend", 
L10n.getString("QueueToadlet.legend")));
                HTMLNode legendContent = pageMaker.getContentNode(legendBox);
@@ -797,6 +854,8 @@
                        }
                }

+               contentNode.addChild(createBulkDownloadForm(ctx, pageMaker));
+                               
                MultiValueTable pageHeaders = new MultiValueTable();
                writeHTMLReply(ctx, 200, "OK", pageHeaders, 
pageNode.generate());
        }
@@ -1005,6 +1064,18 @@
                return insertBox;
        }

+       private HTMLNode createBulkDownloadForm(ToadletContext ctx, PageMaker 
pageMaker) {
+               HTMLNode downloadBox = 
pageMaker.getInfobox(L10n.getString("QueueToadlet.downloadFiles"));
+               HTMLNode downloadBoxContent = 
pageMaker.getContentNode(downloadBox);
+               HTMLNode downloadForm = ctx.addFormChild(downloadBoxContent, 
"/queue/", "queueDownloadForm");
+               downloadForm.addChild("#", 
L10n.getString("QueueToadlet.downloadFilesInstructions"));
+               downloadForm.addChild("br");
+               downloadForm.addChild("textarea", new String[] { "id", "name", 
"cols", "rows" }, new String[] { "bulkDownloads", "bulkDownloads", "120", "8" 
});
+               downloadForm.addChild("br");
+               downloadForm.addChild("input", new String[] { "type", "name", 
"value" }, new String[] { "submit", "insert", 
L10n.getString("QueueToadlet.download") });
+               return downloadBox;
+       }
+       
        private HTMLNode createRequestTable(PageMaker pageMaker, ToadletContext 
ctx, List requests, int[] columns, String[] priorityClasses, boolean 
advancedModeEnabled, boolean isUpload) {
                HTMLNode table = new HTMLNode("table", "class", "requests");
                HTMLNode headerRow = table.addChild("tr", "class", 
"table-header");
@@ -1268,6 +1339,10 @@
                        }
                } else if(req instanceof ClientPut) {
                        FreenetURI uri = ((ClientPut)req).getFinalURI();
+                       if(uri == null) {
+                               Logger.error(this, "No URI for supposedly 
finished request "+req);
+                               return;
+                       }
                        long size = ((ClientPut)req).getDataSize();
                        String name = uri.getPreferredFilename();
                        String title = l10n("uploadSucceededTitle", "filename", 
name);

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/StatisticsToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/StatisticsToadlet.java
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/StatisticsToadlet.java
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -125,8 +125,6 @@
                        super.sendErrorPage(ctx, 403, 
L10n.getString("Toadlet.unauthorizedTitle"), 
L10n.getString("Toadlet.unauthorized"));
                        return;
                }
-
-               final boolean advancedModeEnabled = 
node.isAdvancedModeEnabled();
                final SubConfig nodeConfig = node.config.get("node");

                /* gather connection statistics */
@@ -169,6 +167,7 @@

                if(ctx.isAllowedFullAccess())
                        contentNode.addChild(core.alerts.createSummary());
+               final int mode = 
ctx.getPageMaker().drawModeSelectionArray(core, request, contentNode);

                double swaps = (double)node.getSwaps();
                double noSwaps = (double)node.getNoSwaps();
@@ -204,7 +203,7 @@
                        logsList.addChild("li").addChild("a", new String[]{ 
"href", "target"}, new String[]{ "/?latestlog", "_new"}, l10n("getLogs"));
                logsList.addChild("li").addChild("a", "href", 
TranslationToadlet.TOADLET_URL+"?getOverrideTranlationFile").addChild("#", 
L10n.getString("TranslationToadlet.downloadTranslationsFile"));

-               if(advancedModeEnabled) {
+               if(mode >= PageMaker.MODE_ADVANCED) {
                        // store size box
                        HTMLNode storeSizeInfobox = 
nextTableCell.addChild("div", "class", "infobox");

@@ -237,16 +236,16 @@
                        }
                }

-               if(advancedModeEnabled || numberOfConnected + 
numberOfRoutingBackedOff > 0) {                   
+               if(mode >= PageMaker.MODE_ADVANCED || numberOfConnected + 
numberOfRoutingBackedOff > 0) {                       

                        // Activity box
                        nextTableCell = overviewTableRow.addChild("td", 
"class", "last");
                        HTMLNode activityInfobox = 
nextTableCell.addChild("div", "class", "infobox");

-                       drawActivityBox(activityInfobox, advancedModeEnabled);
+                       drawActivityBox(activityInfobox, mode >= 
PageMaker.MODE_ADVANCED);

                        /* node status overview box */
-                       if(advancedModeEnabled) {
+                       if(mode >= PageMaker.MODE_ADVANCED) {
                                HTMLNode overviewInfobox = 
nextTableCell.addChild("div", "class", "infobox");
                                drawOverviewBox(overviewInfobox, 
nodeUptimeSeconds, now, swaps, noSwaps);
                        }
@@ -254,7 +253,7 @@
                        // Peer statistics box
                        HTMLNode peerStatsInfobox = 
nextTableCell.addChild("div", "class", "infobox");

-                       drawPeerStatsBox(peerStatsInfobox, advancedModeEnabled, 
numberOfConnected, numberOfRoutingBackedOff, 
+                       drawPeerStatsBox(peerStatsInfobox, mode >= 
PageMaker.MODE_ADVANCED, numberOfConnected, numberOfRoutingBackedOff, 
                                        numberOfTooNew, numberOfTooOld, 
numberOfDisconnected, numberOfNeverConnected, numberOfDisabled, 
                                        numberOfBursting, numberOfListening, 
numberOfListenOnly, numberOfSeedServers, numberOfSeedClients,
                                        numberOfRoutingDisabled, 
numberOfClockProblem, numberOfConnError, numberOfDisconnecting);
@@ -262,10 +261,10 @@
                        // Bandwidth box
                        HTMLNode bandwidthInfobox = 
nextTableCell.addChild("div", "class", "infobox");

-                       drawBandwidthBox(bandwidthInfobox, nodeUptimeSeconds, 
advancedModeEnabled);
+                       drawBandwidthBox(bandwidthInfobox, nodeUptimeSeconds, 
mode >= PageMaker.MODE_ADVANCED);
                }

-               if(advancedModeEnabled) {
+               if(mode >= PageMaker.MODE_ADVANCED) {

                        // Peer routing backoff reason box
                        HTMLNode backoffReasonInfobox = 
nextTableCell.addChild("div", "class", "infobox");
@@ -749,7 +748,7 @@
                }
                if (numberOfDisconnecting > 0) {
                        HTMLNode peerStatsListenOnlyListItem = 
peerStatsList.addChild("li").addChild("span");
-                       peerStatsListenOnlyListItem.addChild("span", new 
String[] { "class", "title", "style" }, new String[] { "peer_disconnecting", 
l10n("disconnecting"), "border-bottom: 1px dotted; cursor: help;" }, 
l10nDark("disconnectingShort"));
+                       peerStatsListenOnlyListItem.addChild("span", new 
String[] { "class", "title", "style" }, new String[] { "peer_disconnecting", 
l10nDark("disconnecting"), "border-bottom: 1px dotted; cursor: help;" }, 
l10nDark("disconnectingShort"));
                        peerStatsListenOnlyListItem.addChild("span", ":\u00a0" 
+ numberOfDisconnecting);
                }
                if (numberOfSeedServers > 0) {
@@ -766,7 +765,7 @@
                }
                if (numberOfRoutingDisabled > 0) {
                        HTMLNode peerStatsRoutingDisabledListItem = 
peerStatsList.addChild("li").addChild("span");
-                       peerStatsRoutingDisabledListItem.addChild("span", new 
String[] { "class", "title", "style" }, new String[] { "peer_routing_disabled", 
l10n("routingDisabled"), "border-bottom: 1px dotted; cursor: help;" }, 
l10n("routingDisabledShort"));
+                       peerStatsRoutingDisabledListItem.addChild("span", new 
String[] { "class", "title", "style" }, new String[] { "peer_routing_disabled", 
l10nDark("routingDisabled"), "border-bottom: 1px dotted; cursor: help;" }, 
l10nDark("routingDisabledShort"));
                        peerStatsRoutingDisabledListItem.addChild("span", 
":\u00a0" + numberOfRoutingDisabled);
                }
        }

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/WelcomeToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/WelcomeToadlet.java   
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/WelcomeToadlet.java   
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -388,7 +388,12 @@
                     }, 1);
             return;
         } else if(request.isPartSet("dismiss-events")) {
-               String alertsToDump = request.getPartAsString("events", 4096);
+               if(noPassword) {
+                       redirectToRoot(ctx);
+                       return;
+               }
+
+               String alertsToDump = request.getPartAsString("events", 
Integer.MAX_VALUE);
                String[] alertAnchors = alertsToDump.split(",");
                HashSet toDump = new HashSet();
                for(int i=0;i<alertAnchors.length;i++) 
toDump.add(alertAnchors[i]);

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
  2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
  2008-06-16 12:45:45 UTC (rev 20360)
@@ -7,19 +7,19 @@
 BookmarkCategory0.Content.Bookmark0.Name=The Ultimate FreeNet Index
 BookmarkCategory0.Content.Bookmark0.Description=A new one-page index with a 
menu including categories
 BookmarkCategory0.Content.Bookmark0.hasAnActivelink=true
-BookmarkCategory0.Content.Bookmark0.URI=USK at 
0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/22/
+BookmarkCategory0.Content.Bookmark0.URI=USK at 
0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/24/
 BookmarkCategory0.Content.Bookmark3.Name=Index des sites Fran?ais
 BookmarkCategory0.Content.Bookmark3.Description=A small French index with 
descriptions
 BookmarkCategory0.Content.Bookmark3.hasAnActivelink=true
-BookmarkCategory0.Content.Bookmark3.URI=USK at 
RJnh1EnvOSPwOWVRS2nyhC4eIQkKoNE5hcTv7~yY-sM,pOloLxnKWM~AL24iDMHOAvTvCqMlB-p2BO9zK96TOZA,AQACAAE/index_fr/47/
+BookmarkCategory0.Content.Bookmark3.URI=USK at 
RJnh1EnvOSPwOWVRS2nyhC4eIQkKoNE5hcTv7~yY-sM,pOloLxnKWM~AL24iDMHOAvTvCqMlB-p2BO9zK96TOZA,AQACAAE/index_fr/50/
 BookmarkCategory0.Content.Bookmark2.Name=Freenet Activelink Index (SLOW: 
graphical index, preloads all the sites, so takes *ages* to load)
 BookmarkCategory0.Content.Bookmark2.hasAnActivelink=true
 BookmarkCategory0.Content.Bookmark2.Description=A graphical freenet index 
(this will take a long time to load as it preloads the sites)
-BookmarkCategory0.Content.Bookmark2.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/53/
+BookmarkCategory0.Content.Bookmark2.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/60/
 BookmarkCategory0.Content.Bookmark1.Name=Freenet Activelink Index Text Version 
(a quick-loading non-graphical index site, no porn)
 BookmarkCategory0.Content.Bookmark1.hasAnActivelink=true
 BookmarkCategory0.Content.Bookmark1.Description=Text version of the Activelink 
Index
-BookmarkCategory0.Content.Bookmark1.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/17/
+BookmarkCategory0.Content.Bookmark1.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/23/
 BookmarkCategory1.Name=Freenet devel's flogs
 BookmarkCategory1.Content.BookmarkCategory=0
 BookmarkCategory1.Content.Bookmark=5
@@ -34,7 +34,7 @@
 BookmarkCategory1.Content.Bookmark2.Name=Bombe
 BookmarkCategory1.Content.Bookmark2.Description=Bombe's flog
 BookmarkCategory1.Content.Bookmark2.hasAnActivelink=true
-BookmarkCategory1.Content.Bookmark2.URI=USK at 
e3myoFyp5avg6WYN16ImHri6J7Nj8980Fm~aQe4EX1U,QvbWT0ImE0TwLODTl7EoJx2NBnwDxTbLTE6zkB-eGPs,AQACAAE/bombe/35/
+BookmarkCategory1.Content.Bookmark2.URI=USK at 
e3myoFyp5avg6WYN16ImHri6J7Nj8980Fm~aQe4EX1U,QvbWT0ImE0TwLODTl7EoJx2NBnwDxTbLTE6zkB-eGPs,AQACAAE/bombe/38/
 BookmarkCategory1.Content.Bookmark1.Name=Nextgen$
 BookmarkCategory1.Content.Bookmark1.Description=NextGen$' flog
 BookmarkCategory1.Content.Bookmark1.hasAnActivelink=true
@@ -45,29 +45,25 @@
 BookmarkCategory1.Content.Bookmark0.URI=USK at 
yGvITGZzrY1vUZK-4AaYLgcjZ7ysRqNTMfdcO8gS-LY,-ab5bJVD3Lp-LXEQqBAhJpMKrKJ19RnNaZMIkusU79s,AQACAAE/toad/12/
 BookmarkCategory2.Name=Freenet related software and documentation
 BookmarkCategory2.Content.BookmarkCategory=0
-BookmarkCategory2.Content.Bookmark=6
-BookmarkCategory2.Content.Bookmark0.Name=Frost
-BookmarkCategory2.Content.Bookmark0.Description=The official freesite of 
Frost, a message board system for Freenet
+BookmarkCategory2.Content.Bookmark=5
+BookmarkCategory2.Content.Bookmark0.Name=Freenet Message System
+BookmarkCategory2.Content.Bookmark0.Description=The official freesite of FMS, 
a spam resistant message board system for Freenet
 BookmarkCategory2.Content.Bookmark0.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark0.URI=USK at 
QRZAI1nSm~dAY2hTdzVWXmEhkaI~dso0OadnppBR7kE,wq5rHGBI7kpChBe4yRmgBChIGDug7Xa5SG9vYGXdxR0,AQACAAE/frost/7/
-BookmarkCategory2.Content.Bookmark1.Name=Freenet Message System
-BookmarkCategory2.Content.Bookmark1.Description=The official freesite of FMS, 
a spam resistant message board system for Freenet
+BookmarkCategory2.Content.Bookmark0.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/55/
+BookmarkCategory2.Content.Bookmark1.Name=Freemail
+BookmarkCategory2.Content.Bookmark1.Description=The official site for Freemail 
- email over Freenet
 BookmarkCategory2.Content.Bookmark1.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark1.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/50/
-BookmarkCategory2.Content.Bookmark2.Name=Freemail
-BookmarkCategory2.Content.Bookmark2.Description=The official site for Freemail 
- email over Freenet
+BookmarkCategory2.Content.Bookmark1.URI=USK at 
xOg49GNltumTJJzj0fVzuGDpo4hJUsy2UsGQkjE7NY4,EtUH5b9gGpp8JiY-Bm-Y9kHX1q-yDjD-9oRzXn21O9k,AQACAAE/freemail/4/
+BookmarkCategory2.Content.Bookmark2.Name=Publish!
+BookmarkCategory2.Content.Bookmark2.Description=Simple guide to publishing web 
sites to Freenet
 BookmarkCategory2.Content.Bookmark2.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark2.URI=USK at 
xOg49GNltumTJJzj0fVzuGDpo4hJUsy2UsGQkjE7NY4,EtUH5b9gGpp8JiY-Bm-Y9kHX1q-yDjD-9oRzXn21O9k,AQACAAE/freemail/3/
-BookmarkCategory2.Content.Bookmark3.Name=Publish!
-BookmarkCategory2.Content.Bookmark3.Description=Simple guide to publishing web 
sites to Freenet
+BookmarkCategory2.Content.Bookmark2.URI=USK at 
940RYvj1-aowEHGsb5HeMTigq8gnV14pbKNsIvUO~-0,FdTbR3gIz21QNfDtnK~MiWgAf2kfwHe-cpyJXuLHdOE,AQACAAE/publish/1/
+BookmarkCategory2.Content.Bookmark3.URI=USK at 
8r-uSRcJPkAr-3v3YJR16OCx~lyV2XOKsiG4MOQQBMM,P42IgNemestUdaI7T6z3Og6P-Hi7g9U~e37R3kWGVj8,AQACAAE/freesite-HOWTO/4/
+BookmarkCategory2.Content.Bookmark3.Name=Freesite HOWTO
+BookmarkCategory2.Content.Bookmark3.Description=A more detailed explanation of 
publishing freesites
 BookmarkCategory2.Content.Bookmark3.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark3.URI=USK at 
940RYvj1-aowEHGsb5HeMTigq8gnV14pbKNsIvUO~-0,FdTbR3gIz21QNfDtnK~MiWgAf2kfwHe-cpyJXuLHdOE,AQACAAE/publish/1/
-BookmarkCategory2.Content.Bookmark4.URI=USK at 
8r-uSRcJPkAr-3v3YJR16OCx~lyV2XOKsiG4MOQQBMM,P42IgNemestUdaI7T6z3Og6P-Hi7g9U~e37R3kWGVj8,AQACAAE/freesite-HOWTO/3/
-BookmarkCategory2.Content.Bookmark4.Name=Freesite HOWTO
-BookmarkCategory2.Content.Bookmark4.Description=A more detailed explanation of 
publishing freesites
+BookmarkCategory2.Content.Bookmark4.URI=USK at 
F-BKUq9vNTrvp7D90r5edQ4MfZCrx3pP7TofdDlCRoU,YFUeosm79Z3KZxC62qQCteCCUI3D-LYyRk6P9auVpPA,AQACAAE/freenetapps/22/
 BookmarkCategory2.Content.Bookmark4.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark5.URI=USK at 
F-BKUq9vNTrvp7D90r5edQ4MfZCrx3pP7TofdDlCRoU,YFUeosm79Z3KZxC62qQCteCCUI3D-LYyRk6P9auVpPA,AQACAAE/freenetapps/15/
-BookmarkCategory2.Content.Bookmark5.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark5.Name=The Freenet Applications Freesite
-BookmarkCategory2.Content.Bookmark5.Description=Various links to Freenet 
applications, and instructions for using them
+BookmarkCategory2.Content.Bookmark4.Name=The Freenet Applications Freesite
+BookmarkCategory2.Content.Bookmark4.Description=Various links to Freenet 
applications, and instructions for using them
 End

Modified: branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java      
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java      
2008-06-16 12:45:45 UTC (rev 20360)
@@ -20,12 +20,12 @@
 package freenet.io.comm;

 import java.io.DataInput;
-import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;

+import freenet.io.WritableToDataOutputStream;
 import freenet.support.transport.ip.HostnameSyntaxException;
 import freenet.support.transport.ip.IPUtil;

@@ -35,7 +35,7 @@
  * To change the template for this generated type comment go to Window - 
Preferences - Java - Code Generation - Code and
  * Comments
  */
-public class Peer {
+public class Peer implements WritableToDataOutputStream {

     public static class LocalAddressException extends Exception {
        private static final long serialVersionUID = -1;

Modified: branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java 2008-06-15 
19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java 2008-06-16 
12:45:45 UTC (rev 20360)
@@ -24,9 +24,6 @@
 *
 * TODO: Maybe base64 the override file ?
 *
-* comment(mario): for www interface we might detect locale from http requests?
-* for other access (telnet) using system locale would probably be good, but
-* it would be nice to have a command to switch locale on the fly.
 */
 public class L10n {
        public static final String CLASS_NAME = "L10n";
@@ -35,8 +32,22 @@
        public static final String OVERRIDE_SUFFIX = ".override" + SUFFIX;

        public static final String FALLBACK_DEFAULT = "en";
-       public static final String[] AVAILABLE_LANGUAGES = { "en", "es", "da", 
"de", "fi", "fr", "it", "no", "pl", "se",
-               "zh-cn", "zh-tw", "unlisted" };
+       /** @see http://www.omniglot.com/language/names.htm */
+       public static final String[][] AVAILABLE_LANGUAGES = {
+               new String[] { "en", "English" },
+               new String[] { "es", "Espa?ol" },
+               new String[] { "da", "Dansk" },
+               new String[] { "de", "Deutsch" },
+               new String[] { "fi", "Suomi" },
+               new String[] { "fr", "Fran?ais" },
+               new String[] { "it", "Italiano" },
+               new String[] { "no", "Norsk" },
+               new String[] { "pl", "Polski" },
+               new String[] { "se", "Svenska" },
+               new String[] { "zh-cn", "??(??)" },
+               new String[] { "zh-tw", "??(??)" },
+               new String[] { "unlisted", "unlisted"},
+       };
        private final String selectedLanguage;

        private static SimpleFieldSet currentTranslation = null;
@@ -84,25 +95,13 @@
        */
        public static void setLanguage(String selectedLanguage) throws 
MissingResourceException {
                synchronized (sync) {
-                       for(int i=0; i<AVAILABLE_LANGUAGES.length; i++){
-                               
if(selectedLanguage.equalsIgnoreCase(AVAILABLE_LANGUAGES[i])){          
-                                       selectedLanguage = 
AVAILABLE_LANGUAGES[i];
-                                       Logger.normal(CLASS_NAME, "Changing the 
current language to : " + selectedLanguage);
-
-                                       currentClass = new 
L10n(selectedLanguage);      
-
-                                       if(currentTranslation == null) {
-                                               currentClass = new 
L10n(FALLBACK_DEFAULT);      
-                                               throw new 
MissingResourceException("Unable to load the translation file for 
"+selectedLanguage, "l10n", selectedLanguage);
-                                       }
-
-                                       return;
-                               }
+                       Logger.normal(CLASS_NAME, "Changing the current 
language to : " + selectedLanguage);
+                       currentClass = new L10n(selectedLanguage);
+                       if(currentClass == null) {
+                               currentClass = new L10n(FALLBACK_DEFAULT);
+                               Logger.error(CLASS_NAME, "The requested 
translation is not available!" + selectedLanguage);
+                               throw new MissingResourceException("The 
requested translation (" + selectedLanguage + ") hasn't been found!", 
CLASS_NAME, selectedLanguage);
                        }
-
-                       currentClass = new L10n(FALLBACK_DEFAULT);
-                       Logger.error(CLASS_NAME, "The requested translation is 
not available!" + selectedLanguage);
-                       throw new MissingResourceException("The requested 
translation ("+selectedLanguage+") hasn't been found!", CLASS_NAME, 
selectedLanguage);
                }
        }

@@ -325,6 +324,12 @@
        * @return the Properties object or null if not found
        */
        public static SimpleFieldSet loadTranslation(String name) {
+               String shortCountryCode = mapLanguageNameToShortCode(name);
+               if(shortCountryCode == null) { 
+                       Logger.error("L10n", "Can't map "+name+" to a country 
code!");
+                       return null;
+               } else
+                       name = shortCountryCode;
                name = PREFIX.replace ('.', 
'/').concat(PREFIX.concat(name.concat(SUFFIX)));

                SimpleFieldSet result = null;
@@ -345,6 +350,23 @@

                return result;
        }
+       
+       /**
+        * Map a full string language name to the corresponding country short 
code
+        * 
+        * @param The name to look for
+        * @return The two letters short code OR null if not found
+        */
+       public static String mapLanguageNameToShortCode(String name) {
+               for(int i=0; i<AVAILABLE_LANGUAGES.length; i++) {
+                       String currentShortCode = AVAILABLE_LANGUAGES[i][0];
+                       String currentLongName = AVAILABLE_LANGUAGES[i][1];
+                       
+                       if(currentShortCode.equalsIgnoreCase(name) || 
currentLongName.equalsIgnoreCase(name))
+                               return currentShortCode;
+               }
+               return null;
+       }

        public static boolean isOverridden(String key) {
                synchronized(sync) {

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties    
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties    
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -85,10 +85,6 @@
 ConfigToadlet.fproxy=FProxy
 ConfigToadlet.fullTitle=Freenet-Knoten-Konfiguration von ${name}
 ConfigToadlet.logger=Logger
-ConfigToadlet.modeAdvanced=Erweiterte Einstellungen
-ConfigToadlet.modeAdvancedTooltip=Optionen, die nur erfahrene Freenet-Benutzer 
und -Entwickler benutzen m?ssen
-ConfigToadlet.modeSimple=Einfache Einstellungen
-ConfigToadlet.modeSimpleTooltip=Optionen, die alle Benutzer kennen sollten
 ConfigToadlet.node=Knoten
 ConfigToadlet.pluginmanager=Plugin-Manager
 ConfigToadlet.pluginmanager2=Plugin-Manager 2

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties    
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties    
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -86,10 +86,10 @@
 ConfigToadlet.fproxy=fproxy
 ConfigToadlet.fullTitle=Freenet Node Configuration of ${name}
 ConfigToadlet.logger=logger
-ConfigToadlet.modeSimple=Simple config options
-ConfigToadlet.modeSimpleTooltip=Config options that all users should know about
-ConfigToadlet.modeAdvanced=Advanced config options
-ConfigToadlet.modeAdvancedTooltip=Config options that only experienced freenet 
users and developers will need to use
+PageMaker.modeSimple=Simple interface
+PageMaker.modeSimpleTooltip=A simple interface all users can use
+PageMaker.modeAdvanced=Advanced interface
+PageMaker.modeAdvancedTooltip=An advanced interface that only experienced 
freenet users and developers will need to use
 ConfigToadlet.node=node
 ConfigToadlet.node.load=node.load
 ConfigToadlet.node.opennet=node.opennet
@@ -662,6 +662,9 @@
 Node.inBWLimit=Input bandwidth limit (bytes per second)
 Node.inBWLimitLong=Input bandwidth limit (bytes/sec); the node will try not to 
exceed this; -1 = 4x set outputBandwidthLimit
 Node.invalidStoreSize=Store size must be at least 32MB
+Node.java14Title=Java 1.4 no longer supported
+Node.java14Text=You are running Freenet on a 1.4 version of Java. Please 
upgrade to at least java 1.5. Auto-update has been temporarily disabled as 
future builds may not load at all.
+Node.java14ShortText=Java 1.4 will not be supported for much longer, please 
upgrade to 1.5.
 Node.l10nLanguage=The language the node will use to display messages
 Node.l10nLanguageLong=This setting will change the language used to display 
messages. Keep in mind that some strings won't be translated until next node 
startup though.
 Node.maxHTL=Maximum HTL
@@ -903,8 +906,12 @@
 QueueToadlet.completedU=Completed uploads (${size})
 QueueToadlet.completedUDirectory=Completed directory uploads (${size})
 QueueToadlet.download=Download
+QueueToadlet.downloadFiles=Bulk downloads
+QueueToadlet.downloadFilesInstructions=You can paste a list of keys to 
download in the box below (one per line)
 QueueToadlet.downloadSucceededTitle=Download succeeded: ${filename}
 QueueToadlet.downloadSucceeded=The file ${origlink}${filename}${/origlink} has 
been downloaded successfully. ${link}Click here${/link} to open the file 
(${size}).
+QueueToadlet.enqueuedSuccessfully=The following ${number} keys have been 
enqueued sucessfully:
+QueueToadlet.enqueuedFailure=The following ${number} keys couldn't have been 
enqueued:
 QueueToadlet.errorAccessDenied=Error: Access Denied!
 QueueToadlet.errorAccessDeniedFile=The current configuration of the node 
prohibits you from uploading the file "${file}".
 QueueToadlet.errorDToDisk=Cannot download to disk
@@ -1125,6 +1132,7 @@
 Toadlet.ok=Ok
 Toadlet.permRedirectWithReason=Permanent redirect: ${reason}
 Toadlet.returnToNodeHomepage=Return to node homepage
+Toadlet.returnToQueuepage=Return to queue page
 Toadlet.returnToPrevPage=Return to the previous page
 Toadlet.tempRedirectWithReason=Temporary redirect: ${reason}
 Toadlet.unauthorizedTitle=Unauthorized

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties    
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties    
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -85,10 +85,6 @@
 ConfigToadlet.fproxy=fproxy
 ConfigToadlet.fullTitle=Configuration du noeud ${name}
 ConfigToadlet.logger=enregistreur de logs
-ConfigToadlet.modeAdvanced=Options de configuration avanc?es
-ConfigToadlet.modeAdvancedTooltip=Options de configuration utiles uniquement 
aux utilisateurs exp?riment?s et aux d?veloppeurs
-ConfigToadlet.modeSimple=Options de configuration simple
-ConfigToadlet.modeSimpleTooltip=Options de configuration utiles ? tous les 
utilisateurs
 ConfigToadlet.node=noeud
 ConfigToadlet.pluginmanager=gestionnaire de plugins
 ConfigToadlet.pluginmanager2=gestionnaire de plugins 2

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties    
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties    
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -1,12 +1,12 @@
 Announcer.announceAlertIntro=Il nodo sta cercando di connettersi con i 
seednode ed annunciare s? stesso all' OpenNet (network di Sconosciuti). Possono 
essere necessari alcuni minuti per completare l'operazione.
 Announcer.announceAlertNoSeednodes=Non e' stato trovato il file seednodes.fref 
e quindi il nodo non pu? connettersi automaticamente ad Opennet. Aggiungere 
alcuni nodi manualmente o scaricare il file seednodes da 
http://downloads.freenetproject.org/alpha/opennet/ .
 Announcer.announceAlertShort=Il nodo sta cercando di connettersi alla rete, 
nel frattempo sar? pi? lento.
-Announcer.announceAlertTitle=Announce Nodo
+Announcer.announceAlertTitle=Annuncio Nodo in corso
 Announcer.announceDetails=Il nodo ha recentemente inoltrato 
${recentSentAnnouncements} annunci, ${runningAnnouncements} dei quali ancora in 
corso, ed aggiunto ${addedNodes} nodi (${refusedNodes} nodi hanno rifiutato la 
connessione). In questo momento il nodo ? connesso a ${connectedSeednodes} 
seednode e sta cercando di connettersi ad altri ${disconnectedSeednodes}.
-Announcer.announceDisabledTooOld=Il nodo ? oodo obsoleto ed inadatto alla 
connessione con la rete Freenet attuale. L'annuncio ? stato diabilitato in 
quanto comunque inutile. Si prega di aggiornare il nodo appena possibile 
(auto-aggiornamento potrebbe essere in attesa di input o disabilitato)
+Announcer.announceDisabledTooOld=Il software utilizzato dal nodo ? obsoleto ed 
inadatto alla connessione con la version corrente della rete Freenet. 
L'annuncio ? stato diabilitato in quanto comunque inutile. Si prega di 
aggiornare il nodo appena possibile (auto-aggiornamento potrebbe essere in 
attesa di input o disabilitato)
 Announcer.announceDisabledTooOldShort=Il nodo non riesce a connettersi alla 
rete perch? la versione di Freenet utilizzata ? obsoleta. Si prega di eseguire 
l'aggiornamento.
 Announcer.announceDisabledTooOldTitle=Annuncio disabilitato (obsoleto)
-Announcer.announceLoading=Il nodo sta caricando il file seednodes in modo da 
poter provare ad annunciare al resto della rete. Announcement pu? richiedere 
alcuni minuti.
+Announcer.announceLoading=Il nodo sta caricando il file seednodes per 
annunciarsi al resto della rete. Il completamento dell' operazione potrebbe 
richiedere diversi minuti.
 Announcer.coolingOff=per i prossimi ${time} secondi, il nodo aspetter? che i 
nodi che ha annunciato si connettano; se non ci saranno abbastanza nodi prover? 
con un altro nodo.
 BookmarkEditorToadlet.addBookmark=Aggiungi Segnalibro
 BookmarkEditorToadlet.addCategory=Aggiungi Categoria
@@ -60,7 +60,7 @@
 BookmarkManager.malformedBookmark=Segnalibro malformato
 BooleanOption.parseError=Booleano non riconosciuto: ${val} - prova "vero o 
falso"
 BuildOldAgeUserAlert.tooOld=Il software di questo nodo ? antecedente alla pi? 
vecchia versione (Build #${lastgood}) utilizzabile dai peer aggiornati ai quali 
si cerca di connettersi.  E' necessario aggiornare il nodo al pi? presto 
possibile; non sar? possibile connettersi ai peer etichettati "TROPPO RECENTE" 
finch? il nodo non sar? stato aggiornato (il nodo va tenuto aggiornato o si 
rischia di essere esclusi dalla rete Freenet)
-BuildOldAgeUserAlert.tooOldShort=Il nodo sta utilizzando una versione obsoleta 
di Freenet, che rende imossibile collegarsi alla rete. Si prega di eseguire 
l'aggiornamento al pi? presto possibile.
+BuildOldAgeUserAlert.tooOldShort=Il nodo sta utilizzando una versione  di 
Freenet obsoleta al punto da rendere impossibile il collegamento alla rete. Si 
prega di eseguire l'aggiornamento al pi? presto possibile.
 BuildOldAgeUserAlert.tooOldTitle=Versione obsoleta
 CSSTokenizerFilter.deletedDisallowedString=Stringa non permessa eliminata
 CSSTokenizerFilter.deletedUnmatchedChar=Ignorato char non corrispondente:
@@ -87,10 +87,6 @@
 ConfigToadlet.fullTitle=Configurazione del Nodo Freenet di ${name}
 ConfigToadlet.homepage=Homepage del Nodo
 ConfigToadlet.logger=log
-ConfigToadlet.modeAdvanced=Opzionni di configurazione avanzate
-ConfigToadlet.modeAdvancedTooltip=Opzioni di configurazione che dovrebbero 
usare solo gli utenti avanzati di Freenet e gli sviluppatori.
-ConfigToadlet.modeSimple=Opzioni di configurazione Semplici
-ConfigToadlet.modeSimpleTooltip=Opzioni di configurazione che tutti gli utenti 
dovrebbero conoscere.
 ConfigToadlet.node=nodo
 ConfigToadlet.pluginmanager=pluginmanager
 ConfigToadlet.pluginmanager2=pluginmanager2
@@ -125,7 +121,7 @@
 ConnectionsToadlet.nodeStatus.LISTEN ONLY=SOLO ASCOLTO
 ConnectionsToadlet.nodeStatus.LISTENING=IN ASCOLTO
 ConnectionsToadlet.nodeStatus.NEVER CONNECTED=MAI CONNESSO
-ConnectionsToadlet.nodeStatus.ROUTING DISABLED=NON STA INSTRADANDO TRAFFICO
+ConnectionsToadlet.nodeStatus.ROUTING DISABLED=NON INSTRADA TRAFFICO
 ConnectionsToadlet.nodeStatus.TOO NEW=TROPPO RECENTE
 ConnectionsToadlet.nodeStatus.TOO OLD=OBSOLETO
 ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=STATUS NON DETERMINATO
@@ -143,7 +139,7 @@
 ConnectivityToadlet.sentReceivedTitle=Pacchetti ricevuti/trasmessi
 ConnectivityToadlet.summaryTitle=Connettivit?
 ConnectivityToadlet.title=Connettivit? internet di ${nodeName}
-ContentDataFilter.unknownCharset=La pagina che sta per essere visualizzata 
utilizza un formato di caratteri (chaset) di tipo sconosciuto. Questo rende 
impossibile filtrare la pagina, il che potrebbe a sua volta compromettere 
l'anonimato dell'utente.
+ContentDataFilter.unknownCharset=La pagina che sta per essere visualizzata 
utilizza un formato di caratteri (charset) di tipo sconosciuto. Ci? rende 
impossibile filtrare la pagina, il che potrebbe a sua volta compromettere 
l'anonimato dell'utente.
 ContentDataFilter.unknownCharsetTitle=Charset sconosciuto!
 ContentDataFilter.warningUnknownCharsetTitle=Attenzione: charset sconosciuto 
(${charset})
 ContentFilter.applicationPdfReadAdvice=Documento Adobe(R) PDF - MOLTO 
PERICOLOSO!
@@ -167,7 +163,7 @@
 DarknetConnectionsToadlet.activityTitle=Attivit? Corrente
 DarknetConnectionsToadlet.add=Aggiungi
 DarknetConnectionsToadlet.addPeerTitle=Aggiungi un peer
-DarknetConnectionsToadlet.alreadyInReferences=Questa referenza ? gi? in lista.
+DarknetConnectionsToadlet.alreadyInReferences=La referenza data ? gi? presente 
in lista.
 DarknetConnectionsToadlet.backedOff=Connesso ma respinto: Il nodo ? connesso a 
questi peer ma la la connessione viene rifiutata e quindi i peer in questione 
non vengono al momento utilizzati per l'instradamento delle richieste
 DarknetConnectionsToadlet.backedOffShort=Respinti
 DarknetConnectionsToadlet.bursting=Non connesso e bursting: per un breve 
periodo, il nodo sta tentando di connettersi a questi peer perch? l'utenete ha 
impostato burstOnly su di essi
@@ -176,11 +172,11 @@
 DarknetConnectionsToadlet.busyShort=Occupati
 DarknetConnectionsToadlet.cancel=Cancella
 DarknetConnectionsToadlet.cantFetchNoderefURL=Non ? stato possibile richiamare 
la referenza di un nodo da ${url}. Riprovare.
-DarknetConnectionsToadlet.cantParseTryAgain=Non ? stato possibile interpretare 
it testo come refernza di un nodo: (${error}).
+DarknetConnectionsToadlet.cantParseTryAgain=Non ? stato possibile interpretare 
it testo dato come refernza di un nodo: (${error}).
 DarknetConnectionsToadlet.cantParseWrongEnding=Non ? stato possibile 
interpretare le referenza: L'ultimo rigo dovrebbe contenere solo la parola End, 
esso contiene invece: ${end}
-DarknetConnectionsToadlet.clockProblem=L'orologio di sitema e l'orologio del 
nodo differiscono di oltre 24 ore. La connessione ? stata disabilitata perch? 
questo pu? causare problemi con l'aggiornamento e con i client.
+DarknetConnectionsToadlet.clockProblem=L'orologio di sitema e l'orologio del 
nodo differiscono di oltre 24 ore.  Ci? potrebbe causare problemi con 
l'aggiornamento e con i client. La connessione ? stata pertanto disabilitata,
 DarknetConnectionsToadlet.clockProblemShort=Problema di sincronizzazione 
orologio
-DarknetConnectionsToadlet.confirmRemoveNode=Conferma rimozione di 
"+peerNodes[i].getName()+" ? Rimuovere un nodo che ? stato disconnesso per meno 
di una settimana non ? consigliabile; si consiglia attendere ancora un po', 
considerando che potrebbe trattarsi di un problema temporaneo, e che ci sono 
utenti che non hanno la possibilit? lasciar girare il proprio nodo giorno e 
notte.
+DarknetConnectionsToadlet.confirmRemoveNode=Conferma rimozione di "${name}" ? 
Rimuovere un nodo che ? stato disconnesso per meno di una settimana non ? 
consigliabile. L'azione pi? appropriata sarebbe di attendere ancora un po', 
considerando che potrebbe trattarsi di un problema temporaneo, e che ci sono 
utenti che non hanno la possibilit? lasciar girare il proprio nodo giorno e 
notte.
 DarknetConnectionsToadlet.confirmRemoveNodeTitle=Conferma
 DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=Rimozione Nodo
 DarknetConnectionsToadlet.connError=Connessione fallita (il nodo ha un 'bug'?)
@@ -190,12 +186,12 @@
 DarknetConnectionsToadlet.darknetFnpPort=Darknet FNP: ${port}/UDP (usata per 
connessioni a peer affidabili. Forwardare se possibile)
 DarknetConnectionsToadlet.disabled=Non connesso e disabilitato: L'utente ha 
configurato il nodo in maniera da non connettersi a questo peer.
 DarknetConnectionsToadlet.disabledShort=Disabilitato
-DarknetConnectionsToadlet.disconnecting=Disconnessione in corso (si sta 
procedendo alla rimozione del nodo; ? necessario informare il nodo in questione 
e questo richiede un po' di tempo)
+DarknetConnectionsToadlet.disconnecting=Disconnessione in corso (si sta 
procedendo alla rimozione del nodo; ? necessario informare il nodo in questione 
e ci? potrebbe richiedere un po' di tempo)
 DarknetConnectionsToadlet.disconnectingShort=Disconnessione in corso
 DarknetConnectionsToadlet.enterDescription=Inserisci descrizione:
 DarknetConnectionsToadlet.failedToAddNodeInternalError=Impossibile 
interpretare il testo dato comereferenza di un nodo Freenet. Si prega di 
riportare agli sviluppatori quanto segue:
-DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=Tentativo di 
aggiungere nodo fallito: Errore interno.
-DarknetConnectionsToadlet.failedToAddNodeTitle=Non ? Stato Possibile 
Aggiungere il Nodo
+DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=Aggiunta nuovo 
nodo fallita: Errore interno.
+DarknetConnectionsToadlet.failedToAddNodeTitle=Aggiunta Nodo Fallita
 DarknetConnectionsToadlet.fcpDisabled=FCP non ? abilitato (per applicazioni 
client di Freenet come Frost e Thaw)
 DarknetConnectionsToadlet.fcpPort=FCP: ${port}/tcp (per le applicazioni client 
di Freenet, per esempio Frost e Thaw)
 DarknetConnectionsToadlet.fileReference=Seleziona il file contenente la 
referenza:
@@ -208,7 +204,7 @@
 DarknetConnectionsToadlet.idleTime=Tempo trascorso da quando il nodo ? 
connesso o da quando lo ? stato per l'ultima volta
 DarknetConnectionsToadlet.idleTimeTitle=Connesso / Inattivo
 DarknetConnectionsToadlet.invalidSignature=Non ? stato possibile verificare le 
firma elettronica della refernza (${error}).
-DarknetConnectionsToadlet.ipAddress=L'indirizzo network del nodo nel formato 
IP:porta
+DarknetConnectionsToadlet.ipAddress=Indirizzo del nodo in formato IP:porta
 DarknetConnectionsToadlet.ipAddressTitle=Indirizzo
 DarknetConnectionsToadlet.listenOnly=Non connesso e solo ascolto: il nodo non 
cercher? di connettersi a questo peer perch? l'utente l'ha impostato su solo 
ascolto (listenOnly)
 DarknetConnectionsToadlet.listenOnlyShort=Solo ascolto
@@ -223,7 +219,7 @@
 DarknetConnectionsToadlet.noPeersFirstHalf=Freenet non pu? funzionare perch? 
non sono stati ancora aggiunti dei peer ai quali connettersi.
 DarknetConnectionsToadlet.noPeersSecondHalf=Leggi l'infobox in alto per vedere 
come si fa.
 DarknetConnectionsToadlet.noPeersWithHomepageLink=Freenet non pu? funzionare 
perch? non sono ancora stati aggiunti dei peer ai quali collegarsi. Alla pagina 
${link}node homepage${/link}, in alto, si pu? leggere come fare.
-DarknetConnectionsToadlet.noRefOrURL=Non ? stato possibile rilevare una 
referenza nodo o una URL: riprovare.
+DarknetConnectionsToadlet.noRefOrURL=Non ? stato possibile rilevare una 
referenza nodo o una URL. Si prega di riprovare.
 DarknetConnectionsToadlet.noRequests=Al momento, il nodo non sta elaborando 
alcuna richiesta.
 DarknetConnectionsToadlet.nodeHomepage=homepage del nodo
 DarknetConnectionsToadlet.nodePortsTitle=Porte utilizzate dal Nodo
@@ -231,13 +227,13 @@
 DarknetConnectionsToadlet.notConnectedShort=Disconnessi
 DarknetConnectionsToadlet.opennetFnpPort=Opennet FNP: ${port}/UDP (usata per 
connessioni a peer non affidabili, cio? Sconosciuti. Forwardare se possibile)
 DarknetConnectionsToadlet.pasteReference=Incolla la referenza qui (il nodo 
elliminer? automaticamente le parti aggiunte da chat clients, p.es. <toad_>) :
-DarknetConnectionsToadlet.privateNote=Nota privata relativa a questo nodo:
+DarknetConnectionsToadlet.privateNote=Un commento privato relativo a questo 
nodo:
 DarknetConnectionsToadlet.privateNoteTitle=Nota Privata
-DarknetConnectionsToadlet.referenceCopyWarning=La referenza del nodo va 
copiata ${bold}COSI' COME E'${/bold}. Qualsiasi modificazione la render? 
${bold}inutilizzabile${/bold}..
-DarknetConnectionsToadlet.remove=Elimina!
-DarknetConnectionsToadlet.removePeers=Elimina i peer selezionati
+DarknetConnectionsToadlet.referenceCopyWarning=La referenza del nodo va 
copiata ${bold}SENZA VARIAZIONI${/bold}. Qualsiasi modificazione la render? 
${bold}inutilizzabile${/bold}..
+DarknetConnectionsToadlet.remove=Elimina
+DarknetConnectionsToadlet.removePeers=Elimina peer selezionati
 DarknetConnectionsToadlet.routingDisabled=Non sta instradando traffico: (la 
connessione tra nodo locale e remoto ? attiva ma uno dei due rifiuta di 
instradare traffico)
-DarknetConnectionsToadlet.routingDisabledShort=Non sta instradando traffico
+DarknetConnectionsToadlet.routingDisabledShort=Non instrada traffico
 DarknetConnectionsToadlet.seedClients=Nodi per i quali il nodo locale sta 
facendo da seednode.
 DarknetConnectionsToadlet.seedClientsShort=Seeding per
 DarknetConnectionsToadlet.seedServers=Nodi attualmente usati come seednode.
@@ -248,7 +244,7 @@
 DarknetConnectionsToadlet.separator=-- -- --
 DarknetConnectionsToadlet.statusTitle=Status
 DarknetConnectionsToadlet.tmciDisabled=TMCI non ? abilitato (semplice 
interfaccia a comandi testuali simile a telnet)
-DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/tcp (una semplice interfaccia 
a comandi testuali simile a telnet)
+DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/tcp (semplice interfaccia a 
comandi testuali simile a telnet)
 DarknetConnectionsToadlet.tooNew=Connesso ma troppo recente: La versione 
obbligatoria minima di questo peer e' maggiore della versione che stiamo 
utilizzando.
 DarknetConnectionsToadlet.tooNewShort=Troppo recente
 DarknetConnectionsToadlet.tooOld=Connesso ma obsoleto: Questo peer sta usando 
una versione obsoleta di Freenet. Esso non sar? utilizzato per l'instradamento 
delle richieste.
@@ -257,14 +253,14 @@
 DarknetConnectionsToadlet.triedToAddSelf=Non ? possibile aggiungere il proprio 
stesso nodo ad una lista di peer remoti.
 DarknetConnectionsToadlet.unauthorized=L'accesso a questa pagina ? interedetto.
 DarknetConnectionsToadlet.unknownAddress=(indirizzo sconosciuto)
-DarknetConnectionsToadlet.updateChangedPrivnotes=Aggiorna i commenti
+DarknetConnectionsToadlet.updateChangedPrivnotes=Aggiorna commenti
 DarknetConnectionsToadlet.urlReference=Inserire qui la URL della referenza:
 DarknetConnectionsToadlet.versionTitle=Versione
-ExtOldAgeUserAlert.extTooOld=Il file freenet-ext.jar sembra essere corrotto o 
obsoleto: Per l'aggiornamento usare 
http://downloads.freenetproject.org/alpha/freenet-ext.jar.
+ExtOldAgeUserAlert.extTooOld=Il file freenet-ext.jar sembra essere corrotto od 
obsoleto: Per l'aggiornamento usare 
http://downloads.freenetproject.org/alpha/freenet-ext.jar
 ExtOldAgeUserAlert.extTooOldShort=Il file freenet-ext.jar ? obsoleto. Si prega 
di aggiornarlo.
-ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext troppo vecchio
+ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext obsoleto
 FProxyToadlet.abortToHomepage=Interrompi e ritorna alla homepage di FProxy
-FProxyToadlet.alerts=Messaggi di stato dettagliati
+FProxyToadlet.alerts=Messaggi dettagliati sullo stato del nodo
 FProxyToadlet.alertsTitle=Avvertenze
 FProxyToadlet.backToFProxy=${link}Clicca qui${/link} per andare alla homepage 
di FProxy
 FProxyToadlet.backToReferrer=${link}Clicka qui${/link} per tornare alla pagina 
referente.
@@ -374,13 +370,13 @@
 FetchException.longError.21=Troppo grande
 FetchException.longError.22=Volume dei metadati troppo grande
 FetchException.longError.23=Troppi blocchi per segmento
-FetchException.longError.24=Sono necessarie pi? metastrings (componenti di 
percorso) nella URI
+FetchException.longError.24=Sono necessarie pi? metastringhe (componenti di 
percorso) nella URI
 FetchException.longError.25=Annullato
 FetchException.longError.26=Archivio riavviato
 FetchException.longError.27=Redirezione permanente: usare la nuova URI
-FetchException.longError.28=Non sono stati trovati dati sufficienti; alcuni 
dati sono stati richiamati ma il redirect potrebbe puntare su localit? non 
valide
-FetchException.longError.29=MIME Type sbagliato: la chiave non era nella lista 
dei MIME type permessi fornita dal client.
-FetchException.longError.3=Il nodo non sa cosa fare dei metadati
+FetchException.longError.28=Non ? stato possibile raccogliere dati in quantit? 
sufficiente; dati parziali sono stati richiamati ma il redirect potrebbe 
puntare su localit? non valide
+FetchException.longError.29=MIME Type non valido: chiave non presente in lista 
di MIME type permessi fornita dal client.
+FetchException.longError.3=Metadati non utilizzabili
 FetchException.longError.30=La richiesta ? stata terminata da un nodo perch? 
esso aveva da poco ricevuto un'altra richiesta per la stessa chiave e quella 
richiesta non era andata a buon fine.
 FetchException.longError.4=Non ? stato possibile interpretare i metadati.
 FetchException.longError.5=Fallimento durante l'estrazione di file da un 
archivio
@@ -402,9 +398,9 @@
 FetchException.shortError.2=Splitfile metadati sconosciuto
 FetchException.shortError.20=URI non valida
 FetchException.shortError.21=Troppo grande
-FetchException.shortError.22=Volume di metadati troppo grande
+FetchException.shortError.22=Volume metadati eccessivo
 FetchException.shortError.23=Troppi blocchi per segmento
-FetchException.shortError.24=Non abbastanza meta-strings
+FetchException.shortError.24=Quantit? meta-strings insufficiente
 FetchException.shortError.25=Annullato da caller
 FetchException.shortError.26=Archivio riavviato
 FetchException.shortError.27=Nuova URI
@@ -434,7 +430,7 @@
 FileOffer.succeededReceiveHeader=Il trasferimento del file ${filename} da 
${node} ? stato completato.
 FileOffer.succeededReceiveShort=${filename} ? stato ricevuto da ${node}.
 FileOffer.succeededReceiveTitle=Trasferimento file completato
-FirstTimeWizardToadlet.bandwidthLimit=Limitazioni dell'ampiezza di banda
+FirstTimeWizardToadlet.bandwidthLimit=Limitazione banda
 FirstTimeWizardToadlet.bandwidthLimitLong=Scegliere il tipo di connessione e 
la velocit? dal drop-down menu.
 FirstTimeWizardToadlet.bwlimitHigherSpeed=Velocit? maggiore
 FirstTimeWizardToadlet.bwlimitLowerSpeed=Velocit? minore
@@ -444,7 +440,7 @@
 FirstTimeWizardToadlet.congratz=Benvenuto a bordo!
 FirstTimeWizardToadlet.congratzLong=Congratulazioni, la configurazione di base 
del nodo Freenet ? completa. E' possibile cambiare e modificare ognuno dei 
parametri appena impostati usando la pagina "configurazione" che ? 
raggiungibile attraverso il menu sulla sinistra dell'interfaccia. Vi auguriamo 
una piacevole esperienza con Freenet.
 FirstTimeWizardToadlet.connectToStrangers=Connetti a sconosciuti?
-FirstTimeWizardToadlet.connectToStrangersLong=Permettendo connessioni con 
sconosciuti, questo nodo Freenet sar? meno sicuro; chiunque port? determinare 
che un nodo sta girando sul tuo computer e qualsiasi malintenzionato portebbe 
connettersi ad esso. per non permettere che Freenet si connetta a chiunque, 
bisogner? contattare almeno altre tre persone conosciute e fidate che gi? 
stiano usando Freenet e conettersi a loro manualmente.
+FirstTimeWizardToadlet.connectToStrangersLong=In un mondo ideale, ogni utente 
Freenet si connetterebbe esclusivamente con nodi gestiti da persone fid?te. 
Qesto ? di gran lunga il sistema pi? sicuro, che rende molto difficile per un 
osservatore esterno determinare se un nodo stia o meno girando sul computer 
osservato. D'altra parte, non avendo a disposizione almeno cinque amici, 
parenti o conoscenti fid?ti che gi? usano Freenet, ai quali connettersi, come 
soluzione alternativa ? possibile lasciare che il nodo si connetta 
automaticamente a nodi gestiti da sconosciuti. Questa opzione pu? essere 
disattivata in qualsiasi momento.
 FirstTimeWizardToadlet.continue=Continua
 FirstTimeWizardToadlet.continueEnd=Clicca qui per cominciare ad usare Freenet!
 FirstTimeWizardToadlet.datastoreSize=Dimensioni magazzino dati (datastore)
@@ -455,12 +451,12 @@
 FirstTimeWizardToadlet.iDoTrust=Possiamo fidarci degli utenti connessi a 
${interface} (${ip}) ?
 FirstTimeWizardToadlet.isNetworkTrusted=La rete locale ? affidabile?
 FirstTimeWizardToadlet.isNetworkTrustedLong=La rete locale ? affidabile? 
Rispondendo di si a questa domanda, tutti i servizii forniti dal nodo Freenet 
saranno pienamente accessibili da chiunque sul network suddetto. E' possibile 
configurare un accesso pi? selettivo attraverso la pagina "configurazione" dopo 
aver completato questo wizard.
-FirstTimeWizardToadlet.memoryLimit=Uso di memoria
+FirstTimeWizardToadlet.memoryLimit=Utilizzo memoria
 FirstTimeWizardToadlet.memoryLimitLong=Specifica il valore massimo della 
memoria utilizzabile da Freenet. Il nodo ha bisogno di pi? memoria se ci sono 
molti file in coda per il download/upload. Si raccomanda di non impostare 
questa opzione per un valore inferiore a 128MB tranne nel caso in cui la 
memoria totale a disposizione sia veramente poca. Se il computer ha 1GB di 
memoria RAM o pi?, si consiglia di usare almeno 256MB. Il cambiamento avr? 
effetto dopo aver riavviato Freenet.
 FirstTimeWizardToadlet.noNetworkIF=Non ? stata trovata nessuna interfaccia di 
rete addizionale
 FirstTimeWizardToadlet.noNetworkIFLong=Freenet non ha trovato altre interfacce 
di rete, quindi dar? per scontato che l'utente si connetter? dal computer 
locale e solo da quello.
 FirstTimeWizardToadlet.opennetNo=Si, ho almeno 5 amici che usano Freenet e 
aggiunger? i loro dati alla pagina degli Amici.
-FirstTimeWizardToadlet.opennetWarning=Freenet potrebbe essere illegale in 
alcuni paesi perch? rende possibile comunicazione anonima e non censurabile 
garantendo la libert? di espressione. In tal  caso ? bene NON connettersi degli 
sconosiuti in quanto ci? faciliterebbe la scoperta dell'esistenza del nodo; 
connettersi invece ad amici (possibilmente fid?ti). Freenet ? ancora in corso 
di sviluppo e gli autori non possono garantire la sicurezza degli utenti! In 
particolare, i peer a cui ci si connette ${bold}potrebbero${/bold} essere 
capaci di spiare le nostre richieste
+FirstTimeWizardToadlet.opennetWarning=In Paesi dove networking anonimo ? 
illegale e/o se usa Freenet per accedere a materiale che potrebbe mettere nei 
guai chi ne fosse trovato in possesso, un serio pericolo pu? risultare dal 
configurare il nodo in modo da connettersi automaticamente a nodi gestiti da 
sconosciuti, facilitando il il compito ad un avversario determinato. Freenet ? 
ancora in fase sperimentale, gli autori non sono in grado di garatire sicurezza 
assoluta.
 FirstTimeWizardToadlet.opennetYes=No, voglio che il nodo trovi automaticamente 
degli sconosciuti ai quali connettersi.
 FirstTimeWizardToadlet.selectLanguage=Lingua
 FirstTimeWizardToadlet.selectLanguageLong=Selezionare una lingua dalla lista 
qui sotto:
@@ -479,7 +475,7 @@
 FirstTimeWizardToadlet.memory.128M=128Mb - Il minimo indispensabile
 FirstTimeWizardToadlet.memory.192M=192Mb - Default ragionevole.
 FirstTimeWizardToadlet.memory.256M=256Mb - Per computer con almeno 1GB di RAM
-FirstTimeWizardToadlet.memory.512M=512Mb - per computer con moltissima memoria 
RAM
+FirstTimeWizardToadlet.memory.512M=512Mb - per computer con molta memoria RAM
 FirstTimeWizardToadlet.memory.64M=64MB - Usare solo in caso di estrema 
necessit?
 FproxyToadlet.dangerousRSSTitle=Contenuto potenzialmente pericoloso (RSS)
 GIFFilter.invalidHeader=Il file non contiene un header GIF valido.
@@ -490,12 +486,12 @@
 GenericReadFilterCallback.couldNotParseAbsoluteFreenetURI=Non ? stato 
possibile interpretare come URI Freenet assoluta.
 GenericReadFilterCallback.couldNotParseFormURIWithError=Il filtro non ? 
riuscito ad interpretare ${error} dalla URI.
 GenericReadFilterCallback.couldNotParseRelativeFreenetURI=Non ? stato 
possibile interpretare come Freenet URI relativa.
-GenericReadFilterCallback.couldNotParseURIWithError=Il filtro non ? riuscito a 
interpretare la URI: ${error}
-GenericReadFilterCallback.invalidFormURI=Forma URI non valida perch? punta ad 
una risorsa esterna (non Freenet)
+GenericReadFilterCallback.couldNotParseURIWithError=Il filtro ha fallito 
nell'analisi della URI: ${error}
+GenericReadFilterCallback.invalidFormURI=URI form non valida: punta a risorsa 
esterna
 GenericReadFilterCallback.invalidFormURIAttemptToEscape=Tentativo di evasione 
dalla struttura delle directory
 GenericReadFilterCallback.malformedAbsoluteURL=URL malformata (assoluto): 
${error}
 GenericReadFilterCallback.malformedRelativeURL=URL malformata (relativo): 
${error}
-GenericReadFilterCallback.protocolNotEscaped=Non ? un protocollo fuggitivo: 
${protocol}
+GenericReadFilterCallback.protocolNotEscaped=Non si tratta di un protocollo 
fuggitivo: ${protocol}
 HTMLFilter.couldNotParseStyle=Non ? stato possibile abbinare lo stile 
dell'input
 HTMLFilter.deletedUnknownStyle=stile sconosciuto eliminato
 HTMLFilter.failedToParseLabel=Il filtro HTML non ? riuscito a interpretare la 
pagina
@@ -506,8 +502,8 @@
 IPDetectorPluginManager.direct=Il computer sembra essere direttamente connesso 
a Internet, dovrebbe essere quindi possibile connettersi con qualunque nodo 
Freenet.
 IPDetectorPluginManager.directTitle=Rilevata connessione diretta a Internet
 IPDetectorPluginManager.forwardPort=Il tuo nodo sembra essere dietro qualche 
tipo di NAT (vedi la pagina connettivit? per dettagli). Se possibile, dovresti 
forwardare le porte UDP (not TCP) ${port} per migliorare la connettivit?. E' 
possibile comunque che tu abbia gi? provveduto; Serve del tempo a Freenet per 
rilevare il port forward. Leggi ${link}qui${/link} per ulteriori informazioni.
-IPDetectorPluginManager.forwardPortMaybeForwarded=Sembra che il nodo si trovi 
dietro una NAt di qualche tipo (vedi pagina connettivit? per i dettaglil). Se 
possibile, bigognerebbe configurare il forward per la porta ${port} UDP (non 
TCP) allo scopo di migliorare la connettivit?. E' possibile comunque che ci? 
sia gi? stato fatto: occorre un po' di tempo perch? Freenet rilevi il port 
forward. Clicca ${link}qui${/link} per maggiori informazioni.
-IPDetectorPluginManager.forwardPortNotForwarded=Sembra che il nodo si trovi 
dietro una NAt di qualche tipo (vedi pagina connettivit? per i dettaglil). Se 
possibile, bigognerebbe configurare il forward per la porta ${port} UDP (non 
TCP) allo scopo di migliorare la connettivit?. Sembra che ci? non sia stato 
fatto, anche occorre un po' di tempo perch? Freenet rilevi il port forward. 
Clicca ${link}qui${/link} per maggiori informazioni
+IPDetectorPluginManager.forwardPortMaybeForwarded=Sembra che il nodo si trovi 
dietro una NAT di qualche tipo (vedi pagina connettivit? per i dettaglil). Se 
possibile, bigognerebbe configurare il forward per la porta ${port} UDP (non 
TCP) allo scopo di migliorare la connettivit?. E' possibile comunque che ci? 
sia gi? stato fatto: occorre un po' di tempo perch? Freenet rilevi il port 
forward. Clicca ${link}qui${/link} per maggiori informazioni.
+IPDetectorPluginManager.forwardPortNotForwarded=Sembra che il nodo si trovi 
dietro una NAT di qualche tipo (vedi pagina connettivit? per i dettaglil). Se 
possibile, bigognerebbe configurare il forward per la porta ${port} UDP (non 
TCP) allo scopo di migliorare la connettivit?. Sembra che ci? non sia stato 
fatto, anche occorre un po' di tempo perch? Freenet rilevi il port forward. 
Clicca ${link}qui${/link} per maggiori informazioni
 IPDetectorPluginManager.forwardPortShort=Per favore, forwardare la porta UDP 
${port}.
 IPDetectorPluginManager.forwardPortShortMaybeForwarded=Si prega di configurare 
il forward della porta ${port} UDP (questo potrebbe essere gi? stato fatto, ma 
non ancora rilevato)
 IPDetectorPluginManager.forwardPortShortNotForwarded=Si prega di configurare 
il forward per la porta ${port} UDP .
@@ -515,10 +511,10 @@
 IPDetectorPluginManager.forwardTwoPortsMaybeForwarded=Sembra che il nodo si 
trovi dietro una NAt di qualche tipo (vedi pagina connettivit? per i 
dettaglil). Se possibile, bigognerebbe configurare il forward per la porta 
${port} UDP (non TCP) allo scopo di migliorare la connettivit?. E' possibile 
comunque che ci? sia gi? stato fatto: occorre un po' di tempo perch? Freenet 
rilevi il port forward. Clicca ${link}qui${/link} per maggiori informazioni
 IPDetectorPluginManager.forwardTwoPortsNotForwarded=Pare che il nodo sia 
dietro una  NAT (controllare la pagina connettivit? per i dettagli). PSe 
possibile si dovrebbe configurare il forward per le porte ${port1} e ${port2} 
UDP (non TCP), allo scopo di migliorare la connettivit?. Sembra che il forward 
delle porte non sia attivo, anche se Freenet non pu? determinarlo per certo. 
Controllare ${link}qui${/link} per ulteriori informazioni.
 IPDetectorPluginManager.forwardTwoPortsShort=Per favore, forwardare le porte 
UDP ${port1} e ${port2}.
-IPDetectorPluginManager.forwardTwoPortsShortMaybeForwarded=Configurare il 
forward  perle porte ${port1} e ${port2} UDP (potrebbe essere gi? stato fatto).
+IPDetectorPluginManager.forwardTwoPortsShortMaybeForwarded=Configurare il 
forward  per porte ${port1} e ${port2} UDP (potrebbe essere gi? stato fatto).
 IPDetectorPluginManager.forwardTwoPortsShortNotForwarded=Si prega di 
configurare il forward per le porte ${port1} e ${port2} UDP.
-IPDetectorPluginManager.fullCone=La connessione a Internet sembra avvenire 
attraverso un "cono completo" NAT. Il nodo Dovrebbe potersi connettere a 
qualunque altro nodo Freenet.
-IPDetectorPluginManager.fullConeTitle=Rilevato full cone NAT
+IPDetectorPluginManager.fullCone=La connessione a Internet sembra avvenire 
attraverso una "full cone" NAT. Il nodo dovrebbe riuscire connettersi con 
qualunque altro nodo Freenet.
+IPDetectorPluginManager.fullConeTitle=Rilevata full cone NAT
 IPDetectorPluginManager.maybeAlreadyForwarded=Potrebbe essere gi? stato fatto 
(? difficile per Freenet determinarlo).
 IPDetectorPluginManager.noConnectivity=La connessione a Internet non sembra 
essere provvista di supporto UDP. A meno che non si tratti di un rilevamento 
erroneo, non ? probabile che Freenet possa funzionare al momento.
 IPDetectorPluginManager.noConnectivityTitle=Mancanza di connettivit? UDP
@@ -526,10 +522,10 @@
 
IPDetectorPluginManager.portForwardHelpURL=http://wiki.freenetproject.org/FirewallAndRouterIssues
 IPDetectorPluginManager.portRestricted=La connessione a Internet sembra 
avvenire attraverso una NAT a porte ristrette (router). Il nodo potr? 
connettersi a quasi tutti gli altri nodi ma non a quelli dietro NAT simmetrica.
 IPDetectorPluginManager.portRestrictedTitle=Port restricted cone NAT rilevata
-IPDetectorPluginManager.restricted=La connessione a Internet sembra avvenire 
attraverso un "restricted cone" NAT (router). Dovrebbe essere comunque 
possibile connettersi alla maggior parte dei nodi Freenet.
-IPDetectorPluginManager.restrictedTitle=E' stato rilevato un restricted cone 
NAT
+IPDetectorPluginManager.restricted=La connessione a Internet sembra avvenire 
attraverso una "restricted cone" NAT (router). Dovrebbe essere comunque 
possibile connettersi alla maggior parte dei nodi Freenet.
+IPDetectorPluginManager.restrictedTitle=E' stata rilevata una restricted cone 
NAT
 IPDetectorPluginManager.seriousConnectionProblems=Gravi problemi di 
connessione:
-IPDetectorPluginManager.suggestForwardPort=Potrebbe essere necessario 
configurare il 'port forwarding'  per la porta (Porta UDP numero ${port}) 
manualmente. Vedi: http://wiki.freenetproject.org/FirewallAndRouterIssues 
(disponibile solo in inglese, per ora).
+IPDetectorPluginManager.suggestForwardPort=Potrebbe essere necessario 
configurare  manualmente il 'port forwarding'  per la porta UDP numero ${port}. 
Vedi: http://wiki.freenetproject.org/FirewallAndRouterIssues (disponibile solo 
in inglese, per ora).
 IPDetectorPluginManager.suggestForwardPortWithLink=Potrebbe essere necessario 
${link}configurare il port forwarding${/link} (porta UDP numero ${port}) 
manualmente (oppure ci? ? gi? stato fatto: Freenet pu? avere delle difficolt? 
in questo tipo di rilevazione).
 IPDetectorPluginManager.suggestForwardTwoPorts=Sarebbe opportuno configurare 
manualmente il port forward sul router per le porte ${port1} e ${port2} (UDP). 
vedi http://wiki.freenetproject.org/FirewallAndRouterIssues (disponibile solo 
in inglese, per ora).
 IPDetectorPluginManager.suggestForwardTwoPortsWithLink=Potrebbe essere 
necessario configurare manualmente ${link}il forward delle porte${/link} Per 
porte nummero ${port1} e ${port2}, UDP. (questo messaggio pu? in alcuni casi 
continuare ad apparire per un po' di tempo dopo aver configurato il forward)
@@ -548,13 +544,13 @@
 InsertException.longError.1=Caller ha fornito una URI che non ? possibile 
utilizzare"
 InsertException.longError.10=Annullato dall'utente
 InsertException.longError.11=Meta string (probabilmente '/') usata nella URI
-InsertException.longError.12=Binary blob format error
+InsertException.longError.12=Errore di formattazione nel blob binario
 InsertException.longError.2=Errore bucket interno: potrebbe trattarsi di 
mancanza di spazio sufficiente su disco rigido o di mancanza di autorizzazione.
 InsertException.longError.3=Errore interno
 InsertException.longError.4=Un nodo 'a valle' (downstream) ? andato in time 
out o ? stato gravemente sovraccaricato
 InsertException.longError.5=Non ? stato possibile propagare questa inserzione 
su un numero sufficiente di nodi (questo e' normale su network di piccole 
dimensioni: si pu? provare a richiamare il file comunque)
 InsertException.longError.6=Errori fatali in un'inserzione di splitfiles
-InsertException.longError.7=Non ? stato possibile inserire gli splitfile: 
numero di tentativi esaurito (errori nonfatali)
+InsertException.longError.7=Non ? stato possibile inserire splitfile: numero 
di tentativi esaurito (errori nonfatali)
 InsertException.longError.8=Non ? stato possibile far partire l'inserzione dal 
nodo locale.
 InsertException.longError.9=L' inserzione ? in conflitto con dati 
pre-esistenti e differenti alla stessa chiave
 InsertException.shortError.1=URI non valida
@@ -587,7 +583,7 @@
 KnownUnsafeContentTypeException.dangerousScriptsLabel=Scripting pericoloso:
 KnownUnsafeContentTypeException.knownUnsafe=Questo e' un MIME type 
potenzialmente pericoloso. Se il nodo lo lascia passare, il browser potrebbe 
fare qualcosa capace di compromettere l'anonimato dell'utente, esponendone 
l'indirizzo IP in relazione a questa pagina. In particolare:
 KnownUnsafeContentTypeException.noFilter=Non ? disponibile alcun filtro per 
questo tipo di dati; ? necessario quindi prendere tutte le possibili 
precauzioni.
-KnownUnsafeContentTypeException.title=Tipo conosciuto per essere pericoloso: 
${type}
+KnownUnsafeContentTypeException.title=Conosciuto come pericoloso: Tipo ${type}
 LocalFileInsertToadlet.checkPathExist=Accerta l'esistenza del percorso 
specificato.
 LocalFileInsertToadlet.checkPathIsDir=Controlla che il percorso specificato 
sia una directory
 LocalFileInsertToadlet.checkPathReadable=Controlla che il percorso specificato 
sia leggibile dall'utente che sta utilizzando il nodo.
@@ -617,8 +613,8 @@
 LoggerHook.unrecognizedPriority=Nome di priorit? non riconosciuto: ${name}.
 LongOption.parseError=Il valore specificato non pu? essere interpretato come 
64-bit integer : ${val}
 MeaningfulNodeNameUserAlert.noNodeNick=Non ? stato possibile trovare il 
nickname da utilizzare. Usare qui un indirizzo e-mail o un nickname IRC ? 
generalmente una buona idea in quanto consente ai peer di identificare il nodo. 
(nota che soltanto i peer darknet elencati alla pagina Amici potranno vedere il 
nome del nodo, che resta invece invisibile ai peer Opennet)
-MeaningfulNodeNameUserAlert.noNodeNickShort=Non ? stato impostato il nome del 
nodo.
-MeaningfulNodeNameUserAlert.noNodeNickTitle=Non ? stato impostato il nome del 
nodo.
+MeaningfulNodeNameUserAlert.noNodeNickShort=Nome nodo non definito.
+MeaningfulNodeNameUserAlert.noNodeNickTitle=Nome nodo non definito.
 N2NTMToadlet.composingMessageLabel=Messaggio N2NTM  da inviare ai seguenti 
nodi:
 N2NTMToadlet.delayed=Il nodo interressato sta temporaneamente respingendo 
richieste; il messaggio potrebbe giungere in lieve ritardo.
 N2NTMToadlet.delayedTitle=Differito
@@ -631,13 +627,13 @@
 N2NTMToadlet.peerNotFoundTitle=Peer non trovato
 N2NTMToadlet.peerNotFoundWithHash=Non ? stato possibile trovare il peer con 
hash code \u201c${hash}\u201d
 N2NTMToadlet.processingSend=Invio messaggio in corso
-N2NTMToadlet.queued=Il peer interessato non ? connesso in questo momento. Il 
messaggio ? stato messo in coda e verr? spedito il pi? presto possibile
+N2NTMToadlet.queued=In attesa: Il peer interessato non ? connesso in questo 
momento. Il messaggio ? stato posto in attesa e verr? spedito al pi? presto 
possibile
 N2NTMToadlet.queuedTitle=Aggiunto alla Coda
 N2NTMToadlet.returnToFriends=Torna alla lista degli Amici
 N2NTMToadlet.returnToNodeHomepage=Torna alla homepage del nodo
 N2NTMToadlet.sendMessage=Invia Messaggio di Testo da Nodo a Nodo (N2NTM)
 N2NTMToadlet.sendMessageShort=Invia Messaggio
-N2NTMToadlet.sendStatus=Status N2NTM in uscita
+N2NTMToadlet.sendStatus=Stato N2NTM in uscita
 N2NTMToadlet.sent=Messaggio inviato al peer
 N2NTMToadlet.sentTitle=Inviato
 N2NTMToadlet.tooLong=I messaggi N2NTM possono contenere fino a un massimo di 
1024 caratteri
@@ -648,23 +644,23 @@
 N2NTMUserAlert.headerShort=Messaggio da ${from}
 N2NTMUserAlert.reply=Rispondi
 N2NTMUserAlert.title=Messaggio di testo da nodo a nodo (N2NTM) ${number} da: 
${peername} (${peer})
-Node.acceptSeedConnections=Se impostato su vero, il nodo accetter? connessioni 
dai nodi che intendono usare la nuova modalit? insicura e li aiuter? a 
connettersi alla rete Freenet. Questo permette la connessione a qualsiasi nodo 
in possesso della referenza, ma limitata all'announcement: le richieste possono 
essere fatte solo ai nodi ottenuti tramite l'announcement (cio' potrebbe 
includere questo nodo, se non ha gi? molti Sconosiuti)
-Node.acceptSeedConnectionsShort=Essere un seednode?
-Node.alwaysAllowLocalAddresses=Sempre permettere la connessione a nodi via 
indirizzi locali?
+Node.acceptSeedConnections=Selezionando "vero" il nodo accetter? connessioni 
da nodi che intendono usare la modalit? insicura (opennet) e li aiuter? a 
connettersi alla rete Freenet. Ci? rende possibile la connessione a qualsiasi 
nodo in possesso della referenza ma limitata dall'annuncio: le richieste di 
connessione sono indirizzate solo ai nodi aggiunti tramite annuncio. Il nodo 
locale potrebbe essere incluso a meno che non abbia gi? molti peer opennet 
(visibili alla pagina "Sconosciuti")
+Node.acceptSeedConnectionsShort=Abilita seednode
+Node.alwaysAllowLocalAddresses=Permettere sempre la connessione a nodi via 
indirizzi locali?
 Node.alwaysAllowLocalAddressesLong=Se impostato su "vero" il nodo cercher? di 
connettersi ad altri nodi usando il loro indirizzo locale (localhost, LAN) 
oltre al loro indirizzo IP pubblico. Se questa opzione non e' impostata, si pu? 
comunque abilitarla separatamente per singoli peer darknet (ma non per i peer 
opennet). Impostare questa opzione se ci si vuole connettere ad altri nodi 
sulla stessa rete locale (LAN) o che girano sullo stesso computer, e non far 
caso alle referenze "bogus" ("scr?use") che possono far mandare al nodo 
pacchetti UDP alle macchine sulla rete locale.
 Node.assumeNATed=Presumere che la porta non sia forwardata.
 Node.assumeNATedLong=Dare per scontato che la porta sia dietro NAT e non 
forwardata? In questo caso il nodo mander? handshake ogni 10-30 secondi.
 Node.bandwidthLimitMustBePositiveOrMinusOne=Il valore dell'ampiezza di banda 
deve essere positivo o -1
-Node.bindTo=Indirizzo IP collegato
-Node.bindToLong=Indirizzo IP collegato
-Node.buggyJVM=La JVM attualmente in uso (${version}) ? una versione 
notoriamente afflitta da 'bug'. Pu? produrre OutOfMemoryError anche con molta 
memoria ancora a disposizione. Si raccomanda di aggiornare il software Java, 
usando come minimo Sun Java 1.4.2_13, 1.5.0_10 o 1.6 (quest'ultima ? la 
versione raccomandata). Vedi 
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4855795
+Node.bindTo=Indirizzo IP
+Node.bindToLong=Indirizzo IP
+Node.buggyJVM=La JVM attualmente in uso (${version}) ? una versione 
notoriamente afflitta da 'bug' che pu? produrre OutOfMemoryError anche con 
molta memoria ancora a disposizione. Si raccomanda di aggiornare Java. La 
versione consigliata ? Sun Java 1.6, ma ? possibile usare anche 1.4.2 o 1.5.
 Node.buggyJVMShort=Freenet sta attualmente utilizzando Java versione 
${version}, che ? notoriamente afflitta da p'bug' pericolosi. Si prega di 
aggiornare Java al pi? presto possibile.
 Node.buggyJVMTitle=Avvertennza JVM soggetta a 'bug'
 Node.buggyJVMWithLink=La JVM in uso (${version}) ? notoriamente 
${link}difettosa${/link}. Pu? produrre errori tipo OutOfMemoryError anche con 
molta memoria ancora disponibile. Sarebbe auspicabile aggiornare almeno a Sun 
Java 1.4.2_13, 1.5.0_10 o 1.6 (quest'ultima ? la versione consigliata).
 Node.bwlimitMustBePositive=Il limite dell'ampiezza di banda deve essere 
positivo
-Node.databaseMemory=Memoria massima utilizzabile dal magazzino dati
+Node.databaseMemory=Memoria massima utilizzabile dal datastore
 Node.databaseMemoryLong=Uso massimo della memoria del database contenente 
indici del magazzino dati (datastore). 0 significa nessun limite (non supera 
comunque il 30% circa della memoria massima)
-Node.deadlockTitle=Deadlocking probabilmente dovuto ad una combinazione 
JVM/kernel particolarmente 'buggy'
+Node.deadlockTitle=Deadlocking probabilmente dovuto ad una combinazione di JVM 
e kernel che da luogo a "bug".
 Node.deadlockWarning=ATTENZIONE: E' stato rilevato l'uso di Sun JVM con NPTL. 
Ci? pu? produrre il "congelamento" del nodo a causa della JVM che perde un 
lock. Per ovviare a tale inconveniente ? necessatio disabilitare NPTL 
impostando la variabile ambientale LD_ASSUME_KERNEL=2.4.1. Le versioni pi? 
recenti di Freenet installer dovrebbero gi? esserne provviste; reinstallare, o 
modificare il file run.sh 
(https://emu.freenetproject.org/svn/trunk/apps/installer/installclasspath/run.sh).
 Su alcuni sistemi pu? essere necessario installare le pthreads libraries 
perch? questo funzioni. Nota che il nodo cercherebbe di riavviarsi 
automaticamente se un tale deadlock occorresse, ma questa funzione non ? ancora 
pienamente affidabile, e richiede tempo.
 Node.disableHangCheckers=Disabilita tutti gli hang checker
 Node.disableHangCheckersLong=Disabilita tutte le funzioni hang 
checkers/watchdog. Impostare per fare il profiling di Fred.
@@ -691,19 +687,19 @@
 Node.forceBigShrinkLong=Determina se eseguire immediatamente le riduzioni di 
dimensione in misura superiore al 10% del magazzino (store), piuttosto che 
aspettare il prossimo riavvio del nodo. Le riduzioni on-line non preservano i 
dati utilizzati per ultimi quindi l'uso di questa opzione non ? raccomandato; 
da usarsi solo nel caso in cui sia desiderabile un risultato immediato.
 Node.inBWLimit=Limite ampiezza di banda in entrata (bytes per secondo)
 Node.inBWLimitLong=Limite dell'ampiezza di banda in entrata (bytes/sec); il 
nodo cerca di non eccedere tale limite; -1 siglifica quattro volte il limite 
impostato per l'ampiezza di banda in uscita (outputBandwidthLimit)
-Node.invalidStoreSize=Il magazzino dati non pu? essere di dimensioni inferiori 
a 32MB
+Node.invalidStoreSize=Il datastore (magazzino dati) deve essere di dimensioni 
uguali o superiori a 32MB
 Node.l10nLanguage=Lingua dell' interfaccia grafica
-Node.l10nLanguageLong=Cambia la lingua in cui messaggi sono visualizzati. 
Alcune frasi e messaggi saranno visibili in versione tradotta dopo il prossimo 
riavvio del nodo.
+Node.l10nLanguageLong=Cambia la lingua in cui messaggi sono visualizzati. 
Alcune frasi e messaggi saranno visibili in versione tradotta solo dopo il 
prossimo riavvio del nodo.
 Node.maxHTL=HTL massimo
 Node.maxHTLLong=HTL massimo (PER USO ESCLUSIVO DEGLI SVILUPPATORI!)
 Node.maxOpennetPeers=Numero massimo di peer Opennet
-Node.maxOpennetPeersLong=Numero massimo di peer Opennet (deve essere compreso 
tra zero e 20 incluso)
-Node.maxOpennetPeersMustBeTwentyOrLess=Deve essere venti o minore
-Node.mustBePositive=Il valore di config deve essere positivo
+Node.maxOpennetPeersLong=Numero massimo di peer Opennet (il  valore 
specificato minore o uguale a venti; le connessioni darknet verranno sottratte 
dal limite totale)
+Node.maxOpennetPeersMustBeTwentyOrLess=Il valore deve essere uguale o 
inferiore a 20
+Node.mustBePositive=Il valore deve essere positivo!
 Node.nodeDir=Directory del nodo
 Node.nodeDirLong=Directory contenente file relativi al nodo, per esempio la 
lista dei peer
-Node.nodeName=Nickname di questo nodo Freenet
-Node.nodeNameLong=Nickname del nodo. Visibile solo agli Amici
+Node.nodeName=Nome del nodo
+Node.nodeNameLong=Nome del nodo. E' visibile solo agli Amici (darknet peer), 
mentre gli Sconosciuti (opennet peer) non potranno vederlo.
 Node.notUsingSunVM=E' stata rilevata una JVM ${vendor} ${version} che potrebbe 
influire sul corretto funzionamento del nodo. Se possibile, installare Sun java 
disponibile presso http://www.java.com/getjava
 Node.notUsingSunVMShort=Freenet sta attualmente utilizzando JVM (Java Virtual 
Machine) diversa da Sun, che ? quella raccomandata. Si prega di scaricare ed 
installare la versione corrente di Sun Java JRE (Java Runtime Environment)
 Node.notUsingSunVMTitle=Il nodo non sta usando una JVM della Sun
@@ -711,26 +707,26 @@
 Node.notUsingWrapperShort=Freenet sta girando senza wrapper. Questo non ? 
raccomandato.
 Node.notUsingWrapperTitle=Il nodo non sta usando il wrapper!
 Node.oneConnectionPerIP=Limita ad una connessione per indirizzo?
-Node.oneConnectionPerIPLong=Non permettere pi? di una connessione per 
indirizzo? Questo render? leggermente pi? difficile eseguire un attacco 
connettendosi al nodo pi? volte con diverse identit? in modo da dominare il 
routing (instradamento) di questo nodo e rendere pi? facile raccogliere dati 
con lo "harvesting" (lett: "il raccolto", in agricoltura). Abilitare questa 
opzione rende anche impossibile che un peer sia connesso al nodo sia su darknet 
che su opennet.
-Node.opennetEnabled=Abilita Modalit? Insicura (connette automaticamente a nodi 
non gestiti da utenti conosciuti ed affidabili)
-Node.opennetEnabledLong=Abilita Modalit? Insicura? (detta anche Opennet) 
Abilitando questa opzione il nodo scambier? automaticamente referenze on altri 
nodi. Ma questo significa anche che il fatto che su questo computer gira un 
nodo Freenet non sar? pi? un segreto e molti attacchi saranno pi? facili da 
eseguire. Conoscendo abbastanza gente che usa Freenet, si consiglia di 
continuare a connettersi soltanto ad utenti conosciuti ed addifabili (Amici)
+Node.oneConnectionPerIPLong=Non permettere pi? di una connessione per 
indirizzo? Ci? rende leggermente pi? difficile un attacco eseguito 
connettendosi al nodo pi? volte con diverse identit? in modo da dominarne il 
routing (instradamento) e rendere pi? facile raccogliere dati con lo 
"harvesting" (lett: "il raccolto", in agricoltura). Questa opzione impedisce 
che un peer sia connesso al nodo sia su darknet che su opennet.
+Node.opennetEnabled=Abilita Modalit? Insicura (connette automaticamente a nodi 
gestiti da Sconosciuti)
+Node.opennetEnabledLong=Abilita Modalit? Insicura? (detta anche Opennet) 
Abilitando questa opzione il nodo scambier? automaticamente referenze on altri 
nodi. Ci? rende facilmente osservabile dall'esterno il fatto che su questo 
computer sta girando un nodo Freenet, facilitando attacchi di diversi tipi. 
Avendone la possibilit?, l'opzione migiore ? quella di connettersi soltanto ad 
utenti conosciuti ed addifabili (Darknet peer, vedi pagina Amici)
 Node.outBWLimit=Limite dell'ampiezza di banda in uscita (bytes per secondo)
 Node.outBWLimitLong=Limite "duro" dell' ampiezza di banda in uscita 
(bytes/sec); di solito il nodo non eccede questo limite
-Node.passOpennetPeersThroughDarknet=Trasmettere referenze opennet attraverso 
peer darknet?
+Node.passOpennetPeersThroughDarknet=Trasmetti referenze opennet attraverso 
darknet peer
 Node.passOpennetPeersThroughDarknetLong=Se impostata su "vero" referenze 
opennet verranno trasmesse attraverso peer darknet (ma MAI la referenza del 
nodo locale). In questo modo un nodo (nodo locale, o i suoi peer) pu? ottenere 
peer opennet dai suoi peer darknet. Questo ? utile perch? permette di 
riconnettersi in caso di perdita dei peer, per esempio dopo una lunga 
disconnessione, ma rende l'analisi del traffico leggermente pi? facile, quindi 
chi ? paranoico dovrebbe disabilitare questa opzione.
 Node.port=Numero della porta FNP (UDP)
 Node.portLong=Porta UDP per le comunicazioni da nodo a nodo (Freenet Node 
Protocol)
 Node.storeDirectory=Directory magazzino dati (store)
 Node.storeDirectoryLong=Directory contenente gli store file
-Node.storeMaxMemTooHigh=Dare a BDB pi? dell' 80% della memoria RAM disponibile 
non e' una buona idea!
+Node.storeMaxMemTooHigh=Impostare un valore superiore ad 80% della memoria RAM 
da destinare a BDB ? generalmente una pessima idea.
 Node.storeSize=Dimensioni in bytes del magazzino dati (store)
 Node.storeSizeLong=Dimensioni del magazzino (store) in bytes
 Node.storeType=Tipo di magazzino dati (store). NON TOCCARE!!
-Node.storeTypeLong=Tipo di datastore. Attualmente pu? essere un indice bdb 
(usa un BerkeleyDBFreenetStore per l'indice, e mette i dati in dei file su 
disco), o ram (indice e dati in RAM). Uso di ram riservato a persone 
competenti, e solo se c'e' abbastanza memoria per metterci tutti i dati (NOTA: 
in questo caso i dati NON verranno salvati all'arresto del nodo)
+Node.storeTypeLong=Tipo di datastore. Attualmente pu? essere un indice bdb 
(usa un BerkeleyDBFreenetStore per l'indice, e mette i dati in dei file su 
disco), o ram (indice e dati in RAM). L'uso di ram ? riservato a persone 
competenti, e solo se c'e' memoria sufficiente a disposizione per tutti i dati 
(NOTA: in questo caso i dati NON verranno salvati all'arresto del nodo)
 Node.swapRInterval=Intervallo tra le richieste di scambio (swap) in 
millisecondi
 Node.swapRIntervalLong=Intervallo tra richieste di scambio (swap) in 
millisecondi. Non toccare!
-Node.throttleLocalTraffic=Throttle traffico locale?
-Node.throttleLocalTrafficLong=Abilita throttle traffico locale? Abilitando 
questa opzione anche LAN e traffico localhost saranno soggetti alla limitazione 
di banda.
+Node.throttleLocalTraffic=Limitazione di banda su traffico locale
+Node.throttleLocalTrafficLong=Abilita limitazione di banda su traffico locale? 
Abilitando questa opzione,  la limitazione di banda avr? effetto anche sulla 
rete locale (LAN) e su localhost.
 Node.tooSmallMTU=MTU insufficiente
 Node.tooSmallMTULong=L' MTU della connessione sembra essere ${mtu} bytes. 
Freenet non pu? funzionare bene con un MTU minore di ${minMTU} bytes: le 
connessioni saranno inaffidabili e forse rallentate. Se possibile, si dovrebbe 
provvedere a risolvere il problema.
 Node.tooSmallMTUShort=Problema di connessione: MTU di connessione troppo basso 
per consentire a Freenet di funzionare correttamente. Potranno verificarsi dei 
problemi.
@@ -750,17 +746,17 @@
 NodeClientCore.persistentTempDir=Directory dei file temporanei persistenti
 NodeClientCore.persistentTempDirLong=Nome della directory dei file temporanei 
persistenti
 NodeClientCore.startingUp=Si prega di concedere a Freenet alcuni minuti per 
completare il processo di avviamento. Nel frattempo alcune funzioni non saranno 
disponibili e il nodo potr? risultare pi? lento del normale.
-NodeClientCore.startingUpShort=Freenet si sta avviando, qualcosa potrebbe 
ancora non funzionare e il nodo potrebbe essere lento.
+NodeClientCore.startingUpShort=L'avviamento di Freenet ? ancora in corso: 
alcune funzioni potrebbero non essere ancora disponibili e il nodo potrebbe 
operare ad una velocit? inferiore al normale.
 NodeClientCore.startingUpTitle=Avviamento di Freenet in corso
 NodeClientCore.tempDir=Directory file temporanei
 NodeClientCore.tempDirLong=Nome della directory dei file temporanei
 NodeClientCore.uploadAllowedDirs=Directory dalle quali l'upload e' consentito
 NodeClientCore.uploadAllowedDirsLong=Si pu? usare una lista di directory dove 
l'upload e' consentito, separate da 'punto e virgola' (;). Vuoto (nessuna 
directory specificata) significa che l'upload non e' permesso, "all" significa 
upload permesso da tutte le directory AVVERTENZA; Se impostato su "all" 
("tutte"), ogni utente potr? inserire qualunque file da qualsiasi directory.
-NodeIPDectector.inclLocalAddress=Includi indirizzi locali nella referenza del 
nodo
-NodeIPDectector.inclLocalAddressLong=Specifica se includere l'indirizzo locale 
(LAN e localhost) nella referenza del nodo. Questo non ? utile a meno che 
entrambi i lati abbiano impostato allowLocalAddresses=true per le rispettive 
referenze (per impostare questa opzione, abilitare la modalit? avanzata e usare 
la pagina Amici).
-NodeIPDectector.ipOverride=Imposta manualmente indirizzo IP
+NodeIPDectector.inclLocalAddress=Noderef include indirizzi locali
+NodeIPDectector.inclLocalAddressLong=Specifica se includere l'indirizzo locale 
(LAN e localhost) nella referenza del nodo. Ci? non ? necessario a meno che 
entrambi i nodi che si vogliono collegare abbiano impostato 
allowLocalAddresses=true per le rispettive referenze (per impostare questa 
opzione, abilitare la modalit? avanzata e usare le opzioni disponibili alla 
pagina Amici).
+NodeIPDectector.ipOverride=Impostazione manuale indirizzo IP
 NodeIPDectector.ipOverrideLong=Impostazione manuale dell'indirizzo IP (di 
solito non ? necessario) - Utilizzare questa opzione se si ha un indirizzo IP 
statico o un domain name  (es. dyndns), e ci si trova dietro un firewall.
-NodeIPDectector.tempAddressHint=Suggerimento temporaneo dell'indirizzo IP
+NodeIPDectector.tempAddressHint=Suggerimento temporaneo indirizzo IP
 NodeIPDectector.tempAddressHintLong=Suggerisce temporaneamente l'indirizzo IP; 
viene eliminato dopo l'uso
 NodeIPDetector.maybeSymmetric=Sembra che il nodo sia dietro una NAT 
simmetrica. Potrebbe trattarsi di problemi di connessione: se ci si trova 
dietro una NAT simmetrica ci si potr? probabilmente connettere soltanto con i 
nodi che sono raggiungibili da interenet.
 NodeIPDetector.maybeSymmetricShort=Problema di connessione: il nodo potrebbe 
trovarsi dietro una NAT simmetrica.
@@ -771,17 +767,17 @@
 NodeStat.freeHeapBytesThreshold=Soglia free heap bytes
 NodeStat.freeHeapBytesThresholdLong=Il nodo respinge richieste per mantenere 
la quota di free heap bytes impostata
 NodeStat.freeHeapPercentThreshold=Soglia percentuale free heap
-NodeStat.freeHeapPercentThresholdLong=Respingendo nuove richieste, il nodo 
mantiene al di sopra della soglia la  percentuale di max heap bytes ammessa
-NodeStat.ignoreLocalVsRemoteBandwidthLiability=Gestire richieste locali allo 
stesso modo di quelle remote, per limitazioni della disponibilit? di banda?
-NodeStat.ignoreLocalVsRemoteBandwidthLiabilityLong=Abilitare questa opzione 
per ridurre notevolmente la banda utilizzata ed aumentare leggermente la 
sicurezza contro i tentativi di attacchi di timing. Nella gran parte dei casi, 
non devi preoccuparti di essi, in quanto sono pi? probabili i "correlation 
attacks" (attacchi di correlazione).
-NodeStat.memCheck=Abilita la Verifica di Memoria
+NodeStat.freeHeapPercentThresholdLong=Respingendo nuove richieste, il nodo 
mantiene la  percentuale di di free heap (in rapporto a max heap bytes ammessi) 
 al di sopra della soglia
+NodeStat.ignoreLocalVsRemoteBandwidthLiability=Gestisi richieste locali allo 
come quelle remote per limitazioni della disponibilit? di banda
+NodeStat.ignoreLocalVsRemoteBandwidthLiabilityLong=Abilitando questa opzione 
si riduce notevolmente la banda utilizzata e si aumenta leggermente la 
sicurezza nei confronti di attacchi di timing. Generalmente non c'? di che 
preoccuparsi per questo tipo di attacchi in quanto gli attacchi di correlazione 
sono pi? facili da eseguire.
+NodeStat.memCheck=Abilita Verifica di Memoria
 NodeStat.memCheckLong=Abilita verifica della memoria (scrive un messaggio nel 
log file. La verifica della memoria deve essere abilitata perche' 
aggressiveGCModificator abbia effetto)
 NodeStat.statsPersister=File contenente le statistiche del nodo
 NodeStat.statsPersisterLong=File contenente statistiche: NON si tratta delle 
statistiche del client. Queste statistiche servono al nodo per decidere se 
accettare o rifiutare nuove richieste. Non eliminare!
 NodeStat.threadLimit=Limite thread
 NodeStat.threadLimitLong=Il nodo respinge richieste per limitare l'uso di 
thread al valore specificato.
 NodeStats.mustBePercentValueNotFull=Questo valore deve essere espresso in 
precentuale, compresa tra 0 e 99.
-NodeStats.valueTooLow=Questo valore ? troppo basso per quella impostazione: ? 
necessario aumentarlo.
+NodeStats.valueTooLow=Valore troppo basso per questa impostazione: ? 
necessario aumentarlo.
 NodeUpdateManager.enabled=Verifica disponibilit? e scarica nuove versioni
 NodeUpdateManager.enabledLong=Verifica e scarica automaticamente nuove 
versioni di Freenet. Se impostatos su 'vero', le nuove versioni verranno 
scaricate ma non necessariamente installate. L'impostazione torna sempre su 
'falso' se il nodo non gira all'interno del wrapper.
 NodeUpdateManager.extURI=Dove cercare versioni aggiornate di freenet-ext.jar?
@@ -800,11 +796,11 @@
 NodeUpdateManager.updateFailedTitle=Aggiornamento Fallito!
 NodeUpdateManager.updateURI=Dove cercare aggiornamenti?
 NodeUpdateManager.updateURILong=Dove cercare aggiornamenti?
-NotEnoughNiceLevelsUserAlert.content=Il nodo ha rilevato di stare operando ad 
un alto livello di nice. In mancanza di un numero sufficiente di livelli di 
nice, il nodo non potr? operare a pieno regime. Si prega di ridurre il livello 
di nice. (cercare PRIORITY nel file run.sh e ridurne il valore). Attualmente il 
nodo ha ${available} livelli a disposizione mentre avrebbe bisogno di 
${required} livelli.
-NotEnoughNiceLevelsUserAlert.short=Non ci sono abbastanza "Nice levels" 
disponibili. si prega assegnare a Freenet per  un "Nice Level" inferiore.
-NotEnoughNiceLevelsUserAlert.title=Numero di livelli Nice insufficiente!
-OpennetConnectionsToadlet.fullTitle=${counts} Sconosciuti (Peers non 
affidabili) di ${name}
-OpennetConnectionsToadlet.peersListTitle=I Miei Peer Opennet (nodi non 
affidabili aggiunti dal nodo)
+NotEnoughNiceLevelsUserAlert.content=Il nodo ha rilevato di stare operando ad 
un Nice level alto. In mancanza di un numero sufficiente di livelli di nice, il 
nodo non potr? operare a pieno regime. Si prega di ridurre il livello di nice. 
(cercare PRIORITY nel file run.sh e ridurne il valore). Attualmente il nodo ha 
${available} livelli a disposizione mentre avrebbe bisogno di ${required} 
livelli.
+NotEnoughNiceLevelsUserAlert.short=Non ci sono abbastanza Nice level 
disponibili. si prega di assegnare a Freenet un Nice level inferiore.
+NotEnoughNiceLevelsUserAlert.title=Numero di Nice level insufficiente!
+OpennetConnectionsToadlet.fullTitle=${counts} Sconosciuti (Peer non fid?ti) 
del nodo: ${name}
+OpennetConnectionsToadlet.peersListTitle=Peer Opennet (peer non fid?ti 
aggiunti automaticamente dal nodo)
 OpennetConnectionsToadlet.successTime=L'ultima volta che si ? riusciti a 
richiamare una CHK dal nodo.
 OpennetConnectionsToadlet.successTimeTitle=Ultimo successo
 OpennetUserAlert.warning=Il nodo sta funzionando in modo "promiscuo". Ci? 
significa che il nodo si connetter? con nodi operati da sconosiuti, e quindi 
chiunque potr? facilmente determinare che l'utente Tal dei Tali sta usando 
Freenet. Molti attacchi vengono facilitati da questa modalit?, bloccare il nodo 
(per esempio con un firewall nazionale) diventa molto pi? facile, ed intoltre 
l'utente non ha controllo su chi si connette al suo nodo. Si raccomanda 
vivamente di procurarsi qualche connessione ad Amici (nodi operati da persone 
conosciute); il modo promiscuo va considerato una misura temporanea da 
utilizzarsi temporaneamente, in attesa di connessioni ad amici. Connettendosi 
esclusivamente a nodi gestiti da persone conosciute, pur non essendo impossibli 
degli attacchi da parte loro, risulter? comunque meno probabile l'esposizione 
ad agenzie governative (tipo servizi segreti o che so io) o altri "cattivi". 
Nota che aggiungere un peer alla sezione Amici non cambia molto la situazione, 
a meno che tale nodo non sia gestito da qualcuno di consciuto e di cui ci si 
fida (per ragioni sia di routing [instradamento] che di sicurezza)!
@@ -851,7 +847,7 @@
 PluginManager.loadedOnStartup=Plugin da caricare all'avvio
 PluginManager.loadedOnStartupLong=Classpath, nome e locazione dei plugin da 
caricare all'avvio
 PluginManager.loadedPlugins=Plugin da caricare all'avvio
-PluginManager.loadedPluginsLong=Lista dei plugin da avviare all'avvio del nodo
+PluginManager.loadedPluginsLong=Lista dei plugin da caricare all'avvio del nodo
 PluginManager.pluginLoadingFailed=Non ? stato possibile caricare il plugin 
specificato ${name}.
 PluginManager.pluginLoadingFailedShort=Impossibile caricare il plugin ${name}!
 PluginManager.pluginLoadingFailedTitle=Non ? stato possibile caricare il 
plugin!
@@ -864,11 +860,11 @@
 PluginToadlet.failedToLoadPluginTitle=Caricamento plugin fallito
 PluginToadlet.internalNameTitle=Nome Interno
 PluginToadlet.loadPluginCommand=Carica Plugin
-PluginToadlet.noWebInterface=Il plugin non ha interfaccia web quindi non c'? 
nulla da mostrare
-PluginToadlet.noWebInterfaceTitle=Il plugin non ? provvisto di interfaccia web
+PluginToadlet.noWebInterface=Questo plugin non ha interfaccia web e pertanto 
non c'? nulla da mostrare
+PluginToadlet.noWebInterfaceTitle=Plugin non provvisto di interfaccia web
 PluginToadlet.pluginList=Lista plugin
-PluginToadlet.pluginListTitle=Lista dei Plugin
-PluginToadlet.pluginNameTitle=Nome del Plugin
+PluginToadlet.pluginListTitle=Lista Plugin
+PluginToadlet.pluginNameTitle=Nome Plugin
 PluginToadlet.pluginNotFound=Non ? stato possibile trovare il plugin richiesto
 PluginToadlet.pluginNotFoundTitle=Plugin non trovato
 PluginToadlet.returnToPluginsWithLinks=${link}return${/link} alla lista di 
plugins.
@@ -927,7 +923,7 @@
 QueueToadlet.DinProgress=Download in corso
 QueueToadlet.UinProgress=Upload in corso
 QueueToadlet.change=Modifica
-QueueToadlet.completedDU=Upload directory completati
+QueueToadlet.completedDU=Upload di directory completati
 QueueToadlet.completedDinDownloadDirectory=Download completati (directory dei 
download) (${size})
 QueueToadlet.completedDinTempDirectory=Download Completati (directory 
temporanea) (${size})
 QueueToadlet.completedDtoDisk=Download completati
@@ -955,10 +951,10 @@
 QueueToadlet.errorNoKey=Non ? stata specificata alcuna chiave per il download
 QueueToadlet.errorNoKeyToD=Non ? stata specificata una chiave per il download
 QueueToadlet.failedD=Download falliti
-QueueToadlet.failedDU=Upload directory falliti
+QueueToadlet.failedDU=Upload di directory falliti
 QueueToadlet.failedToRemove=Non ? stato possibile rimuovere ${id}: ${message}
-QueueToadlet.failedToRemoveId=Non ? stato possibile rimuovere: ${id}
-QueueToadlet.failedToRemoveRequest=Non ? stato possibile rimuovere la richiesta
+QueueToadlet.failedToRemoveId=Non ? stato possibile eliminare: ${id}
+QueueToadlet.failedToRemoveRequest=Non ? stato possibile eliminare la richiesta
 QueueToadlet.failedToRestart=Non ? stato possibile riavviare: ${id}
 QueueToadlet.failedToRestartRequest=Non e' stato possibile riavviare la 
richiesta
 QueueToadlet.failedU=Upload falliti
@@ -975,7 +971,7 @@
 QueueToadlet.insertFileCompressLabel=Comprimi
 QueueToadlet.insertFileInsertFileLabel=Inserisci File
 QueueToadlet.insertFileLabel=File
-QueueToadlet.insertFileResetForm=Modulo Reset
+QueueToadlet.insertFileResetForm=Annulla
 QueueToadlet.key=Chiave
 QueueToadlet.legend=Legenda
 QueueToadlet.low=bassa
@@ -986,7 +982,7 @@
 QueueToadlet.notLoadedYet=Il nodo sta ancora caricando la lista delle 
richieste persistenti. Si prega di pazientare.
 QueueToadlet.notLoadedYetTitle=La Coda non ? stata ancora caricata.
 QueueToadlet.panicButton=Bottone Emergenza
-QueueToadlet.panicButtonConfirmation=Elimina tutto senza chiedere conferma!
+QueueToadlet.panicButtonConfirmation=Elimina tutte le richieste senza chiedere 
conferma
 QueueToadlet.persistence=Persistenza
 QueueToadlet.persistenceForever=illimitata
 QueueToadlet.persistenceNone=nessuna
@@ -1007,16 +1003,16 @@
 QueueToadlet.remove=Elimina
 QueueToadlet.requestNavigation=Esplora Richieste
 QueueToadlet.restart=Riavvia
-QueueToadlet.siteUploadSucceeded=I file ${filename} (${files} del tuo 
freesite, ${size} total size) sono stati correttamente caricati su Freenet. 
${link}Click qui${/link} per aprire l'homepage del freesite.
-QueueToadlet.siteUploadSucceededTitle=Inserimento del Freesite avvenuto: 
${filename}
+QueueToadlet.siteUploadSucceeded=E' stato completato l'upload del freesite 
${filename} (${files} files, dimensioni totali ${size}). ${link}Clicca 
qui${/link} per aprire la homepage del sito.
+QueueToadlet.siteUploadSucceededTitle=Inserimento freesite completato: 
${filename}
 QueueToadlet.size=Dimensioni
 QueueToadlet.starting=AVVIAMENTO IN CORSO
-QueueToadlet.title=Coda globale di ${nodeName}
+QueueToadlet.title=Coda globale del nodo: ${nodeName}
 QueueToadlet.totalSize=Dimensioni Totali
 QueueToadlet.unknown=Non Disp.
-QueueToadlet.uploadProgressbarNotAccurate=Il valore di questo indicatore 
progresso pu? essere falsato quando l'upload codifica ulteriori blocchi.
+QueueToadlet.uploadProgressbarNotAccurate=Il valore di questo indicatore di 
progresso pu? essere falsato quando l'upload codifica ulteriori blocchi.
 QueueToadlet.uploadSucceeded=Il file ${filename} (size ${size}) ? stato 
correttamente caricato su Freenet. ${link}Click qui${/link} per aprire il file.
-QueueToadlet.uploadSucceededTitle=upload avvenuto: ${filename}
+QueueToadlet.uploadSucceededTitle=Inserzione completata: ${filename}
 QueueToadlet.veryhigh=molto alta
 QueueToadlet.verylow=bassissima
 QueueToadlet.warningUnsafeContent=Contenuto Potenzialmente Pericoloso
@@ -1088,15 +1084,15 @@
 StatisticsToadlet.announceBytes=Output annuncio: ${total}
 StatisticsToadlet.authBytes=Configura connessione: ${total} output
 StatisticsToadlet.bandwidthTitle=Ampiezza di banda
-StatisticsToadlet.cpus=CPU disponibili: ${count}
+StatisticsToadlet.cpus=Numero CPU: ${count}
 StatisticsToadlet.debuggingBytes=Debugging bytes: ${netColoring} colorazione 
rete, ${ping} ping, ${probe} richieste probe, ${routed} messaggi di testo 
instradati.
-StatisticsToadlet.fullTitle=Statistiche per ${name}
-StatisticsToadlet.getLogs=Ultimo logfile del nodo
+StatisticsToadlet.fullTitle=Statistiche del nodo: ${name}
+StatisticsToadlet.getLogs=Scarica l'ultimo logfile del nodo
 StatisticsToadlet.inputRate=Input: ${rate}/second (of ${max}/second)
 StatisticsToadlet.insertOutput=Output inserzione (carico utile escluso): CHK 
${chk} SSK ${ssk}.
 StatisticsToadlet.javaVersion=Versione Java: ${version}
 StatisticsToadlet.jeDumpButton=Genera JE Dump
-StatisticsToadlet.jvmInfoTitle=Info JVM
+StatisticsToadlet.jvmInfoTitle=JVM
 StatisticsToadlet.jvmVendor=JVM fornita da: ${vendor}
 StatisticsToadlet.jvmVersion=Versione JVM: ${version}
 StatisticsToadlet.maxMemory=Max Memoria Java: ${memory}
@@ -1113,13 +1109,13 @@
 StatisticsToadlet.priority=Priorit?
 StatisticsToadlet.requestOutput=Output richiesta (escluso carico utile): CHK 
${chk} SSK ${ssk}.
 StatisticsToadlet.resendBytes=Bytes rispediti: ${total}
-StatisticsToadlet.routingDisabled=Indirizzamento traffico sospeso (il nodo ? 
attualmente connesso ma una delle due parti non accetta l'indirizzamento di 
traffico)
+StatisticsToadlet.routingDisabled=Indirizzamento traffico sospeso (il nodo ? 
attualmente connesso ma una delle due parti non accetta indirizzamento di 
traffico)
 StatisticsToadlet.routingDisabledShort=Indirizzamento Traffico Sospeso
 StatisticsToadlet.running=In funzione
 StatisticsToadlet.statisticGatheringTitle=Raccolta Statistiche
 StatisticsToadlet.swapOutput=Output Scambio: ${total}.
 StatisticsToadlet.threadDumpButton=Genera Thread Dump
-StatisticsToadlet.threads=Threads in esecuzione: ${running}/${max}
+StatisticsToadlet.threads=Threads correnti: ${running}/${max}
 StatisticsToadlet.threadsByPriority=Thread in ordine di prorit?
 StatisticsToadlet.totalInput=Input Totale: ${total} (${rate}/second)
 StatisticsToadlet.totalOutput=Output Totale: ${total} (${rate}/second)
@@ -1128,7 +1124,7 @@
 StatisticsToadlet.unaccountedBytes=Altro output: ${total} (${percent}%)
 StatisticsToadlet.uomBytes=Output Aggiornamento: ${total}
 StatisticsToadlet.usedMemory=Memoria Java in uso: ${memory}
-StatisticsToadlet.versionTitle=Info Versione Nodo
+StatisticsToadlet.versionTitle=Versione Nodo
 StatisticsToadlet.waiting=In attesa
 SymlinkerToadlet.symlinks=Link simbolici in ToadletServer
 SymlinkerToadlet.symlinksLong=Lista di "alias#target" che va a formare un 
gruppo di link simbolici
@@ -1148,7 +1144,7 @@
 TextModeClientInterfaceServer.ssl=Abilitare ssl?
 TextModeClientInterfaceServer.sslLong=Abilitare ssl?
 TextModeClientInterfaceServer.telnetPortNumber=Porta telnet
-TextModeClientInterfaceServer.telnetPortNumberLong=Numero della porta telnet
+TextModeClientInterfaceServer.telnetPortNumberLong=Porta TCP utlizzata dal 
server TMCI
 TimeSkewDetectedUserAlert.shortText=Il nodo ha rilevato una discrepanza 
temporale. Freenet potrebbe bloccarsi in strani modi!
 TimeSkewDetectedUserAlert.text=Una discrepanza temporale ? stata rilevata dal 
nodo. Questo ? un inconveniente grave; il nodo non potr? funzionare 
correttamente finch? non vi si sar? ovviato. Tra le cause pi? comuni, la 
modalit? powersafe mal configurata, cattiva sincronizzazione tra i client in 
rete, problemi di hardware.
 TimeSkewDetectedUserAlert.title=Discrepanza temporale rilevata!
@@ -1178,20 +1174,20 @@
 ToadletContextImpl.noSuchToadlet=Nessuna Toadlet con quel nome
 ToadletContextImpl.parseErrorWithError=Errore nell' interpretazione ${error}
 ToadletContextImpl.uriParseErrorTitle=Errore Nell' Interpretazione della URI
-TranslationToadlet.bracketRemoveOverride=(Elimina questa chiave di traduzione)
-TranslationToadlet.bracketTranslateIt=(traducilo nella tua lingua)
-TranslationToadlet.bracketUpdateTranslation=(aggiorna la traduzione)
-TranslationToadlet.confirmRemoveOverride=Conferma: eliminare la chiave di 
traduzione : (${key} - ${value}) ?
-TranslationToadlet.contributingToLabelWithLang=Stai attualmente contribuendo 
alla traduzione ${lang}:
-TranslationToadlet.currentTranslationLabel=Traduzione attuale
-TranslationToadlet.downloadTranslationsFile=Scarica il file di traduzione
-TranslationToadlet.hideAlreadyTranslated=Nascondi le stringhe gi? tradotte
+TranslationToadlet.bracketRemoveOverride=(Elimina chiave di traduzione)
+TranslationToadlet.bracketTranslateIt=(traduci nella tua lingua)
+TranslationToadlet.bracketUpdateTranslation=(aggiorna traduzione)
+TranslationToadlet.confirmRemoveOverride=Conferma: elimina chiave di 
traduzione : (${key} - ${value}) ?
+TranslationToadlet.contributingToLabelWithLang=Stai contribuendo alla 
traduzione: ${lang}:
+TranslationToadlet.currentTranslationLabel=Traduzione corrente
+TranslationToadlet.downloadTranslationsFile=Scarica file della traduzione 
eseguita
+TranslationToadlet.hideAlreadyTranslated=Nascondi stringhe tradotte
 TranslationToadlet.noCustomTranslations=Nessuna traduzione personalizzata 
disponibile.
 TranslationToadlet.originalVersionLabel=Originale (versione inglese)
 TranslationToadlet.reEdit=Ri-modifica la traduzione
-TranslationToadlet.remove=Rimuovi
+TranslationToadlet.remove=Elimina
 TranslationToadlet.removeOverrideTitle=Elimina una chiave di traduzione
-TranslationToadlet.removeOverrideWarningTitle=Si sta per eliminare una chiave 
di traduzione!
+TranslationToadlet.removeOverrideWarningTitle=Attenzione: la chiave di 
traduzione verr? eliminata!
 TranslationToadlet.returnToTranslations=Torna alla pagina della traduzione
 TranslationToadlet.showEverything=Mostra tutto, incluse stringhe gi? tradotte
 TranslationToadlet.translationKeyLabel=Chiave di traduzione
@@ -1226,20 +1222,20 @@
 UpdatedVersionAvailableUserAlert.updateNowButton=Aggiorna Adesso!
 UserAlert.apply=Conferma
 UserAlert.hide=Nascondi
-UserAlert.reset=Reset
+UserAlert.reset=Cancella
 UserAlertManager.alertsOnAlertsPage=| Controllali nella ${link}pagina delle 
avvertenze${/link}.
 UserAlertManager.alertsOnHomepage=| Sono visibili alla ${link}Homepage di 
Freenet${/link}.
 UserAlertManager.alertsTitle=Notificazioni particolari
 UserAlertManager.clickForMore=Click su un oggetto per maggiori informazioni o 
per sbarazzarsene.
 UserAlertManager.criticalErrorCountLabel=Errori Critici:
-UserAlertManager.dumpEventsButton=Rimuovi notifiche superflue
+UserAlertManager.dumpEventsButton=Elimina notifiche di routine
 UserAlertManager.errorCountLabel=Errori:
 UserAlertManager.minorCountLabel=Minori:
 UserAlertManager.totalLabel=Totale:
 UserAlertManager.warningCountLabel=Avvertenze:
 UserAlertsToadlet.titleWithName=Avvertenze per ${name}
 WelcomeToadlet.activityTitle=Attivit? in corso
-WelcomeToadlet.alertsSummary=Stato delle avvertenze
+WelcomeToadlet.alertsSummary=Sommario avvertenze
 WelcomeToadlet.arkFetchCount=ARK Fetchers: ${total}
 WelcomeToadlet.confirmAddBookmarkSubTitle=Conferma Aggiunta Sgnalibro
 WelcomeToadlet.confirmAddBookmarkTitle=Aggiungi ai Segnalibri
@@ -1261,7 +1257,7 @@
 WelcomeToadlet.fromHeader=Da
 WelcomeToadlet.goToExternalLink=Vai al link specificato
 WelcomeToadlet.homepageFullTitleWithName=Homepage FProxy di ${name}
-WelcomeToadlet.ieWarning=E' stato rilevato l'uso di Microsoft Internet 
Explorer; ci? potrebbe costituire un pericolo per l'anonimato in quanto esso 
potrebbe risultare compromesso da alcuni siti interni a Freenet.
+WelcomeToadlet.ieWarning=E' stato rilevato l'uso di Microsoft Internet 
Explorer. Ci? potrebbe costituire un pericolo perch? alcuni siti interni a 
Freenet potrebbero compromettere l'anonimato dell'utente.
 WelcomeToadlet.ieWarningTitle=Rischio Sicurezza!
 WelcomeToadlet.insertCount=Inserzioni: ${total}
 WelcomeToadlet.insertFailedTitle=Inserzione fallita
@@ -1280,7 +1276,7 @@
 WelcomeToadlet.restart=Riavvia
 WelcomeToadlet.restartConfirm=Conferma: Riavvia nodo Freenet?
 WelcomeToadlet.restartConfirmTitle=Riavvia Nodo
-WelcomeToadlet.restartNode=Riavvia il nodo
+WelcomeToadlet.restartNode=Riavvia nodo
 WelcomeToadlet.restarting=Si prega di attendere durante il riavvio del nodo. 
Questa schermata  si aggiorner? automaticamente, fino a mostrare la pagina 
iniziale fi Freenet. Grazie di aver scelto Freenet.
 WelcomeToadlet.restartingTitle=Riavvio del nodo Freenet in corso.
 WelcomeToadlet.shutdown=Arresta
@@ -1294,7 +1290,7 @@
 WelcomeToadlet.targetBoardHeader=Target Board
 WelcomeToadlet.testnetWarning=gira in modalit? testnet. DISTRUGGE l'anonimato!
 WelcomeToadlet.testnetWarningTitle=Modalit? Testnet
-WelcomeToadlet.thanks=Grazie per aver scelto Freenet.
+WelcomeToadlet.thanks=Grazie di aver scelto Freenet.
 WelcomeToadlet.threadDumpNotUsingWrapper=Non ? possibile generare un thread 
dump se il nodo non sta girando nel wrapper
 WelcomeToadlet.threadDumpSubTitle=Generazione di Thread Dump
 WelcomeToadlet.threadDumpTitle=Genera Thread Dump
@@ -1308,7 +1304,7 @@
 WelcomeToadlet.version=Freenet ${fullVersion} Build ${build} r${rev}
 WelcomeToadlet.versionHeader=Informazioni sulla Versione e Controllo del Nodo
 WelcomeToadlet.writtenDatabaseStats=Le statistiche di runtime del database 
sono state scritte nel file di log del wrapper
-WrapperConfig.wrapper.java.maxmemory.long=Memoria massima utilizzabile da 
Freenet. La memoria di cui Freenet a bisogno varia in funzione delle 
diomensioni del datastore. I cambiamenti saranno effettivi dopo il riavvio del 
nodo.
+WrapperConfig.wrapper.java.maxmemory.long=Limita la quantit? massima di 
memoria utilizzabile da Freenet. Freenet ha bisogno di molta pi? memoria se si 
hanno molti e/o grossi file in coda di dowload/upload,  ed in misura minore se 
il nodo ? dotato di un datastore di dimensioni abbondanti.  I cambiamenti 
saranno effettivi dopo il riavvio del nodo.
 WrapperConfig.wrapper.java.maxmemory.short=Memoria massima (in megabytes)
 testing.test=test${test1}test${test2}test
 ?BookmarkEditorToadlet.pasteOrCancel=Click su un'icona incolla o cancella.

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties 
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties 
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -1,5 +1,6 @@
 BookmarkEditorToadlet.addBookmark=????
 BookmarkEditorToadlet.addCategory=????
+BookmarkEditorToadlet.addDefaultBookmarks=??????????.
 BookmarkEditorToadlet.addNewBookmark=??????
 BookmarkEditorToadlet.addNewCategory=?????
 BookmarkEditorToadlet.addedNewBookmark=??????????.
@@ -18,10 +19,13 @@
 BookmarkEditorToadlet.deleteCategoryConfirm=??????${bookmark}????????????????
 BookmarkEditorToadlet.deleteSucceeded=??????????.
 BookmarkEditorToadlet.deleteSucceededTitle=????
+BookmarkEditorToadlet.descLabel=????:
 BookmarkEditorToadlet.edit=??
 BookmarkEditorToadlet.editBookmarkTitle=????
 BookmarkEditorToadlet.editCategoryTitle=????
 BookmarkEditorToadlet.error=??
+BookmarkEditorToadlet.hasAnActivelinkLabel=? freesite ?????????
+BookmarkEditorToadlet.invalidKey=???Freenet??.
 BookmarkEditorToadlet.invalidKeyTitle=????
 BookmarkEditorToadlet.invalidKeyWithReason=???Freenet??.
 BookmarkEditorToadlet.keyLabel=??:
@@ -34,22 +38,41 @@
 BookmarkEditorToadlet.pasteTitle=??/??
 BookmarkEditorToadlet.save=??
 BookmarkEditorToadlet.title=?????
+BookmarkEditorToadlet.urlDecodeError=URL????
 BookmarkManager.list=????
 BooleanOption.parseError=????????: ${val} - ??? true ? false
 BuildOldAgeUserAlert.tooOld=?????????????????????????????????(Build 
#${lastgood}). ?????????, ??????????"??"???????. (????????, Freenet 
??????????????)
 BuildOldAgeUserAlert.tooOldShort=??????? Freenet ??????, ???????????????! 
?????!
 BuildOldAgeUserAlert.tooOldTitle=?????
+ClockProblemDetectedUserAlert.shortText=???????????, Freenet ??????.
+ClockProblemDetectedUserAlert.text=Freenet ??????????(?????)????. 
??????????????, Freenet ??????.
+ClockProblemDetectedUserAlert.title=???????.
+ConfigToadlet.appliedSuccess=??????????.
 ConfigToadlet.appliedTitle=???????
 ConfigToadlet.apply=??
+ConfigToadlet.configNavTitle=????
+ConfigToadlet.contributeTranslation=????????
 ConfigToadlet.fullTitle=${name} ? Freenet ????
+ConfigToadlet.possibilitiesTitle=??
 ConfigToadlet.reset=??
+ConfigToadlet.returnToNodeConfig=??????
 ConfigToadlet.shortTitle=??
+ConfigToadlet.title=Freenet ????
+ConfigToadlet.wrapper=??
 ConfigurablePersister.doesNotExistCannotCreate=?????????????.
 ConfigurablePersister.existsCannotReadWrite=??????????????
 ConnectionsToadlet.nodeStatus.BACKED OFF=???
+ConnectionsToadlet.nodeStatus.BURSTING=???
+ConnectionsToadlet.nodeStatus.BUSY=???
+ConnectionsToadlet.nodeStatus.CLOCK PROBLEM=????
 ConnectionsToadlet.nodeStatus.CONNECTED=???
 ConnectionsToadlet.nodeStatus.CONNECTION ERROR=????
+ConnectionsToadlet.nodeStatus.DISABLED=???
 ConnectionsToadlet.nodeStatus.DISCONNECTED=???
+ConnectionsToadlet.nodeStatus.DISCONNECTING=???
+ConnectionsToadlet.nodeStatus.LISTEN ONLY=???
+ConnectionsToadlet.nodeStatus.LISTENING=???
+ConnectionsToadlet.nodeStatus.NEVER CONNECTED=????
 ConnectionsToadlet.nodeStatus.TOO NEW=??
 ConnectionsToadlet.nodeStatus.TOO OLD=??
 ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=????
@@ -65,18 +88,21 @@
 DarknetConnectionsToadlet.addPeerTitle=??????
 DarknetConnectionsToadlet.backedOff=???????:????????????,???????????.
 DarknetConnectionsToadlet.backedOffShort=???
+DarknetConnectionsToadlet.burstingShort=???
 DarknetConnectionsToadlet.busy=??:????????,??????????????????,??????????????.
 DarknetConnectionsToadlet.busyShort=??
 DarknetConnectionsToadlet.cancel=??
 DarknetConnectionsToadlet.cantFetchNoderefURL=??? ${url} ??????.?????.
 DarknetConnectionsToadlet.cantParseTryAgain=????????????:(${error}).?????.
 
DarknetConnectionsToadlet.cantParseWrongEnding=?????????:???????????End??,???????????:${end}
+DarknetConnectionsToadlet.clockProblemShort=????
 DarknetConnectionsToadlet.confirmRemoveNodeTitle=???
 DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=????
 DarknetConnectionsToadlet.connected=???:??????????
 DarknetConnectionsToadlet.connectedShort=???
 DarknetConnectionsToadlet.disabled=???????:????????????????.
-DarknetConnectionsToadlet.disabledShort=???
+DarknetConnectionsToadlet.disabledShort=???
+DarknetConnectionsToadlet.disconnectingShort=???
 DarknetConnectionsToadlet.enterDescription=?????:
 DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=??????:????
 DarknetConnectionsToadlet.failedToAddNodeTitle=??????
@@ -125,6 +151,9 @@
 DarknetConnectionsToadlet.updateChangedPrivnotes=??????????
 DarknetConnectionsToadlet.urlReference=????????URL:
 DarknetConnectionsToadlet.versionTitle=??
+ExtOldAgeUserAlert.extTooOld=?? freenet-ext.jar ?????????, 
???????????????????: http://downloads.freenetproject.org/alpha/freenet-ext.jar.
+ExtOldAgeUserAlert.extTooOldShort=?? freenet-ext.jar ?????. ?????.
+ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext ??
 FProxyToadlet.alertsTitle=??
 FProxyToadlet.config=??/??????
 FProxyToadlet.configTitle=??
@@ -136,7 +165,7 @@
 FProxyToadlet.homepage=??
 FProxyToadlet.mimeType=MIME ???${mime}
 FProxyToadlet.openForce=?${link}??${/link}????? ${mime} ????????????????
-FProxyToadlet.opennetTitle=??
+FProxyToadlet.opennetTitle=???
 FProxyToadlet.pathNotFoundTitle=???????
 FProxyToadlet.pluginsTitle=??
 FProxyToadlet.queue=????????
@@ -180,6 +209,11 @@
 FirstTimeWizardToadlet.step4Title=Freenet ?????? - ??????
 FirstTimeWizardToadlet.step6Title=Freenet ?????? - ??????
 FirstTimeWizardToadlet.welcomeInfoboxTitle=???? Freenet ???????
+GIFFilter.invalidHeader=????????? GIF ??.
+GIFFilter.invalidHeaderTitle=??????
+GIFFilter.notGif=????????????? GIF ?. ???????????, ?????????????????, 
?????????.
+GIFFilter.tooShort=? GIF ???????????.
+GIFFilter.tooShortTitle=????
 GenericReadFilterCallback.malformedAbsoluteURL=?????? URL ???${error}
 GenericReadFilterCallback.malformedRelativeURL=?????? URL ???${error}
 InsertException.shortError.10=???
@@ -191,9 +225,11 @@
 LocalFileInsertToadlet.fileHeader=??
 LocalFileInsertToadlet.insert=??
 LocalFileInsertToadlet.sizeHeader=??
+LogConfigHandler.minLoggingPriority=??????????
+LogConfigHandler.minLoggingPriorityLong=???????????. ??????????? debug, minor, 
normal ? error.
 LoggerHook.unrecognizedPriority=??????????: ${name}.
 LongOption.parseError=??????????? 64 ??? : ${val}
-MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ??????????? darknet ????????????, ????????)
+MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ???????????"????"????????????, ????????)
 MeaningfulNodeNameUserAlert.noNodeNickShort=????(??)????????
 MeaningfulNodeNameUserAlert.noNodeNickTitle=????(??)????????
 N2NTMToadlet.friends=??
@@ -202,17 +238,37 @@
 N2NTMToadlet.sentTitle=??
 N2NTMToadlet.tooLongTitle=??
 N2NTMUserAlert.delete=??
+N2NTMUserAlert.header=??: ${from} (??? ${composed} | ??? ${sent} | ??>? 
${received})
+N2NTMUserAlert.headerShort=?? ${from} ???
 N2NTMUserAlert.reply=??
 N2NTMUserAlert.title=?${peername}(${peer})?????????${number}
 Node.inBWLimit=?????????????
-Node.inBWLimitLong=????????????????????????????? -1 ??????????
+Node.inBWLimitLong=???????????????; ??????????????; ?? -1 ?????????
 Node.l10nLanguage=????????
 Node.l10nLanguageLong=?????????????????????????????
 Node.nodeName=??????
 Node.nodeNameLong=????????????????
+Node.opennetEnabled=??????????(?????????????)?
+Node.opennetEnabledLong=??????????(???"????")? ??????, 
???????????????????????(?????"???", ???"??"). ????????????????, ?????????. 
?????????? Freenet ???, ???????????????("??"), ?????????.
 Node.outBWLimit=?????????????
+Node.outBWLimitLong=?????????(???????); ????????????????
 Node.storeSize=?????????
 Node.storeSizeLong=?????????
+NodeStats.mustBePercentValueNotFull=???????, ???? 0 ? 99 ??.
+NodeStats.valueTooLow=?????????????, ???????!
+NodeUpdateManager.installNewVersions=????????
+NodeUpdateManager.installNewVersionsLong=??????????????????? Freenet ??, 
???????
+NotEnoughNiceLevelsUserAlert.content=?????????????????????. ????????????????, 
??????????. ?????????????????! (? run.sh ??? PRIORITY ???, ??????) ??????? 
${available} ???????, ?????? ${required} ?.
+NotEnoughNiceLevelsUserAlert.short=???????????! ?????????????? Freenet.
+NotEnoughNiceLevelsUserAlert.title=???????????!
+OpennetConnectionsToadlet.fullTitle=${name} ? ${counts} ????(??????)
+OpennetConnectionsToadlet.peersListTitle=??????????(??????????????????)
+OpennetConnectionsToadlet.successTime=?????????????? CHK ???
+OpennetConnectionsToadlet.successTimeTitle=??????
+OpennetUserAlert.warningShort=????????.
+OpennetUserAlert.warningTitle=??: ????????: ??????????
+PNGFilter.invalidHeader=????????????? PNG ?, ?????????? PNG ??. ???????????, 
?????????????????, ?????????.
+PNGFilter.invalidHeaderTitle=??? PNG - ??????
 PluginToadlet.addPluginTitle=??plugin
 PluginToadlet.failedToLoadPluginTitle=Plugin????
 PluginToadlet.noWebInterfaceTitle=?plugin?????
@@ -222,11 +278,20 @@
 PluginToadlet.pluginNotFoundTitle=????plugin
 PluginToadlet.unsupportedMethod=????method.
 PluginToadlet.visit=??
+PproxyToadlet.Load=??
 PproxyToadlet.cancel=??
 PproxyToadlet.classNameTitle=Class??
 PproxyToadlet.internalIDTitle=????
+PproxyToadlet.loadOfficialPlugin=??????
+PproxyToadlet.loadOfficialPluginLabel=??????
+PproxyToadlet.loadOfficialPluginText=???????? Freenet ???????. 
????????????????, ????????.
+PproxyToadlet.loadOfficialPluginWarning=??: ?????????????????, ??? Freenet ??. 
?????????????, ?????. ?????????????, ??????????.
+PproxyToadlet.loadOtherPlugin=???????
+PproxyToadlet.loadOtherPluginText=?????????????? URL. ???????????????????, 
???????????????????. ???????????????????, ???????.
+PproxyToadlet.loadOtherURLLabel=??? URL
 PproxyToadlet.loadPluginLabel=??Plugin:
 PproxyToadlet.noPlugins=??????plugins
+PproxyToadlet.noVersion=?
 PproxyToadlet.pluginNotFoundReload=??????????plugin.
 PproxyToadlet.pluginNotFoundReloadTitle=?????Plugin(??)
 PproxyToadlet.pluginUnloaded=?plugin????
@@ -234,20 +299,44 @@
 PproxyToadlet.plugins=Plugins
 PproxyToadlet.pluginsWithNodeName=${name}?plugins
 PproxyToadlet.reload=??
+PproxyToadlet.reloadPurgeWarning=?????????????????. ??????????????????, 
??????????!
 PproxyToadlet.returnToPluginPage=??plugin??
 PproxyToadlet.startedAtTitle=????
 PproxyToadlet.unload=??
 PproxyToadlet.unloadPluginTitle=???plugin?
 PproxyToadlet.unloadPluginWithName=??????${name}??
+PproxyToadlet.versionTitle=??
+QueueToadlet.DUinProgress=???????? (${size})
+QueueToadlet.DinProgress=???????? (${size})
+QueueToadlet.UinProgress=???????? (${size})
 QueueToadlet.change=???
+QueueToadlet.completedDU=?????????? (${size})
+QueueToadlet.completedDinDownloadDirectory=???????????????? (${size})
+QueueToadlet.completedDinTempDirectory=???????????????? (${size})
+QueueToadlet.completedDtoDisk=??????????? (${size})
+QueueToadlet.completedDtoTemp=?????????????? (${size})
+QueueToadlet.completedU=???????? (${size})
+QueueToadlet.completedUDirectory=???????? (${size})
 QueueToadlet.delete=??
 QueueToadlet.download=??
-QueueToadlet.fileName=???
+QueueToadlet.downloadSucceeded=?? ${origlink}${filename}${/origlink} ???????. 
?${link}???${/link}????  (${size}).
+QueueToadlet.downloadSucceededTitle=????: ${filename}
+QueueToadlet.errorAccessDenied=????: ????!
+QueueToadlet.failedD=????? (${size})
+QueueToadlet.failedDU=????????? (${size})
+QueueToadlet.failedU=??????? (${size})
+QueueToadlet.fileName=??
 QueueToadlet.identifier=??
 QueueToadlet.insertAs=???:
 QueueToadlet.insertFile=????
+QueueToadlet.insertFileBrowseLabel=?????????
+QueueToadlet.insertFileInsertFileLabel=????
+QueueToadlet.insertFileLabel=??????????(???!)
 QueueToadlet.key=??
 QueueToadlet.legend=??
+QueueToadlet.mimeType=MIME ??
+QueueToadlet.none=?
+QueueToadlet.persistence=??
 QueueToadlet.persistenceForever=??
 QueueToadlet.persistenceNone=?
 QueueToadlet.persistenceRebootr=??
@@ -261,37 +350,51 @@
 QueueToadlet.priority6=????
 QueueToadlet.progress=??
 QueueToadlet.reason=??
+QueueToadlet.remove=??
+QueueToadlet.requestNavigation=????
 QueueToadlet.restart=??
 QueueToadlet.size=??
 QueueToadlet.starting=???
 QueueToadlet.title=${nodeName}?????
 QueueToadlet.totalSize=????
 QueueToadlet.unknown=??
+QueueToadlet.wipD=???: ?? (${size})
+QueueToadlet.wipDU=???: ???? (${size})
+QueueToadlet.wipU=???: ?? (${size})
+RevocationKeyFoundUserAlert.text=??????????????????????. ????????????????????! 
??, ?????????????, ???"???"?????????. ?????????????????????. ???????????????. 
?????: ${message}.
+RevocationKeyFoundUserAlert.title=????????????!
+ShortOption.parseError=????????????????: ${error}
 SimpleToadletServer.cssName=??????
+SimpleToadletServer.cssNameLong=?? Freenet ?????????
+StaticToadlet.pathInvalidChars=??? URI ??????????.
+StaticToadlet.pathNotFound=????????.
+StaticToadlet.pathNotFoundTitle=??????
 StatisticsToadlet.activityInserts=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
 StatisticsToadlet.activityRequests=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
-StatisticsToadlet.allocMemory=Java??????: ${memory}
+StatisticsToadlet.allocMemory=Java ??????: ${memory}
 StatisticsToadlet.bandwidthTitle=??
 StatisticsToadlet.cpus=???CPU??: ${count}
 StatisticsToadlet.getLogs=?????????
 StatisticsToadlet.inputRate=????: ?? ${rate} (???? ${max})
+StatisticsToadlet.javaVersion=Java ??: ${version}
 StatisticsToadlet.jeDumpButton=????JE??
 StatisticsToadlet.jvmInfoTitle=JVM??
 StatisticsToadlet.jvmVendor=JVM ???? ${vendor}
 StatisticsToadlet.jvmVersion=JVM??: ${version}
-StatisticsToadlet.maxMemory=Java?????: ${memory}
+StatisticsToadlet.maxMemory=Java ?????: ${memory}
 StatisticsToadlet.osArch=????????: ${arch}
 StatisticsToadlet.osName=??????: ${name}
 StatisticsToadlet.osVersion=??????: ${version}
 StatisticsToadlet.outputRate=????: ?? ${rate} (???? ${max})
 StatisticsToadlet.payloadOutput=????: ${total} (?? ${rate}) (${percent}%)
 StatisticsToadlet.peerStatsTitle=????
+StatisticsToadlet.statisticGatheringTitle=????
 StatisticsToadlet.threadDumpButton=????????
 StatisticsToadlet.threads=??????: ${running}/${max}
 StatisticsToadlet.totalInput=????: ${total} (?? ${rate})
 StatisticsToadlet.totalOutput=????: ${total} (?? ${rate})
 StatisticsToadlet.transferringRequests=????: ?? ${senders}, ?? ${receivers}
-StatisticsToadlet.usedMemory=Java??????: ${memory}
+StatisticsToadlet.usedMemory=Java ??????: ${memory}
 StatisticsToadlet.versionTitle=??????
 SymlinkerToadlet.symlinks=ToadletServer??????
 TextModeClientInterfaceServer.allowedHosts=??????
@@ -301,7 +404,26 @@
 TextModeClientInterfaceServer.enabled=??????
 TextModeClientInterfaceServer.enabledLong=?????????????
 TextModeClientInterfaceServer.telnetPortNumber=?????
+TimeSkewDetectedUserAlert.shortText=???????????????. Freenet ?????????!
+TimeSkewDetectedUserAlert.text=?????????????????. ?????. ??????????, ????????. 
?????????????????, ??????, ????????.
+TimeSkewDetectedUserAlert.title=???????!
 Toadlet.cancel=??
+Toadlet.clickHere=???
+Toadlet.homepage=??
+Toadlet.internalErrorPleaseReport=????: ???
+Toadlet.internalErrorTitle=????
+Toadlet.no=?
+Toadlet.nodeHomepage=????
+Toadlet.notSupportedTitle=???
+Toadlet.notSupportedWithClass=?????????? Freenet (${class}) ???????.
+Toadlet.ok=?
+Toadlet.permRedirectWithReason=????: ${reason}
+Toadlet.returnToNodeHomepage=??????
+Toadlet.returnToPrevPage=?????
+Toadlet.tempRedirectWithReason=????: ${reason}
+Toadlet.unauthorized=??????????.
+Toadlet.unauthorizedTitle=????
+Toadlet.yes=?
 TranslationToadlet.bracketRemoveOverride=(???????!)
 TranslationToadlet.bracketTranslateIt=(?????????!)
 TranslationToadlet.bracketUpdateTranslation=(??????)
@@ -319,6 +441,8 @@
 TranslationToadlet.translationUpdateTitle=????
 TranslationToadlet.translationUpdatedTitle=??????!
 TranslationToadlet.updateTranslationCommand=??????!
+UnknownContentTypeException.explanation=?? Freenet ??????? MIME ??. ????, 
?????????????????????, ????????. ???, ?????????????????????, ?????????????; 
??????????, ???????????, ???????????(???????????????, ???????????????). 
???????, ??????????????????, ?????? script ???????????????.
+UnknownContentTypeException.title=??????????????: ${type}
 UpdatedVersionAvailableUserAlert.armed=?????????????????Freenet???,??????.
 UpdatedVersionAvailableUserAlert.clickToUpdateNow=????????????????.
 
UpdatedVersionAvailableUserAlert.downloadedNewExtJar=?????????????Freenet????,???${version}.
@@ -332,7 +456,11 @@
 UserAlert.apply=??
 UserAlert.hide=??
 UserAlert.reset=??
+UserAlertManager.alertsOnAlertsPage=| ??${link}????${/link}??????.
+UserAlertManager.alertsTitle=?????
+UserAlertManager.clickForMore=?????????????????, ??????.
 UserAlertManager.criticalErrorCountLabel=????:
+UserAlertManager.dumpEventsButton=???????
 UserAlertManager.errorCountLabel=??:
 UserAlertManager.minorCountLabel=??:
 UserAlertManager.totalLabel=??:
@@ -347,8 +475,8 @@
 WelcomeToadlet.disabledAlert=????
 WelcomeToadlet.extVersion=Freenet-ext ????:${build} r${rev}
 WelcomeToadlet.extVersionWithRecommended=Freenet-ext ????:${build} 
(??????${recbuild}) ????:${rev}
-WelcomeToadlet.fetch=?
-WelcomeToadlet.fetchKeyLabel=?? Key
+WelcomeToadlet.fetch=??
+WelcomeToadlet.fetchKeyLabel=????
 WelcomeToadlet.finInsertSuccessWithKey=??????????? ${key} ?
 WelcomeToadlet.homepageFullTitleWithName=${name} ? Freenet FProxy ??
 WelcomeToadlet.ieWarning=?????????Internet Explorer?????????????????
@@ -357,6 +485,7 @@
 WelcomeToadlet.insertSucceededTitle=??????
 WelcomeToadlet.insertedTitle=????
 WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=?????? key 
${link}${name}${/link}?
+WelcomeToadlet.keyRequestLabel=??:
 WelcomeToadlet.nodeUpdateConfirm=????????Freenet????
 WelcomeToadlet.nodeUpdateConfirmTitle=??????
 WelcomeToadlet.privateKeyHeader=??
@@ -381,4 +510,6 @@
 WelcomeToadlet.updatingTitle=?????
 WelcomeToadlet.version=Freenet ??:${fullVersion} ????:${build} r${rev}
 WelcomeToadlet.versionHeader=???????
+WrapperConfig.wrapper.java.maxmemory.long=Freenet ???????. ???????????, 
Freenet ?????????; ?????????????, ????????. ?????????? Freenet ??????.
+WrapperConfig.wrapper.java.maxmemory.short=?????(???MiB)
 End

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties 
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties 
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -1,5 +1,6 @@
 BookmarkEditorToadlet.addBookmark=????
 BookmarkEditorToadlet.addCategory=????
+BookmarkEditorToadlet.addDefaultBookmarks=??????????.
 BookmarkEditorToadlet.addNewBookmark=??????
 BookmarkEditorToadlet.addNewCategory=?????
 BookmarkEditorToadlet.addedNewBookmark=??????????.
@@ -18,10 +19,13 @@
 BookmarkEditorToadlet.deleteCategoryConfirm=??????${bookmark}????????????????
 BookmarkEditorToadlet.deleteSucceeded=??????????.
 BookmarkEditorToadlet.deleteSucceededTitle=????
+BookmarkEditorToadlet.descLabel=????:
 BookmarkEditorToadlet.edit=??
 BookmarkEditorToadlet.editBookmarkTitle=????
 BookmarkEditorToadlet.editCategoryTitle=????
 BookmarkEditorToadlet.error=??
+BookmarkEditorToadlet.hasAnActivelinkLabel=? freesite ?????????
+BookmarkEditorToadlet.invalidKey=???Freenet??.
 BookmarkEditorToadlet.invalidKeyTitle=????
 BookmarkEditorToadlet.invalidKeyWithReason=???Freenet??.
 BookmarkEditorToadlet.keyLabel=??:
@@ -34,22 +38,41 @@
 BookmarkEditorToadlet.pasteTitle=??/??
 BookmarkEditorToadlet.save=??
 BookmarkEditorToadlet.title=?????
+BookmarkEditorToadlet.urlDecodeError=URL????
 BookmarkManager.list=????
 BooleanOption.parseError=????????: ${val} - ??? true ? false
 BuildOldAgeUserAlert.tooOld=?????????????????????????????????(Build 
#${lastgood}). ?????????, ??????????"??"???????. (????????, Freenet 
??????????????)
 BuildOldAgeUserAlert.tooOldShort=??????? Freenet ??????, ???????????????! 
?????!
 BuildOldAgeUserAlert.tooOldTitle=?????
+ClockProblemDetectedUserAlert.shortText=??????????, Freenet ??????.
+ClockProblemDetectedUserAlert.text=Freenet ?????????(?????)????. 
??????????????, Freenet ??????.
+ClockProblemDetectedUserAlert.title=??????.
+ConfigToadlet.appliedSuccess=??????????.
 ConfigToadlet.appliedTitle=???????
 ConfigToadlet.apply=??
+ConfigToadlet.configNavTitle=????
+ConfigToadlet.contributeTranslation=????????
 ConfigToadlet.fullTitle=${name} ? Freenet ????
+ConfigToadlet.possibilitiesTitle=??
 ConfigToadlet.reset=??
+ConfigToadlet.returnToNodeConfig=??????
 ConfigToadlet.shortTitle=??
+ConfigToadlet.title=Freenet ????
+ConfigToadlet.wrapper=??
 ConfigurablePersister.doesNotExistCannotCreate=?????????????.
 ConfigurablePersister.existsCannotReadWrite=??????????????
 ConnectionsToadlet.nodeStatus.BACKED OFF=???
+ConnectionsToadlet.nodeStatus.BURSTING=???
+ConnectionsToadlet.nodeStatus.BUSY=???
+ConnectionsToadlet.nodeStatus.CLOCK PROBLEM=????
 ConnectionsToadlet.nodeStatus.CONNECTED=???
 ConnectionsToadlet.nodeStatus.CONNECTION ERROR=????
+ConnectionsToadlet.nodeStatus.DISABLED=???
 ConnectionsToadlet.nodeStatus.DISCONNECTED=???
+ConnectionsToadlet.nodeStatus.DISCONNECTING=???
+ConnectionsToadlet.nodeStatus.LISTEN ONLY=???
+ConnectionsToadlet.nodeStatus.LISTENING=???
+ConnectionsToadlet.nodeStatus.NEVER CONNECTED=????
 ConnectionsToadlet.nodeStatus.TOO NEW=??
 ConnectionsToadlet.nodeStatus.TOO OLD=??
 ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=????
@@ -65,18 +88,21 @@
 DarknetConnectionsToadlet.addPeerTitle=??????
 DarknetConnectionsToadlet.backedOff=???????:????????????,???????????.
 DarknetConnectionsToadlet.backedOffShort=???
+DarknetConnectionsToadlet.burstingShort=???
 DarknetConnectionsToadlet.busy=??:????????,??????????????????,??????????????.
 DarknetConnectionsToadlet.busyShort=??
 DarknetConnectionsToadlet.cancel=??
 DarknetConnectionsToadlet.cantFetchNoderefURL=??? ${url} ??????.?????.
 DarknetConnectionsToadlet.cantParseTryAgain=????????????:(${error}).?????.
 
DarknetConnectionsToadlet.cantParseWrongEnding=?????????:???????????End??,???????????:${end}
+DarknetConnectionsToadlet.clockProblemShort=????
 DarknetConnectionsToadlet.confirmRemoveNodeTitle=???
 DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=????
 DarknetConnectionsToadlet.connected=???:??????????
 DarknetConnectionsToadlet.connectedShort=???
 DarknetConnectionsToadlet.disabled=???????:????????????????.
-DarknetConnectionsToadlet.disabledShort=???
+DarknetConnectionsToadlet.disabledShort=???
+DarknetConnectionsToadlet.disconnectingShort=???
 DarknetConnectionsToadlet.enterDescription=?????:
 DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=??????:????
 DarknetConnectionsToadlet.failedToAddNodeTitle=??????
@@ -125,6 +151,9 @@
 DarknetConnectionsToadlet.updateChangedPrivnotes=??????????
 DarknetConnectionsToadlet.urlReference=????????URL:
 DarknetConnectionsToadlet.versionTitle=??
+ExtOldAgeUserAlert.extTooOld=?? freenet-ext.jar ?????????, 
???????????????????: http://downloads.freenetproject.org/alpha/freenet-ext.jar.
+ExtOldAgeUserAlert.extTooOldShort=?? freenet-ext.jar ?????. ?????.
+ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext ??
 FProxyToadlet.alertsTitle=??
 FProxyToadlet.config=??/??????
 FProxyToadlet.configTitle=??
@@ -136,7 +165,7 @@
 FProxyToadlet.homepage=??
 FProxyToadlet.mimeType=MIME ???${mime}
 FProxyToadlet.openForce=?${link}??${/link}????? ${mime} ????????????????
-FProxyToadlet.opennetTitle=??
+FProxyToadlet.opennetTitle=???
 FProxyToadlet.pathNotFoundTitle=???????
 FProxyToadlet.pluginsTitle=????
 FProxyToadlet.queue=????????
@@ -180,6 +209,11 @@
 FirstTimeWizardToadlet.step4Title=Freenet ?????? - ??????
 FirstTimeWizardToadlet.step6Title=Freenet ?????? - ????????
 FirstTimeWizardToadlet.welcomeInfoboxTitle=???? Freenet ???????
+GIFFilter.invalidHeader=????????? GIF ??.
+GIFFilter.invalidHeaderTitle=??????
+GIFFilter.notGif=????????????? GIF ?. ???????????, ?????????????????, 
?????????.
+GIFFilter.tooShort=? GIF ???????????.
+GIFFilter.tooShortTitle=????
 GenericReadFilterCallback.malformedAbsoluteURL=?????? URL ???${error}
 GenericReadFilterCallback.malformedRelativeURL=?????? URL ???${error}
 InsertException.shortError.10=???
@@ -191,9 +225,11 @@
 LocalFileInsertToadlet.fileHeader=??
 LocalFileInsertToadlet.insert=??
 LocalFileInsertToadlet.sizeHeader=??
+LogConfigHandler.minLoggingPriority=??????????
+LogConfigHandler.minLoggingPriorityLong=???????????. ??????????? debug, minor, 
normal ? error.
 LoggerHook.unrecognizedPriority=??????????: ${name}.
 LongOption.parseError=??????????? 64 ???? : ${val}
-MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ??????????? darknet ????????????, ????????)
+MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ???????????"????"????????????, ????????)
 MeaningfulNodeNameUserAlert.noNodeNickShort=????(??)????????
 MeaningfulNodeNameUserAlert.noNodeNickTitle=????(??)????????
 N2NTMToadlet.friends=??
@@ -202,17 +238,37 @@
 N2NTMToadlet.sentTitle=??
 N2NTMToadlet.tooLongTitle=??
 N2NTMUserAlert.delete=??
+N2NTMUserAlert.header=??: ${from} (??? ${composed} | ??? ${sent} | ??>? 
${received})
+N2NTMUserAlert.headerShort=?? ${from} ???
 N2NTMUserAlert.reply=??
 N2NTMUserAlert.title=?${peername}(${peer})?????????${number}
 Node.inBWLimit=??????????????
-Node.inBWLimitLong=?????????????????????????????? -1 ??????????
+Node.inBWLimitLong=????????????????; ??????????????; ?? -1 ?????????
 Node.l10nLanguage=????????
 Node.l10nLanguageLong=?????????????????????????????
 Node.nodeName=??????
 Node.nodeNameLong=????????????????
+Node.opennetEnabled=??????????(?????????????)?
+Node.opennetEnabledLong=??????????(???"????")? ??????, 
???????????????????????(?????"???", ???"??"). ????????????????, ?????????. 
?????????? Freenet ???, ???????????????("??"), ?????????.
 Node.outBWLimit=??????????????
+Node.outBWLimitLong=?????????(????????); ????????????????
 Node.storeSize=?????????
 Node.storeSizeLong=?????????
+NodeStats.mustBePercentValueNotFull=???????, ???? 0 ? 99 ??.
+NodeStats.valueTooLow=?????????????, ???????!
+NodeUpdateManager.installNewVersions=????????
+NodeUpdateManager.installNewVersionsLong=??????????????????? Freenet ??, 
???????
+NotEnoughNiceLevelsUserAlert.content=?????????????????????. ????????????????, 
??????????. ?????????????????! (? run.sh ??? PRIORITY ???, ??????) ??????? 
${available} ???????, ?????? ${required} ?.
+NotEnoughNiceLevelsUserAlert.short=???????????! ?????????????? Freenet.
+NotEnoughNiceLevelsUserAlert.title=???????????!
+OpennetConnectionsToadlet.fullTitle=${name} ? ${counts} ????(??????)
+OpennetConnectionsToadlet.peersListTitle=??????????(??????????????????)
+OpennetConnectionsToadlet.successTime=?????????????? CHK ???
+OpennetConnectionsToadlet.successTimeTitle=??????
+OpennetUserAlert.warningShort=????????.
+OpennetUserAlert.warningTitle=??: ????????: ??????????
+PNGFilter.invalidHeader=????????????? PNG ?, ?????????? PNG ??. ???????????, 
?????????????????, ?????????.
+PNGFilter.invalidHeaderTitle=??? PNG - ??????
 PluginToadlet.addPluginTitle=??plugin
 PluginToadlet.failedToLoadPluginTitle=Plugin????
 PluginToadlet.noWebInterfaceTitle=?plugin?????
@@ -222,11 +278,20 @@
 PluginToadlet.pluginNotFoundTitle=????plugin
 PluginToadlet.unsupportedMethod=????method.
 PluginToadlet.visit=??
+PproxyToadlet.Load=??
 PproxyToadlet.cancel=??
 PproxyToadlet.classNameTitle=Class??
 PproxyToadlet.internalIDTitle=????
+PproxyToadlet.loadOfficialPlugin=??????
+PproxyToadlet.loadOfficialPluginLabel=??????
+PproxyToadlet.loadOfficialPluginText=???????? Freenet ???????. 
????????????????, ????????.
+PproxyToadlet.loadOfficialPluginWarning=??: ?????????????????, ??? Freenet ??. 
?????????????, ?????. ?????????????, ??????????.
+PproxyToadlet.loadOtherPlugin=???????
+PproxyToadlet.loadOtherPluginText=?????????????? URL. ???????????????????, 
???????????????????. ???????????????????, ???????.
+PproxyToadlet.loadOtherURLLabel=??? URL
 PproxyToadlet.loadPluginLabel=??Plugin:
 PproxyToadlet.noPlugins=??????plugins
+PproxyToadlet.noVersion=?
 PproxyToadlet.pluginNotFoundReload=??????????plugin.
 PproxyToadlet.pluginNotFoundReloadTitle=?????Plugin(????)
 PproxyToadlet.pluginUnloaded=?plugin????
@@ -234,20 +299,44 @@
 PproxyToadlet.plugins=Plugins
 PproxyToadlet.pluginsWithNodeName=${name}?plugins
 PproxyToadlet.reload=????
+PproxyToadlet.reloadPurgeWarning=?????????????????. ??????????????????, 
??????????!
 PproxyToadlet.returnToPluginPage=??plugin??
 PproxyToadlet.startedAtTitle=????
 PproxyToadlet.unload=??
 PproxyToadlet.unloadPluginTitle=???plugin?
 PproxyToadlet.unloadPluginWithName=??????${name}??
+PproxyToadlet.versionTitle=??
+QueueToadlet.DUinProgress=???????? (${size})
+QueueToadlet.DinProgress=???????? (${size})
+QueueToadlet.UinProgress=???????? (${size})
 QueueToadlet.change=???
+QueueToadlet.completedDU=?????????? (${size})
+QueueToadlet.completedDinDownloadDirectory=???????????????? (${size})
+QueueToadlet.completedDinTempDirectory=???????????????? (${size})
+QueueToadlet.completedDtoDisk=??????????? (${size})
+QueueToadlet.completedDtoTemp=?????????????? (${size})
+QueueToadlet.completedU=???????? (${size})
+QueueToadlet.completedUDirectory=???????? (${size})
 QueueToadlet.delete=??
 QueueToadlet.download=??
-QueueToadlet.fileName=???
+QueueToadlet.downloadSucceeded=?? ${origlink}${filename}${/origlink} ???????. 
?${link}???${/link}????  (${size}).
+QueueToadlet.downloadSucceededTitle=????: ${filename}
+QueueToadlet.errorAccessDenied=????: ????!
+QueueToadlet.failedD=????? (${size})
+QueueToadlet.failedDU=????????? (${size})
+QueueToadlet.failedU=??????? (${size})
+QueueToadlet.fileName=??
 QueueToadlet.identifier=??
 QueueToadlet.insertAs=???:
 QueueToadlet.insertFile=????
+QueueToadlet.insertFileBrowseLabel=?????????
+QueueToadlet.insertFileInsertFileLabel=????
+QueueToadlet.insertFileLabel=??????????(???!)
 QueueToadlet.key=??
 QueueToadlet.legend=??
+QueueToadlet.mimeType=MIME ??
+QueueToadlet.none=?
+QueueToadlet.persistence=??
 QueueToadlet.persistenceForever=??
 QueueToadlet.persistenceNone=?
 QueueToadlet.persistenceRebootr=??
@@ -261,37 +350,51 @@
 QueueToadlet.priority6=????
 QueueToadlet.progress=??
 QueueToadlet.reason=??
+QueueToadlet.remove=??
+QueueToadlet.requestNavigation=????
 QueueToadlet.restart=??
 QueueToadlet.size=??
 QueueToadlet.starting=???
 QueueToadlet.title=${nodeName}?????
 QueueToadlet.totalSize=????
 QueueToadlet.unknown=??
+QueueToadlet.wipD=???: ?? (${size})
+QueueToadlet.wipDU=???: ???? (${size})
+QueueToadlet.wipU=???: ?? (${size})
+RevocationKeyFoundUserAlert.text=??????????????????????. ????????????????????! 
??, ?????????????, ???"???"????????. ?????????????????????. ???????????????. 
?????: ${message}.
+RevocationKeyFoundUserAlert.title=????????????!
+ShortOption.parseError=???????????????: ${error}
 SimpleToadletServer.cssName=??????
+SimpleToadletServer.cssNameLong=?? Freenet ?????????
+StaticToadlet.pathInvalidChars=??? URI ??????????.
+StaticToadlet.pathNotFound=????????.
+StaticToadlet.pathNotFoundTitle=??????
 StatisticsToadlet.activityInserts=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
 StatisticsToadlet.activityRequests=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
-StatisticsToadlet.allocMemory=Java???????: ${memory}
+StatisticsToadlet.allocMemory=Java ???????: ${memory}
 StatisticsToadlet.bandwidthTitle=??
 StatisticsToadlet.cpus=???CPU??: ${count}
 StatisticsToadlet.getLogs=?????????
 StatisticsToadlet.inputRate=????: ?? ${rate} (???? ${max})
+StatisticsToadlet.javaVersion=Java ??: ${version}
 StatisticsToadlet.jeDumpButton=????JE??
 StatisticsToadlet.jvmInfoTitle=JVM??
 StatisticsToadlet.jvmVendor=JVM ???? ${vendor}
 StatisticsToadlet.jvmVersion=JVM??: ${version}
-StatisticsToadlet.maxMemory=Java??????: ${memory}
+StatisticsToadlet.maxMemory=Java ??????: ${memory}
 StatisticsToadlet.osArch=????????: ${arch}
 StatisticsToadlet.osName=??????: ${name}
 StatisticsToadlet.osVersion=??????: ${version}
 StatisticsToadlet.outputRate=????: ?? ${rate} (???? ${max})
 StatisticsToadlet.payloadOutput=????: ${total} (?? ${rate}) (${percent}%)
 StatisticsToadlet.peerStatsTitle=????
+StatisticsToadlet.statisticGatheringTitle=????
 StatisticsToadlet.threadDumpButton=?????????
 StatisticsToadlet.threads=???????: ${running}/${max}
 StatisticsToadlet.totalInput=????: ${total} (?? ${rate})
 StatisticsToadlet.totalOutput=????: ${total} (?? ${rate})
 StatisticsToadlet.transferringRequests=????: ?? ${senders}, ?? ${receivers}
-StatisticsToadlet.usedMemory=Java???????: ${memory}
+StatisticsToadlet.usedMemory=Java ???????: ${memory}
 StatisticsToadlet.versionTitle=??????
 SymlinkerToadlet.symlinks=ToadletServer??????
 TextModeClientInterfaceServer.allowedHosts=??????
@@ -301,7 +404,26 @@
 TextModeClientInterfaceServer.enabled=??????
 TextModeClientInterfaceServer.enabledLong=?????????????
 TextModeClientInterfaceServer.telnetPortNumber=?????
+TimeSkewDetectedUserAlert.shortText=???????????????. Freenet ?????????!
+TimeSkewDetectedUserAlert.text=?????????????????. ?????. ??????????, ????????. 
?????????????????, ??????, ????????.
+TimeSkewDetectedUserAlert.title=???????!
 Toadlet.cancel=??
+Toadlet.clickHere=???
+Toadlet.homepage=??
+Toadlet.internalErrorPleaseReport=????: ???
+Toadlet.internalErrorTitle=????
+Toadlet.no=?
+Toadlet.nodeHomepage=????
+Toadlet.notSupportedTitle=???
+Toadlet.notSupportedWithClass=?????????? Freenet (${class}) ???????.
+Toadlet.ok=?
+Toadlet.permRedirectWithReason=????: ${reason}
+Toadlet.returnToNodeHomepage=??????
+Toadlet.returnToPrevPage=?????
+Toadlet.tempRedirectWithReason=????: ${reason}
+Toadlet.unauthorized=??????????.
+Toadlet.unauthorizedTitle=????
+Toadlet.yes=?
 TranslationToadlet.bracketRemoveOverride=(???????!)
 TranslationToadlet.bracketTranslateIt=(?????????!)
 TranslationToadlet.bracketUpdateTranslation=(??????)
@@ -319,6 +441,8 @@
 TranslationToadlet.translationUpdateTitle=????
 TranslationToadlet.translationUpdatedTitle=??????!
 TranslationToadlet.updateTranslationCommand=??????!
+UnknownContentTypeException.explanation=?? Freenet ??????? MIME ??. ????, 
?????????????????????, ????????. ???, ?????????????????????, ?????????????; 
??????????, ???????????, ???????????(???????????????, ???????????????). 
???????, ?????????????????, ?????? script ???????????????.
+UnknownContentTypeException.title=??????????????: ${type}
 UpdatedVersionAvailableUserAlert.armed=?????????????????Freenet???,??????.
 UpdatedVersionAvailableUserAlert.clickToUpdateNow=????????????????.
 
UpdatedVersionAvailableUserAlert.downloadedNewExtJar=?????????????Freenet????,???${version}.
@@ -332,7 +456,11 @@
 UserAlert.apply=??
 UserAlert.hide=??
 UserAlert.reset=??
+UserAlertManager.alertsOnAlertsPage=| ??${link}????${/link}??????.
+UserAlertManager.alertsTitle=?????
+UserAlertManager.clickForMore=?????????????????, ??????.
 UserAlertManager.criticalErrorCountLabel=????:
+UserAlertManager.dumpEventsButton=???????
 UserAlertManager.errorCountLabel=??:
 UserAlertManager.minorCountLabel=??:
 UserAlertManager.totalLabel=??:
@@ -347,8 +475,8 @@
 WelcomeToadlet.disabledAlert=????
 WelcomeToadlet.extVersion=Freenet-ext ????:${build} r${rev}
 WelcomeToadlet.extVersionWithRecommended=Freenet-ext ????:${build} 
(??????${recbuild}) ????:${rev}
-WelcomeToadlet.fetch=?
-WelcomeToadlet.fetchKeyLabel=?? Key
+WelcomeToadlet.fetch=??
+WelcomeToadlet.fetchKeyLabel=????
 WelcomeToadlet.finInsertSuccessWithKey=??????????? ${key} ?
 WelcomeToadlet.homepageFullTitleWithName=${name} ? Freenet FProxy ??
 WelcomeToadlet.ieWarning=?????????Internet Explorer?????????????????
@@ -357,6 +485,7 @@
 WelcomeToadlet.insertSucceededTitle=??????
 WelcomeToadlet.insertedTitle=????
 WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=?????? key 
${link}${name}${/link}?
+WelcomeToadlet.keyRequestLabel=??:
 WelcomeToadlet.nodeUpdateConfirm=????????Freenet????
 WelcomeToadlet.nodeUpdateConfirmTitle=??????
 WelcomeToadlet.privateKeyHeader=????
@@ -381,4 +510,6 @@
 WelcomeToadlet.updatingTitle=?????
 WelcomeToadlet.version=Freenet ??:${fullVersion} ????:${build} r${rev}
 WelcomeToadlet.versionHeader=???????
+WrapperConfig.wrapper.java.maxmemory.long=Freenet ????????. ???????????, 
Freenet ??????????; ?????????????, ????????. ?????????? Freenet ??????.
+WrapperConfig.wrapper.java.maxmemory.short=??????(?????MiB)
 End

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java     
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java     
2008-06-16 12:45:45 UTC (rev 20360)
@@ -1,4 +1,3 @@
-
 /* This code is part of Freenet. It is distributed under the GNU General
  * Public License, version 2 (or at your option any later version). See
  * http://www.gnu.org/ for further details of the GPL. */

Modified: branches/saltedhashstore/freenet/src/freenet/node/Node.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-06-15 
19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-06-16 
12:45:45 UTC (rev 20360)
@@ -1,6 +1,4 @@
-/*
- * Freenet 0.7 node.
- */
+/* Freenet 0.7 node. */
 package freenet.node;

 import java.io.BufferedReader;
@@ -216,7 +214,10 @@
                }

                public String[] getPossibleValues() {
-                       return L10n.AVAILABLE_LANGUAGES;
+                       String[] result = new 
String[L10n.AVAILABLE_LANGUAGES.length];
+                       for(int i=0; i<L10n.AVAILABLE_LANGUAGES.length; i++)
+                               result[i] = L10n.AVAILABLE_LANGUAGES[i][1];
+                       return result;
                }
        }

@@ -1777,6 +1778,12 @@

                if(logMINOR) Logger.minor(this, "JVM vendor: "+jvmVendor+", JVM 
version: "+jvmVersion+", OS name: "+osName+", OS version: "+osVersion);

+               if(jvmVersion.startsWith("1.4")) {
+                       System.err.println("Java 1.4 will not be supported for 
much longer, PLEASE UPGRADE!");
+                       nodeUpdater.disableThisSession();
+                       clientCore.alerts.register(new SimpleUserAlert(false, 
l10n("java14Title"), l10n("java14Text"), l10n("java14ShortText"), 
UserAlert.ERROR));
+               }
+               
                if(jvmVendor.startsWith("Sun ")) {
                        // Sun bugs

@@ -2676,6 +2683,8 @@
                synchronized(cachedPubKeys) {
                        DSAPublicKey key2 = (DSAPublicKey) cachedPubKeys.get(w);
                        if((key2 != null) && !key2.equals(key)) {
+                               // FIXME is this test really needed?
+                               // SHA-256 inside synchronized{} is a bad idea
                                MessageDigest md256 = SHA256.getMessageDigest();
                                try {
                                byte[] hashCheck = md256.digest(key.asBytes());
@@ -3377,4 +3386,4 @@
        public void setDispatcherHook(NodeDispatcherCallback cb) {
                this.dispatcher.setHook(cb);
        }
-}
\ No newline at end of file
+}

Modified: branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java  
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java  
2008-06-16 12:45:45 UTC (rev 20360)
@@ -26,11 +26,9 @@


 /**
- * 
- * @author nextgens
- *     
- *     A class to tie the wrapper and the node (needed for self-restarting 
support)
+ *  @author nextgens
  *
+ *  A class to tie the wrapper and the node (needed for self-restarting 
support)
  */
 public class NodeStarter implements WrapperListener
 {

Modified: branches/saltedhashstore/freenet/src/freenet/node/ProbeCallback.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/ProbeCallback.java        
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/ProbeCallback.java        
2008-06-16 12:45:45 UTC (rev 20360)
@@ -10,7 +10,8 @@

        void onTrace(long uid, double target, double nearest, double best, 
short htl, short counter, double location, long nodeUID, double[] peerLocs, 
long[] peerUIDs, double[] locsNotVisited, short forkCount, short linearCount, 
String reason, long prevUID);

-       /** Got a RejectedOverload passed down from some upstream node. Note 
that not all probe request
+       /**
+        * Got a RejectedOverload passed down from some upstream node. Note 
that not all probe request
         * implementations may generate these.
         */
        void onRejectOverload();

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/RequestScheduler.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/RequestScheduler.java     
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/RequestScheduler.java     
2008-06-16 12:45:45 UTC (rev 20360)
@@ -10,7 +10,8 @@

        public SendableRequest removeFirst();

-       /** Tell the scheduler that a request from a specific RandomGrabArray 
succeeded.
+       /**
+        * Tell the scheduler that a request from a specific RandomGrabArray 
succeeded.
         * Definition of "succeeded" will vary, but the point is most 
schedulers will run another
         * request from the parentGrabArray in the near future on the theory 
that if one works,
         * another may also work. 

Modified: branches/saltedhashstore/freenet/src/freenet/node/RequestStarter.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/RequestStarter.java       
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/RequestStarter.java       
2008-06-16 12:45:45 UTC (rev 20360)
@@ -98,7 +98,7 @@
                while(true) {
                        // Allow 5 minutes before we start killing requests due 
to not connecting.
                        OpennetManager om;
-                       if(core.node.peers.countConnectedPeers() == 0 && (om = 
core.node.getOpennet()) != null &&
+                       if(core.node.peers.countConnectedPeers() < 3 && (om = 
core.node.getOpennet()) != null &&
                                        System.currentTimeMillis() - 
om.getCreationTime() < 5*60*1000) {
                                try {
                                        synchronized(this) {

Modified: branches/saltedhashstore/freenet/src/freenet/node/UptimeEstimator.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/UptimeEstimator.java      
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/UptimeEstimator.java      
2008-06-16 12:45:45 UTC (rev 20360)
@@ -20,6 +20,7 @@
  * A class to estimate the node's average uptime. Every 5 minutes (with a 
fixed offset), we write
  * an integer (the number of minutes since the epoch) to the end of a file. We 
rotate it when it
  * gets huge. We read it to figure out how many of the 5 minute slots in the 
last X period are occupied.
+ *
  * @author toad
  */
 public class UptimeEstimator implements Runnable {

Modified: branches/saltedhashstore/freenet/src/freenet/node/Version.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Version.java      
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/Version.java      
2008-06-16 12:45:45 UTC (rev 20360)
@@ -24,17 +24,17 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 1150;
+       private static final int buildNumber = 1152;

        /** Oldest build of Fred we will talk to */
        private static final int oldLastGoodBuild = 1145;
-       private static final int newLastGoodBuild = 1146;
+       private static final int newLastGoodBuild = 1152;
        static final long transitionTime;

        static {
                final Calendar _cal = 
Calendar.getInstance(TimeZone.getTimeZone("GMT"));
                // year, month - 1 (or constant), day, hour, minute, second
-               _cal.set( 2008, Calendar.MAY, 8, 0, 0, 0 );
+               _cal.set( 2008, Calendar.JUNE, 15, 0, 0, 0 );
                transitionTime = _cal.getTimeInMillis();
        }


Modified: branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientGet.java        
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientGet.java        
2008-06-16 12:45:45 UTC (rev 20360)
@@ -117,18 +117,19 @@
                        }
                }
                returnBucket = ret;
-               if(persistenceType != PERSIST_CONNECTION)
+               if(persistenceType != PERSIST_CONNECTION) {
                        try {
                                client.register(this, false);
                        } catch (IdentifierCollisionException e) {
                                ret.free();
                                throw e;
                        }
-                       getter = new ClientGetter(this, 
client.core.requestStarters.chkFetchScheduler, 
client.core.requestStarters.sskFetchScheduler, uri, fctx, priorityClass, 
client.lowLevelClient, returnBucket, null);
-                       if(persistenceType != PERSIST_CONNECTION) {
-                               FCPMessage msg = persistentTagMessage();
-                               client.queueClientRequestMessage(msg, 0);
-                       }
+               }
+               getter = new ClientGetter(this, 
client.core.requestStarters.chkFetchScheduler, 
client.core.requestStarters.sskFetchScheduler, uri, fctx, priorityClass, 
client.lowLevelClient, returnBucket, null);
+               if(persistenceType != PERSIST_CONNECTION) {
+                       FCPMessage msg = persistentTagMessage();
+                       client.queueClientRequestMessage(msg, 0);
+               }
        }

        public ClientGet(FCPConnectionHandler handler, ClientGetMessage 
message) throws IdentifierCollisionException, MessageInvalidException {
@@ -187,23 +188,24 @@
                if(ret == null)
                        Logger.error(this, "Impossible: ret = null in FCP 
constructor for "+this, new Exception("debug"));
                returnBucket = ret;
-               if(persistenceType != PERSIST_CONNECTION)
+               if(persistenceType != PERSIST_CONNECTION) {
                        try {
                                client.register(this, false);
                        } catch (IdentifierCollisionException e) {
                                ret.free();
                                throw e;
                        }
-                       getter = new ClientGetter(this, 
client.core.requestStarters.chkFetchScheduler, 
-                                       
client.core.requestStarters.sskFetchScheduler, uri, fctx, priorityClass, 
-                                       client.lowLevelClient, binaryBlob ? new 
NullBucket() : returnBucket, 
-                                                       binaryBlob ? 
returnBucket : null);
-                       if(persistenceType != PERSIST_CONNECTION) {
-                               FCPMessage msg = persistentTagMessage();
-                               client.queueClientRequestMessage(msg, 0);
-                               if(handler != null && 
(!handler.isGlobalSubscribed()))
-                                       handler.outputHandler.queue(msg);
-                       }
+               }
+               getter = new ClientGetter(this, 
client.core.requestStarters.chkFetchScheduler, 
+                               client.core.requestStarters.sskFetchScheduler, 
uri, fctx, priorityClass, 
+                               client.lowLevelClient, binaryBlob ? new 
NullBucket() : returnBucket, 
+                                               binaryBlob ? returnBucket : 
null);
+               if(persistenceType != PERSIST_CONNECTION) {
+                       FCPMessage msg = persistentTagMessage();
+                       client.queueClientRequestMessage(msg, 0);
+                       if(handler != null && (!handler.isGlobalSubscribed()))
+                               handler.outputHandler.queue(msg);
+               }
        }

        /**
@@ -309,7 +311,7 @@
                }

                if(finished && succeeded)
-                               allDataPending = new 
AllDataMessage(returnBucket, identifier, global, startupTime, completionTime);
+                       allDataPending = new AllDataMessage(returnBucket, 
identifier, global, startupTime, completionTime);
        }

        public void start() {

Modified: branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientPut.java        
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/node/fcp/ClientPut.java        
2008-06-16 12:45:45 UTC (rev 20360)
@@ -10,6 +10,7 @@
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.security.MessageDigest;
+import java.util.Arrays;

 import freenet.client.ClientMetadata;
 import freenet.client.DefaultMIMETypes;
@@ -33,8 +34,6 @@
 import freenet.support.io.FileBucket;
 import freenet.support.io.SerializableToFieldSetBucketUtil;

-import java.util.Arrays;
-
 public class ClientPut extends ClientPutBase {

        final ClientPutter putter;
@@ -191,6 +190,9 @@
                if(mimeType == null && origFilename != null) {
                        mimeType = 
DefaultMIMETypes.guessMIMEType(origFilename.getName(), true);
                }
+               if ((mimeType == null) && (targetFilename != null)) {
+                       mimeType = 
DefaultMIMETypes.guessMIMEType(targetFilename, true);
+               }
                if(mimeType == null) {
                        mimeType = DefaultMIMETypes.guessMIMEType(identifier, 
true);
                }

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdateManager.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdateManager.java
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdateManager.java
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -88,6 +88,7 @@
        public final UpdateOverMandatoryManager uom;

        private boolean logMINOR;
+       private boolean disabledThisSession;

        public NodeUpdateManager(Node node, Config config) throws 
InvalidConfigValueException {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
@@ -386,6 +387,12 @@
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                try {
                        synchronized(this) {
+                               if(disabledThisSession) {
+                                       String msg = "Not deploying update 
because disabled for this session (bad java version??)";
+                                       Logger.error(this, msg);
+                                       System.err.println(msg);
+                                       return;
+                               }
                                if(hasBeenBlown) {
                                        String msg = "Trying to update but key 
has been blown! Not updating, message was "+revocationMessage;
                                        Logger.error(this, msg);
@@ -904,5 +911,9 @@
                }

        };
+
+       public void disableThisSession() {
+               disabledThisSession = true;
+       }

 }

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/useralerts/UserAlertManager.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/node/useralerts/UserAlertManager.java
  2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/node/useralerts/UserAlertManager.java
  2008-06-16 12:45:45 UTC (rev 20360)
@@ -138,6 +138,8 @@
                                if(alerts[i].isEventNotification()) events++;
                        }
                }
+               if(events == 0)
+                       return new HTMLNode("#", "");
                if(events < 2) drawDumpEventsForm = false;
                HTMLNode boxNode = new HTMLNode("div", "class", "infobox 
infobox-"+getAlertLevelName(maxLevel)+" infobox-summary-status-box");
                boxNode.addChild("div", "class", "infobox-header infobox 
summary-status-header", title);
@@ -154,9 +156,6 @@
                        listItem.addChild("a", "href", 
"/alerts/#"+alert.anchor(), alert.getShortText());
                        totalNumber++;
                }
-               if (totalNumber == 0) {
-                       return new HTMLNode("#", "");
-               }
                if(drawDumpEventsForm) {
                        HTMLNode dumpFormNode = contentNode.addChild("form", 
new String[] { "action", "method" }, new String[] { "/", "post" 
}).addChild("div");
                        dumpFormNode.addChild("input", new String[] { "type", 
"name", "value" }, new String[] { "hidden", "formPassword", core.formPassword 
});

Modified: 
branches/saltedhashstore/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/store/BerkeleyDBFreenetStore.java  
    2008-06-15 19:53:33 UTC (rev 20359)
+++ 
branches/saltedhashstore/freenet/src/freenet/store/BerkeleyDBFreenetStore.java  
    2008-06-16 12:45:45 UTC (rev 20360)
@@ -943,10 +943,13 @@
        private void reconstruct() throws DatabaseException, IOException {
                if(keysDB.count() != 0)
                        throw new IllegalStateException("Store must be empty 
before reconstruction!");
-               System.err.println("Reconstructing store index from store file: 
callback="+callback);
+               // Timeout must be well below Integer.MAX_VALUE. It is added to 
previous timeouts in an integer value.
+               // If it's too high, we get wraparound and instant timeout.
+               int timeout = (int) (Math.min(7 * 24 * 60 * 60 * 1000, 5 * 60 * 
1000
+                       + (storeRAF.length() / (dataBlockSize + 
headerBlockSize)) * 1000L));
+               System.err.println("Reconstructing store index from store file: 
callback="+callback+" - allowing "+timeout+"ms");
                Logger.error(this, "Reconstructing store index from store file: 
callback="+callback);
-               WrapperManager.signalStarting((int) 
(Math.min(Integer.MAX_VALUE, 5 * 60 * 1000
-                       + (storeRAF.length() / (dataBlockSize + 
headerBlockSize)) * 1000L)));
+               WrapperManager.signalStarting(timeout);
                // Reusing the buffer is safe, provided we don't do anything 
with the resulting StoreBlock.
                byte[] header = new byte[headerBlockSize];
                byte[] data = new byte[dataBlockSize];
@@ -983,15 +986,7 @@

                                long lruVal = 0;
                                Transaction t = null;
-                               if(storeRAF.getFilePointer() != l * 
(headerBlockSize + dataBlockSize)) {
-                                       System.err.println("File pointer is 
"+storeRAF.getFilePointer()+" but should be "+((headerBlockSize + 
dataBlockSize)));
-                                       
System.exit(NodeInitException.EXIT_STORE_RECONSTRUCT);
-                               }
-                               // FIXME only do the read if we need the data, 
and if we do, do a seek first.
-                               // Post 0.7.0; only a useful optimisation if we 
have a good .keys file, but should 
-                               // save some I/O when we do.
-                               storeRAF.readFully(header);
-                               storeRAF.readFully(data);
+                               boolean dataRead = false;
                                if(lruRAFLength > (l+1)*8) {
                                        try {
                                                lruVal = lruRAF.readLong();
@@ -1030,6 +1025,12 @@
                                                        routingkey = newkey;
                                                }
                                        }
+                                       if (!dataRead) {
+                                               storeRAF.seek(l * 
(headerBlockSize + dataBlockSize));
+                                               storeRAF.readFully(header);
+                                               storeRAF.readFully(data);
+                                               dataRead = true;
+                                       }
                                        if (routingkey == null && 
!isAllNull(header) && !isAllNull(data)) {
                                                keyFromData = true;
                                                try {
@@ -1061,6 +1062,12 @@
                                                if(!keyFromData) {
                                                        byte[] oldRoutingkey = 
routingkey;
                                                        try {
+                                                               if (!dataRead) {
+                                                                       
storeRAF.seek(l * (headerBlockSize + dataBlockSize));
+                                                                       
storeRAF.readFully(header);
+                                                                       
storeRAF.readFully(data);
+                                                                       
dataRead = true;
+                                                               }
                                                                StorableBlock 
block = callback.construct(data, header, null, keyBuf);
                                                                routingkey = 
block.getRoutingKey();
                                                                
if(Arrays.equals(oldRoutingkey, routingkey)) {
@@ -1408,7 +1415,7 @@
                                if(!overwrite)
                                        throw new KeyCollisionException();
                                else
-                                       overwriteKeyUnchanged(block, 
routingkey, fullKey, data, header);
+                                       overwriteKeyUnchanged(routingkey, 
fullKey, data, header);
                        } // else return; // already in store
                } else {
                        innerPut(block, routingkey, fullKey, data, header);
@@ -1418,7 +1425,7 @@
        /**
         * Overwrite a block with a new block which has the same key.
         */
-       private boolean overwriteKeyUnchanged(StorableBlock block, byte[] 
routingkey, byte[] fullKey, byte[] data, byte[] header) throws IOException {
+       private boolean overwriteKeyUnchanged(byte[] routingkey, byte[] 
fullKey, byte[] data, byte[] header) throws IOException {
                synchronized(this) {
                        if(closed)
                                return false;

Modified: branches/saltedhashstore/freenet/src/freenet/support/Serializer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/Serializer.java        
2008-06-15 19:53:33 UTC (rev 20359)
+++ branches/saltedhashstore/freenet/src/freenet/support/Serializer.java        
2008-06-16 12:45:45 UTC (rev 20360)
@@ -63,7 +63,7 @@
                        throw new IOException("Boolean is non boolean value: 
"+bool);
                } else if (type.equals(Byte.class)) {
                        int b = dis.readByte();
-                       return new Byte((byte)b);
+                       return new Byte((byte) b);
                } else if (type.equals(Short.class)) {
                        return new Short(dis.readShort());
                } else if (type.equals(Integer.class)) {
@@ -102,20 +102,21 @@
                }
        }

-       public static void writeToDataOutputStream(Object object, 
DataOutputStream dos, PeerContext ctx) throws IOException {
+       public static void writeToDataOutputStream(Object object, 
DataOutputStream dos, PeerContext ctx) throws IOException {   
                Class type = object.getClass();
-               if (type.equals(Boolean.class)) {
+               if (type.equals(Long.class)) {
+                       dos.writeLong(((Long) object).longValue());
+               } else if (type.equals(Boolean.class)) {
                        dos.write(((Boolean) object).booleanValue() ? 1 : 0);
-               } else if (type.equals(Byte.class)) {
-                       dos.write(((Byte) object).byteValue());
-               } else if (type.equals(Short.class)) {
-                       dos.writeShort(((Short) object).shortValue());
                } else if (type.equals(Integer.class)) {
                        dos.writeInt(((Integer) object).intValue());
-               } else if (type.equals(Long.class)) {
-                       dos.writeLong(((Long) object).longValue());
+               } else if (type.equals(Short.class)) {
+                       dos.writeShort(((Short) object).shortValue());
                } else if (type.equals(Double.class)) {
                    dos.writeDouble(((Double) object).doubleValue());
+               } else if 
(WritableToDataOutputStream.class.isAssignableFrom(type)) {
+                       WritableToDataOutputStream b = 
(WritableToDataOutputStream) object;
+                       b.writeToDataOutputStream(dos);
                } else if (type.equals(String.class)) {
                        String s = (String) object;
                        dos.writeInt(s.length());
@@ -130,11 +131,8 @@
                                        writeToDataOutputStream(i.next(), dos, 
ctx);
                                }
                        }
-               } else if (type.equals(Peer.class)) {
-                       ((Peer)object).writeToDataOutputStream(dos);
-               } else if 
(WritableToDataOutputStream.class.isAssignableFrom(type)) {
-                       WritableToDataOutputStream b = 
(WritableToDataOutputStream) object;
-                       b.writeToDataOutputStream(dos);
+               } else if (type.equals(Byte.class)) {
+                       dos.write(((Byte) object).byteValue());
                } else {
                        throw new RuntimeException("Unrecognised field type: " 
+ type);
                }


Reply via email to