Author: j16sdiz
Date: 2008-05-09 02:17:04 +0000 (Fri, 09 May 2008)
New Revision: 19858

Modified:
   branches/saltedhashstore/freenet/src/freenet/client/ArchiveManager.java
   branches/saltedhashstore/freenet/src/freenet/client/FECCodec.java
   
branches/saltedhashstore/freenet/src/freenet/client/async/SimpleManifestPutter.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/BookmarkEditorToadlet.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/QueueToadlet.java
   branches/saltedhashstore/freenet/src/freenet/clients/http/WelcomeToadlet.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/bookmark/BookmarkItem.java
   
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
   branches/saltedhashstore/freenet/src/freenet/crypt/CryptoKey.java
   branches/saltedhashstore/freenet/src/freenet/io/comm/MessageFilter.java
   branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.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/node/Announcer.java
   branches/saltedhashstore/freenet/src/freenet/node/DNSRequester.java
   
branches/saltedhashstore/freenet/src/freenet/node/IPDetectorPluginManager.java
   branches/saltedhashstore/freenet/src/freenet/node/NodeClientCore.java
   branches/saltedhashstore/freenet/src/freenet/node/RequestHandler.java
   branches/saltedhashstore/freenet/src/freenet/node/SeedServerPeerNode.java
   
branches/saltedhashstore/freenet/src/freenet/node/TextModeClientInterface.java
   branches/saltedhashstore/freenet/src/freenet/node/Version.java
   branches/saltedhashstore/freenet/src/freenet/node/fcp/FCPServer.java
   branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdater.java
   
branches/saltedhashstore/freenet/src/freenet/support/NumberedItemComparator.java
   
branches/saltedhashstore/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
   
branches/saltedhashstore/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucketFactory.java
   
branches/saltedhashstore/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
   branches/saltedhashstore/freenet/src/net/i2p/util/NativeBigInteger.java
Log:
Merge from build 1149(r19830)

Merge commit 'trunk' into saltedhashstore


Modified: 
branches/saltedhashstore/freenet/src/freenet/client/ArchiveManager.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/client/ArchiveManager.java     
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/client/ArchiveManager.java     
2008-05-09 02:17:04 UTC (rev 19858)
@@ -39,8 +39,8 @@
        public static final String METADATA_NAME = ".metadata";
        private static boolean logMINOR;

-       final RandomSource random;
-       final Random weakRandom;
+       final RandomSource strongPRNG;
+       final Random weakPRNG;
        final long maxArchiveSize;
        final long maxArchivedFileSize;

@@ -72,7 +72,8 @@
         * file extracted from an archive. It is stored, encrypted and padded, 
in a single
         * file.
         * @param cacheDir The directory in which to store cached data.
-        * @param random A random source for the encryption keys used by stored 
files.
+        * @param random A cryptographicaly secure random source
+        * @param weakRandom A weak and cheap random source
         */
        public ArchiveManager(int maxHandlers, long maxCachedData, long 
maxArchiveSize, long maxArchivedFileSize, int maxCachedElements, RandomSource 
random, Random weakRandom, FilenameGenerator filenameGenerator) {
                maxArchiveHandlers = maxHandlers;
@@ -82,8 +83,8 @@
                storedData = new LRUHashtable();
                this.maxArchiveSize = maxArchiveSize;
                this.maxArchivedFileSize = maxArchivedFileSize;
-               this.random = random;
-               this.weakRandom = weakRandom;
+               this.strongPRNG = random;
+               this.weakPRNG = weakRandom;
                this.filenameGenerator = filenameGenerator;
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
        }
@@ -475,8 +476,8 @@
                TempFileBucket fb = new TempFileBucket(id, filenameGenerator);

                byte[] cipherKey = new byte[32];
-               random.nextBytes(cipherKey);
-               PaddedEphemerallyEncryptedBucket encryptedBucket = new 
PaddedEphemerallyEncryptedBucket(fb, 1024, weakRandom);
+               strongPRNG.nextBytes(cipherKey);
+               PaddedEphemerallyEncryptedBucket encryptedBucket = new 
PaddedEphemerallyEncryptedBucket(fb, 1024, strongPRNG, weakPRNG);
                return new TempStoreElement(myFile, fb, encryptedBucket);
        }


Modified: branches/saltedhashstore/freenet/src/freenet/client/FECCodec.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/client/FECCodec.java   
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/client/FECCodec.java   
2008-05-09 02:17:04 UTC (rev 19858)
@@ -14,6 +14,8 @@
 import freenet.node.PrioRunnable;
 import freenet.support.Executor;
 import freenet.support.Logger;
+import freenet.support.OOMHandler;
+import freenet.support.OOMHook;
 import freenet.support.api.Bucket;
 import freenet.support.api.BucketFactory;
 import freenet.support.io.BucketTools;
@@ -27,7 +29,7 @@
  * @author root
  *
  */
-public abstract class FECCodec {
+public abstract class FECCodec implements OOMHook {

        // REDFLAG: Optimal stripe size? Smaller => less memory usage, but more 
JNI overhead

@@ -41,6 +43,8 @@
                this.executor = executor;
                this.k = k;
                this.n = n;
+               
+               OOMHandler.addOOMHook(this);
        }

        /**
@@ -357,8 +361,8 @@
        private static int fecPoolCounter;

        private synchronized static int getMaxRunningFECThreads() {
-               long now = System.currentTimeMillis();
-               if(now - lastPolledMaxRunningFECThreads < 5*60*1000) return 
maxRunningFECThreads;
+               if (maxRunningFECThreads != -1)
+                       return maxRunningFECThreads;
                String osName = System.getProperty("os.name");
                if(osName.indexOf("Windows") == -1 && 
(osName.toLowerCase().indexOf("mac os x") > 0) || 
(!NativeThread.usingNativeCode())) {
                        // OS/X niceness is really weak, so we don't want any 
more background CPU load than necessary
@@ -383,11 +387,7 @@
                return maxRunningFECThreads;
        }

-       private static int maxRunningFECThreads;
-       private static int lastPolledMaxRunningFECThreads = -1;
-       static {
-               getMaxRunningFECThreads();
-       }
+       private static int maxRunningFECThreads = -1;

        /**
         * A private Thread started by {@link FECCodec}...
@@ -401,47 +401,50 @@
                        try {
                                while(true) {
                                        FECJob job = null;
-                                               // Get a job
-                                               synchronized(_awaitingJobs) {
-                                                       while 
(_awaitingJobs.isEmpty())
-                                                               
_awaitingJobs.wait(Integer.MAX_VALUE);
-                                                       job = (FECJob) 
_awaitingJobs.removeLast();
+                                       // Get a job
+                                       synchronized (_awaitingJobs) {
+                                               while (_awaitingJobs.isEmpty()) 
{
+                                                       
_awaitingJobs.wait(Integer.MAX_VALUE);
+                                                       if (runningFECThreads > 
getMaxRunningFECThreads())
+                                                               return;
                                                }
+                                               job = (FECJob) 
_awaitingJobs.removeLast();
+                                       }

-                                               // Encode it
-                                               try {
-                                                       if(job.isADecodingJob)
-                                                               
job.codec.realDecode(job.dataBlockStatus, job.checkBlockStatus, 
job.blockLength, job.bucketFactory);
-                                                       else {
-                                                               
job.codec.realEncode(job.dataBlocks, job.checkBlocks, job.blockLength, 
job.bucketFactory);
-                                                               // Update 
SplitFileBlocks from buckets if necessary
-                                                               
if((job.dataBlockStatus != null) || (job.checkBlockStatus != null)) {
-                                                                       for(int 
i = 0; i < job.dataBlocks.length; i++)
-                                                                               
job.dataBlockStatus[i].setData(job.dataBlocks[i]);
-                                                                       for(int 
i = 0; i < job.checkBlocks.length; i++)
-                                                                               
job.checkBlockStatus[i].setData(job.checkBlocks[i]);
-                                                               }
+                                       // Encode it
+                                       try {
+                                               if (job.isADecodingJob)
+                                                       
job.codec.realDecode(job.dataBlockStatus, job.checkBlockStatus, job.blockLength,
+                                                               
job.bucketFactory);
+                                               else {
+                                                       
job.codec.realEncode(job.dataBlocks, job.checkBlocks, job.blockLength, 
job.bucketFactory);
+                                                       // Update 
SplitFileBlocks from buckets if necessary
+                                                       if 
((job.dataBlockStatus != null) || (job.checkBlockStatus != null)) {
+                                                               for (int i = 0; 
i < job.dataBlocks.length; i++)
+                                                                       
job.dataBlockStatus[i].setData(job.dataBlocks[i]);
+                                                               for (int i = 0; 
i < job.checkBlocks.length; i++)
+                                                                       
job.checkBlockStatus[i].setData(job.checkBlocks[i]);
                                                        }
-                                               } catch(IOException e) {
-                                                       Logger.error(this, 
"BOH! ioe:" + e.getMessage());
                                                }
+                                       } catch (IOException e) {
+                                               Logger.error(this, "BOH! ioe:" 
+ e.getMessage());
+                                       }

-                                               // Call the callback
-                                               try {
-                                                       if(job.isADecodingJob)
-                                                               
job.callback.onDecodedSegment();
-                                                       else
-                                                               
job.callback.onEncodedSegment();
-
-                                               } catch(Throwable e) {
-                                                       Logger.error(this, "The 
callback failed!" + e.getMessage(), e);
-                                               }
+                                       // Call the callback
+                                       try {
+                                               if (job.isADecodingJob)
+                                                       
job.callback.onDecodedSegment();
+                                               else
+                                                       
job.callback.onEncodedSegment();
+                                       } catch (Throwable e) {
+                                               Logger.error(this, "The 
callback failed!" + e.getMessage(), e);
+                                       }
                                }
                        } catch (Throwable t) {
                                Logger.error(this, "Caught "+t+" in "+this, t);
                        }
                        finally {
-                               synchronized(FECCodec.class) {
+                               synchronized (_awaitingJobs) {
                                        runningFECThreads--;
                                }
                        }
@@ -452,6 +455,20 @@
                }
        }

+       public void handleLowMemory() throws Exception {
+               synchronized (_awaitingJobs) {
+                       maxRunningFECThreads = Math.min(1, maxRunningFECThreads 
- 1);
+                       _awaitingJobs.notify(); // not notifyAll()
+               }
+       }
+
+       public void handleOutOfMemory() throws Exception {
+               synchronized (_awaitingJobs) {
+                       maxRunningFECThreads = 1;
+                       _awaitingJobs.notifyAll();
+               }
+       }
+
        /**
         * An interface wich has to be implemented by FECJob submitters
         * 

Modified: 
branches/saltedhashstore/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/client/async/SimpleManifestPutter.java
 2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/client/async/SimpleManifestPutter.java
 2008-05-09 02:17:04 UTC (rev 19858)
@@ -698,7 +698,7 @@
                        HashMap hm = (HashMap) (target.get(before));
                        if(hm == null) {
                                hm = new HashMap();
-                               target.put(before, hm);
+                               target.put(before.intern(), hm);
                        }
                        add(e, after, hm);
                }

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java
        2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java
        2008-05-09 02:17:04 UTC (rev 19858)
@@ -337,6 +337,9 @@
                }
                HTMLNode bookmarksBox = 
content.addChild(pageMaker.getInfobox("infobox-normal", 
L10n.getString("BookmarkEditorToadlet.myBookmarksTitle")));
                
pageMaker.getContentNode(bookmarksBox).addChild(getBookmarksList());
+               
+               HTMLNode addDefaultBookmarksForm = ctx.addFormChild(content, 
"", "AddDefaultBookmarks");
+               addDefaultBookmarksForm.addChild("input", new String[]{"type", 
"name", "value"}, new String[]{"submit", "AddDefaultBookmarks", 
L10n.getString("BookmarkEditorToadlet.addDefaultBookmarks")});

                this.writeHTMLReply(ctx, 200, "OK", pageNode.generate());
        }

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConfigToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConfigToadlet.java    
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConfigToadlet.java    
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -168,7 +168,8 @@
                if(mode >= MODE_ADVANCED){
                        HTMLNode navigationBar = 
ctx.getPageMaker().getInfobox("navbar", l10n("configNavTitle"));
                        HTMLNode navigationContent = 
ctx.getPageMaker().getContentNode(navigationBar).addChild("ul");
-                       navigationContent.addChild("a", "href", 
TranslationToadlet.TOADLET_URL, l10n("contributeTranslation"));
+                       
if(!L10n.getSelectedLanguage().equals(L10n.FALLBACK_DEFAULT))
+                               navigationContent.addChild("a", "href", 
TranslationToadlet.TOADLET_URL, l10n("contributeTranslation"));
                        HTMLNode navigationTable = 
navigationContent.addChild("table", "class", "config_navigation");
                        HTMLNode navigationTableRow = 
navigationTable.addChild("tr");
                        HTMLNode nextTableCell = navigationTableRow;

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   2008-05-09 02:17:04 UTC (rev 19858)
@@ -832,10 +832,6 @@
                return L10n.getString("DarknetConnectionsToadlet."+string);
        }

-       private static String l10nStats(String string) {
-               return L10n.getString("StatisticsToadlet."+string);
-       }
-
        private String sortString(boolean isReversed, String type) {
                return (isReversed ? ("?sortBy="+type) : 
("?sortBy="+type+"&reversed"));
        }

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java 
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java 
2008-05-09 02:17:04 UTC (rev 19858)
@@ -498,6 +498,8 @@
                        return;
                }

+               short lowestQueuedPrio = RequestStarter.MINIMUM_PRIORITY_CLASS;
+               
                for(int i=0;i<reqs.length;i++) {
                        ClientRequest req = reqs[i];
                        if(req instanceof ClientGet) {
@@ -513,6 +515,9 @@
                                } else if(cg.hasFinished()) {
                                        failedDownload.add(cg);
                                } else {
+                                       short prio = cg.getPriority();
+                                       if(prio < lowestQueuedPrio)
+                                               lowestQueuedPrio = prio;
                                        uncompletedDownload.add(cg);
                                }
                        } else if(req instanceof ClientPut) {
@@ -522,6 +527,9 @@
                                } else if(cp.hasFinished()) {
                                        failedUpload.add(cp);
                                } else {
+                                       short prio = req.getPriority();
+                                       if(prio < lowestQueuedPrio)
+                                               lowestQueuedPrio = prio;
                                        uncompletedUpload.add(cp);
                                }
                        } else if(req instanceof ClientPutDir) {
@@ -531,6 +539,9 @@
                                } else if(cp.hasFinished()) {
                                        failedDirUpload.add(cp);
                                } else {
+                                       short prio = req.getPriority();
+                                       if(prio < lowestQueuedPrio)
+                                               lowestQueuedPrio = prio;
                                        uncompletedDirUpload.add(cp);
                                }
                        }
@@ -661,20 +672,21 @@
                                L10n.getString("QueueToadlet.priority6")
                };

+               boolean advancedModeEnabled = core.isAdvancedModeEnabled();
+
                HTMLNode legendBox = 
contentNode.addChild(pageMaker.getInfobox("legend", 
L10n.getString("QueueToadlet.legend")));
                HTMLNode legendContent = pageMaker.getContentNode(legendBox);
                HTMLNode legendTable = legendContent.addChild("table", "class", 
"queue");
                HTMLNode legendRow = legendTable.addChild("tr");
                for(int i=0; i<7; i++){
-                       legendRow.addChild("td", "class", "priority" + i, 
priorityClasses[i]);
+                       if(i > RequestStarter.INTERACTIVE_PRIORITY_CLASS || 
advancedModeEnabled || i <= lowestQueuedPrio)
+                               legendRow.addChild("td", "class", "priority" + 
i, priorityClasses[i]);
                }

                if (reqs.length > 1 && 
SimpleToadletServer.isPanicButtonToBeShown) {
                        contentNode.addChild(createPanicBox(pageMaker, ctx));
                }

-               boolean advancedModeEnabled = core.isAdvancedModeEnabled();
-
                if (!completedDownloadToTemp.isEmpty()) {
                        contentNode.addChild("a", "id", 
"completedDownloadToTemp");
                        HTMLNode completedDownloadsTempInfobox = 
contentNode.addChild(pageMaker.getInfobox("completed_requests", 
L10n.getString("QueueToadlet.completedDinTempDirectory", new String[]{ "size" 
}, new String[]{ String.valueOf(completedDownloadToTemp.size()) })));
@@ -759,7 +771,7 @@
                        if (advancedModeEnabled) {
                                
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedDownload, new int[] { LIST_IDENTIFIER, LIST_PRIORITY, LIST_SIZE, 
LIST_MIME_TYPE, LIST_PROGRESS, LIST_PERSISTENCE, LIST_FILENAME, LIST_KEY }, 
priorityClasses, advancedModeEnabled, false));
                        } else {
-                               
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedDownload, new int[] { LIST_FILENAME, LIST_SIZE, LIST_MIME_TYPE, 
LIST_PROGRESS, LIST_PERSISTENCE, LIST_KEY }, priorityClasses, 
advancedModeEnabled, false));
+                               
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedDownload, new int[] { LIST_FILENAME, LIST_SIZE, LIST_MIME_TYPE, 
LIST_PROGRESS, LIST_PRIORITY, LIST_KEY, LIST_PERSISTENCE }, priorityClasses, 
advancedModeEnabled, false));
                        }
                }

@@ -770,7 +782,7 @@
                        if (advancedModeEnabled) {
                                
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedUpload, new int[] { LIST_IDENTIFIER, LIST_PRIORITY, LIST_SIZE, 
LIST_MIME_TYPE, LIST_PROGRESS, LIST_PERSISTENCE, LIST_FILENAME, LIST_KEY }, 
priorityClasses, advancedModeEnabled, true));
                        } else {
-                               
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedUpload, new int[] { LIST_FILENAME, LIST_SIZE, LIST_MIME_TYPE, 
LIST_PROGRESS, LIST_PERSISTENCE, LIST_KEY }, priorityClasses, 
advancedModeEnabled, true));
+                               
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedUpload, new int[] { LIST_FILENAME, LIST_SIZE, LIST_MIME_TYPE, 
LIST_PROGRESS, LIST_PRIORITY, LIST_KEY, LIST_PRIORITY, LIST_PERSISTENCE }, 
priorityClasses, advancedModeEnabled, true));
                        }
                }

@@ -781,7 +793,7 @@
                        if (advancedModeEnabled) {
                                
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedDirUpload, new int[] { LIST_IDENTIFIER, LIST_FILES, LIST_PRIORITY, 
LIST_TOTAL_SIZE, LIST_PROGRESS, LIST_PERSISTENCE, LIST_KEY }, priorityClasses, 
advancedModeEnabled, true));
                        } else {
-                               
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedDirUpload, new int[] { LIST_FILES, LIST_TOTAL_SIZE, LIST_PROGRESS, 
LIST_PERSISTENCE, LIST_KEY }, priorityClasses, advancedModeEnabled, true));
+                               
uncompletedContent.addChild(createRequestTable(pageMaker, ctx, 
uncompletedDirUpload, new int[] { LIST_FILES, LIST_TOTAL_SIZE, LIST_PROGRESS, 
LIST_PRIORITY, LIST_KEY, LIST_PERSISTENCE }, priorityClasses, 
advancedModeEnabled, true));
                        }
                }

@@ -860,13 +872,14 @@
                return filenameCell;
        }

-       private HTMLNode createPriorityCell(PageMaker pageMaker, String 
identifier, short priorityClass, ToadletContext ctx, String[] priorityClasses) {
+       private HTMLNode createPriorityCell(PageMaker pageMaker, String 
identifier, short priorityClass, ToadletContext ctx, String[] priorityClasses, 
boolean advancedModeEnabled) {

                HTMLNode priorityCell = new HTMLNode("td", "class", 
"request-priority nowrap");
                HTMLNode priorityForm = ctx.addFormChild(priorityCell, 
"/queue/", "queueChangePriorityCell-" + identifier.hashCode());
                priorityForm.addChild("input", new String[] { "type", "name", 
"value" }, new String[] { "hidden", "identifier", identifier });
                HTMLNode prioritySelect = priorityForm.addChild("select", 
"name", "priority");
                for (int p = 0; p < RequestStarter.NUMBER_OF_PRIORITY_CLASSES; 
p++) {
+                       if(p <= RequestStarter.INTERACTIVE_PRIORITY_CLASS && 
!advancedModeEnabled) continue;
                        if (p == priorityClass) {
                                prioritySelect.addChild("option", new String[] 
{ "value", "selected" }, new String[] { String.valueOf(p), "selected" }, 
priorityClasses[p]);
                        } else {
@@ -1071,7 +1084,7 @@
                                                
requestRow.addChild(createFilenameCell(((ClientPut) 
clientRequest).getOrigFilename()));
                                        }
                                } else if (column == LIST_PRIORITY) {
-                                       
requestRow.addChild(createPriorityCell(pageMaker, 
clientRequest.getIdentifier(), clientRequest.getPriority(), ctx, 
priorityClasses));
+                                       
requestRow.addChild(createPriorityCell(pageMaker, 
clientRequest.getIdentifier(), clientRequest.getPriority(), ctx, 
priorityClasses, advancedModeEnabled));
                                } else if (column == LIST_FILES) {
                                        
requestRow.addChild(createNumberCell(((ClientPutDir) 
clientRequest).getNumberOfFiles()));
                                } else if (column == LIST_TOTAL_SIZE) {

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/WelcomeToadlet.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/WelcomeToadlet.java   
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/WelcomeToadlet.java   
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -564,7 +564,7 @@

         HTMLNode bookmarkBoxContent = bookmarkBox.addChild("div", "class", 
"infobox-content");
         HTMLNode bookmarksList = bookmarkBoxContent.addChild("ul", "id", 
"bookmarks");
-        addCategoryToList(BookmarkManager.MAIN_CATEGORY, bookmarksList, 
useragent != null && useragent.indexOf("Safari") >= 0);
+        addCategoryToList(BookmarkManager.MAIN_CATEGORY, bookmarksList, 
useragent != null && useragent.toLowerCase().indexOf("khtml") >= 0);

         // Fetch-a-key box
         HTMLNode fetchKeyBox = 
contentNode.addChild(ctx.getPageMaker().getInfobox("infobox-normal", 
l10n("fetchKeyLabel")));

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/bookmark/BookmarkItem.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/bookmark/BookmarkItem.java
        2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/bookmark/BookmarkItem.java
        2008-05-09 02:17:04 UTC (rev 19858)
@@ -210,11 +210,13 @@
             if (b.hasAnActivelink != hasAnActivelink) {
                 return false;
             }
-           if(!(b.desc == null && desc == null)) {
+            if (b.desc == desc)
+                               return true;
+                       if (b.desc == null || desc == null)
+                               return false;
                if(!b.desc.equals(desc)) {
                        return false;
                }
-            }
             return true;
         } else {
             return false;

Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
  2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
  2008-05-09 02:17:04 UTC (rev 19858)
@@ -3,34 +3,30 @@
 Bookmark=0
 BookmarkCategory0.Name=Indexes
 BookmarkCategory0.Content.BookmarkCategory=0
-BookmarkCategory0.Content.Bookmark=5
+BookmarkCategory0.Content.Bookmark=4
 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/18/
+BookmarkCategory0.Content.Bookmark0.URI=USK at 
0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/20/
 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.Bookmark2.Name=Another Index
-BookmarkCategory0.Content.Bookmark2.Description=Comprehensive categorised 
index of freesites and Thaw indexes; links to everything
+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.URI=USK at 
zQyF2O1o8B4y40w7Twz8y2I9haW3d2DTlxjTHPu7zc8,h2mhQNNE9aQvF~2yKAmKV1uorr7141-QOroBf5hrlbw,AQACAAE/AnotherIndex/58/
-BookmarkCategory0.Content.Bookmark1.Name=Freenet Activelink Index (warning: it 
will take a long time for all the images to load!)
+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/50/
+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=A graphical freenet index 
(this will take a long time to load as it preloads the sites; contains no porn)
-BookmarkCategory0.Content.Bookmark1.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/50/
-BookmarkCategory0.Content.Bookmark4.Name=Freenet Activelink Index Text Version 
(non-graphical version of FAI)
-BookmarkCategory0.Content.Bookmark4.hasAnActivelink=true
-BookmarkCategory0.Content.Bookmark4.Description=Text version of the Activelink 
Index
-BookmarkCategory0.Content.Bookmark4.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/14/
+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/14/
 BookmarkCategory1.Name=Freenet devel's flogs
 BookmarkCategory1.Content.BookmarkCategory=0
 BookmarkCategory1.Content.Bookmark=5
 BookmarkCategory1.Content.Bookmark4.Name=Wavey
 BookmarkCategory1.Content.Bookmark4.Description=Wavey's flog
 BookmarkCategory1.Content.Bookmark4.hasAnActivelink=true
-BookmarkCategory1.Content.Bookmark4.URI=USK at 
yQ6xZyw6KlKgEBygbncwm0kyyH0QOtxt35V7CFngUKc,c-4iY3l2nmkumKcN4qB1CLmx1tszv8Rqnv184Ys9fgc,AQACAAE/Wavey%27s%20Freenet%20Development%20Flog/14/
+BookmarkCategory1.Content.Bookmark4.URI=USK at 
yQ6xZyw6KlKgEBygbncwm0kyyH0QOtxt35V7CFngUKc,c-4iY3l2nmkumKcN4qB1CLmx1tszv8Rqnv184Ys9fgc,AQACAAE/Wavey%27s%20Freenet%20Development%20Flog/18/
 BookmarkCategory1.Content.Bookmark3.Name=Zothar
 BookmarkCategory1.Content.Bookmark3.Description=Zothar's flog
 BookmarkCategory1.Content.Bookmark3.hasAnActivelink=true
@@ -49,7 +45,7 @@
 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=4
+BookmarkCategory2.Content.Bookmark=5
 BookmarkCategory2.Content.Bookmark0.Name=Frost
 BookmarkCategory2.Content.Bookmark0.Description=The official freesite of 
Frost, a message board system for Freenet
 BookmarkCategory2.Content.Bookmark0.hasAnActivelink=true
@@ -57,13 +53,17 @@
 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.Bookmark1.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark1.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/46/
-BookmarkCategory2.Content.Bookmark2.Name=Publish!
-BookmarkCategory2.Content.Bookmark2.Description=Simple guide to publishing web 
sites to Freenet
+BookmarkCategory2.Content.Bookmark1.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/47/
+BookmarkCategory2.Content.Bookmark2.Name=Freemail
+BookmarkCategory2.Content.Bookmark2.Description=The official site for Freemail 
- email over Freenet
 BookmarkCategory2.Content.Bookmark2.hasAnActivelink=true
-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/3/
-BookmarkCategory2.Content.Bookmark3.Name=Freesite HOWTO
-BookmarkCategory2.Content.Bookmark3.Description=A more detailed explanation of 
publishing freesites
+BookmarkCategory2.Content.Bookmark2.URI=USK at 
xOg49GNltumTJJzj0fVzuGDpo4hJUsy2UsGQkjE7NY4,EtUH5b9gGpp8JiY-Bm-Y9kHX1q-yDjD-9oRzXn21O9k,AQACAAE/freemail/2/
+BookmarkCategory2.Content.Bookmark3.Name=Publish!
+BookmarkCategory2.Content.Bookmark3.Description=Simple guide to publishing web 
sites to Freenet
 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.hasAnActivelink=true
 End

Modified: branches/saltedhashstore/freenet/src/freenet/crypt/CryptoKey.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/crypt/CryptoKey.java   
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/crypt/CryptoKey.java   
2008-05-09 02:17:04 UTC (rev 19858)
@@ -11,6 +11,7 @@
 import java.math.BigInteger;

 import freenet.support.HexUtil;
+import freenet.support.Logger;

 public abstract class CryptoKey implements CryptoElement, Serializable {

@@ -33,6 +34,7 @@
                                throw (CryptFormatException) e;
                        if (e instanceof IOException)
                                throw (IOException) e;
+                       Logger.error(CryptoKey.class, "Unknown exception while 
reading CryptoKey", e);
                        return null;
                }
        }

Modified: 
branches/saltedhashstore/freenet/src/freenet/io/comm/MessageFilter.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/io/comm/MessageFilter.java     
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/io/comm/MessageFilter.java     
2008-05-09 02:17:04 UTC (rev 19858)
@@ -37,7 +37,7 @@
     private PeerContext _droppedConnection;
        private MessageType _type;
     private HashMap _fields = new HashMap();
-    private Vector _fieldList = new Vector(1,1);
+    private List _fieldList = new LinkedList();
     private PeerContext _source;
     private long _timeout;
     /** If true, timeouts are relative to the start of waiting, if false, they 
are relative to
@@ -177,8 +177,9 @@
                        return false;
                }
                synchronized (_fields) {
-                       for (int i = 0; i < _fieldList.size(); i++) {
-                               String fieldName = (String) _fieldList.get(i);
+                       ListIterator it = _fieldList.listIterator();
+                       while (it.hasNext()) {
+                               String fieldName = (String) it.next();
                                if (!m.isSet(fieldName)) {
                                        return false;
                                }

Modified: branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java      
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java      
2008-05-09 02:17:04 UTC (rev 19858)
@@ -53,11 +53,13 @@
        public Peer(DataInputStream dis) throws IOException {
                addr = new FreenetInetAddress(dis);
                _port = dis.readInt();
+               if(_port > 65535 || _port < 0) throw new IOException("bogus 
port");
        }

        public Peer(DataInputStream dis, boolean checkHostnameOrIPSyntax) 
throws HostnameSyntaxException, IOException {
                addr = new FreenetInetAddress(dis, checkHostnameOrIPSyntax);
                _port = dis.readInt();
+               if(_port > 65535 || _port < 0) throw new IOException("bogus 
port");
        }

        /**
@@ -68,6 +70,7 @@
        public Peer(InetAddress address, int port) {
                addr = new FreenetInetAddress(address);
                _port = port;
+               if(_port > 65535 || _port < 0) throw new 
IllegalArgumentException("bogus port");
        }

        /**
@@ -91,6 +94,7 @@
         String strport = physical.substring(offset+1);
         try {
             _port = Integer.parseInt(strport);
+            if(_port < 0 || _port > 65535) throw new 
PeerParseException("Invalid port "+_port);
         } catch (NumberFormatException e) {
             throw new PeerParseException(e);
         }
@@ -121,6 +125,7 @@
         String strport = physical.substring(offset+1);
         try {
             _port = Integer.parseInt(strport);
+            if(_port < 0 || _port > 65535) throw new 
PeerParseException("Invalid port "+_port);
         } catch (NumberFormatException e) {
             throw new PeerParseException(e);
         }
@@ -130,6 +135,7 @@
        this.addr = addr;
        if(addr == null) throw new NullPointerException();
        this._port = port;
+               if(_port > 65535 || _port < 0) throw new 
IllegalArgumentException("bogus port");
        }

        public boolean isNull() {

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties    
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties    
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -85,6 +85,10 @@
 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
@@ -1005,7 +1009,7 @@
 SSL.versionLong=SSL-Version: SSLv3 oder TLSv1 (Standard: SSLv3)
 ShortOption.parseError=Kann den Wert nicht als String-Array 
(Zeichenfolgen-Feld) erkennen: ${error}
 SimpleToadletServer.advancedMode=Erweiterten Modus aktivieren?
-SimpleToadletServer.advancedModeLong=Aktiviert die Anzeige von erweiterten 
Einstellungen und Informationen in der Web-Oberfl?che. Diese Einstellung sollte 
in den meisten F?llen auf "nein" stehen.
+SimpleToadletServer.advancedModeLong=Aktiviert die standardm??ige Anzeige von 
erweiterten Einstellungen und Informationen in der Web-Oberfl?che. Diese 
Einstellung sollte in den meisten F?llen auf "nein" stehen.
 SimpleToadletServer.allowedFullAccess=Hosts die vollen Zugriff auf FProxy 
haben (Warnung lesen)
 SimpleToadletServer.allowedFullAccessLong=Hosts (Computer) die vollen Zugriff 
(z.B. Konfiguration ?ndern, Neustarten usw.) auf den Knoten haben. WARNUNG: 
Seien Sie vorsichtig wem Sie vollen FProxy-Zugriff geben!
 SimpleToadletServer.allowedHosts=Hostnamen oder IP-Adressen denen es erlaubt 
ist sich mit FProxy zu verbinden.

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties    
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties    
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -85,6 +85,10 @@
 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
@@ -97,7 +101,7 @@
 ConfigToadlet.toadletsymlinker=toadletsymlinker
 ConfigToadlet.true=oui
 ConfigToadlet.wrapper=wrapper
-ConfigToadlet.wrapperSettingsTitle=Param?tres du wrapper
+ConfigToadlet.wrapperSettingsTitle=Param?tres du Wrapper
 ConfigToadlet.node.load=noeud.charge
 ConfigToadlet.node.opennet=noeud.opennet
 ConfigToadlet.node.scheduler=noeud.ordonnanceur
@@ -482,11 +486,20 @@
 IPDetectorPluginManager.direct=Il semble que vous soyez connect? directement ? 
internet. F?licitations, vous devriez pouvoir vous connecter ? n'importe quel 
autre noeud Freenet.
 IPDetectorPluginManager.directTitle=Connexion directe ? internet d?tect?e
 IPDetectorPluginManager.forwardPort=Il semble que votre noeud soit derri?re un 
NAT (voir la page Raccordemement r?seau pour plus de d?tails). Vous devriez 
transf?rer le ports UDP (pas TCP) ${port} si possible, pour am?liorer vos 
connexions. Vous l'avez peut-?tre d?j? fait ; il faut du temps ? Freenet pour 
d?tecter le transfert. Consultez ${link}ceci${/link} pour plus de d?tails.
+IPDetectorPluginManager.forwardPortMaybeForwarded=Il semble que votre noeud 
soit derri?re un NAT (plus de d?tails sur la page Raccordement R?seau). Vous 
devriez transf?rer le port UDP (pas TCP) ${port} si vous le pouvez. Vous l'avez 
peut-?tre d?j? fait : il faut longtemps ? Freenet pour le d?tecter. Consultez 
${link}cette page${/link} pour plus de d?tails.
+IPDetectorPluginManager.forwardPortNotForwarded=Il semble que votre noeud soit 
derri?re un NAT (plus de d?tails sur la page Raccordement R?seau). Vous devriez 
transf?rer le port UDP (pas TCP) ${port} si vous le pouvez. Il semble que ce 
port ne soit pas transf?r?, bien qu'il soit difficile pour Freenet de le 
savoir. Consultez ${link}cette page${/link} pour plus de d?tails.
 IPDetectorPluginManager.forwardPortShort=Veuillez transf?rer le port UDP 
${port}.
+IPDetectorPluginManager.forwardPortShortMaybeForwarded=Veuillez transf?rer le 
port UDP ${port} (vous l'avez peut-?tre d?j? fait).
+IPDetectorPluginManager.forwardPortShortNotForwarded=Veuillez transf?rer le 
port UDP ${port} (il semble que ce ne soit pas fait).
 IPDetectorPluginManager.forwardTwoPorts=Il semble que votre noeud soit 
derri?re un NAT (voir la page Raccordemement r?seau pour plus de d?tails). Vous 
devriez transf?rer les ports UDP (pas TCP) ${port1} et ${port2} si possible, 
pour am?liorer vos connexions. Vous l'avez peut-?tre d?j? fait ; il faut du 
temps ? Freenet pour d?tecter le transfert. Consultez ${link}ceci${/link} pour 
plus de d?tails.
+IPDetectorPluginManager.forwardTwoPortsMaybeForwarded=Il semble que votre 
noeud soit derri?re un NAT (plus de d?tails sur la page Raccordement R?seau). 
Vous devriez transf?rer les ports UDP (pas TCP) ${port1} et ${port2} si vous le 
pouvez. Vous l'avez peut-?tre d?j? fait ; il faut longtemps ? Freenet pour le 
d?tecter. Consultez ${link}cette page${/link} pour plus de d?tails.
+IPDetectorPluginManager.forwardTwoPortsNotForwarded=Il semble que votre noeud 
soit derri?re un NAT (plus de d?tails sur la page Raccordement R?seau). Vous 
devriez transf?rer les ports UDP (pas TCP) ${port1} et ${port2} si vous le 
pouvez. Il semble que ces ports ne soient pas transf?r?s, bien qu'il soit 
difficile pour Freenet de le savoir. Consultez ${link}cette page${/link} pour 
plus de d?tails.
 IPDetectorPluginManager.forwardTwoPortsShort=Veuillez transf?rer les ports UDP 
${port1} et ${port2}.
+IPDetectorPluginManager.forwardTwoPortsShortMaybeForwarded=Veuillez transf?rer 
les ports UDP ${port1} et ${port2} (vous l'avez peut-?tre d?j? fait).
+IPDetectorPluginManager.forwardTwoPortsShortNotForwarded=Veuillez transf?rer 
les ports UDP ${port1} et ${port2} (il semble qu'ils ne le soient pas).
 IPDetectorPluginManager.fullCone=Is semble que vous soyer derri?re un routeur 
NAT "full cone". F?licitations, vous devriez ?tre capable de vous connecter ? 
n'importe quel autre noeud.
 IPDetectorPluginManager.fullConeTitle=Routeur NAT (full cone) d?tect?
+IPDetectorPluginManager.maybeAlreadyForwarded=C'est peut-?tre d?j? fait (c'est 
difficile pour Freenet de le savoir ? coup s?r).
 IPDetectorPluginManager.noConnectivity=Il semble que votre connexion internet 
ne supporte pas l'UDP. A moins que la d?tection se trompe, il n'est pas 
possible de faire fonctionner Freenet sur cet ordinateur pour le moment.
 IPDetectorPluginManager.noConnectivityTitle=Pas de connexion UDP
 IPDetectorPluginManager.noConnectivityshort=Grave probl?me de connexion : Pas 
de connexion UDP, Freenet ne peut pas fonctionnez !
@@ -932,10 +945,10 @@
 QueueToadlet.identifier=Identifiant
 QueueToadlet.insertAs=Ins?rer comme :
 QueueToadlet.insertFile=Ins?rer un fichier
-QueueToadlet.insertFileBrowseLabel=Parcourir
+QueueToadlet.insertFileBrowseLabel=Parcourir les fichiers sur le disque
 QueueToadlet.insertFileCompressLabel=Compresser
 QueueToadlet.insertFileInsertFileLabel=Ins?rer le fichier
-QueueToadlet.insertFileLabel=Fichier
+QueueToadlet.insertFileLabel=Envoyer un fichier ? partir du navigateur (LENT)
 QueueToadlet.insertFileResetForm=Remettre ? z?ro
 QueueToadlet.key=Cl?
 QueueToadlet.legend=L?gende
@@ -1002,7 +1015,7 @@
 SSL.versionLong=Version de SSL, SSLv3 ou TLSv1 (SSLv3 par d?faut)
 ShortOption.parseError=Cette valeur n'est pas un entier sur 16 bits : ${val}
 SimpleToadletServer.advancedMode=Activer le mode avanc? ?
-SimpleToadletServer.advancedModeLong=Active l'affichage des options et des 
informations avanc?es dans l'interface. Ce param?tre devrait ?tre d?sactiv? 
dans la plupart des cas.
+SimpleToadletServer.advancedModeLong=Active l'affichage des options et des 
informations avanc?es dans l'interface web par d?faut. Ce param?tre devrait 
?tre d?sactiv? dans la plupart des cas.
 SimpleToadletServer.allowedFullAccess=Machines ayant un acc?s complet ? FProxy 
(lire l'avertissement)
 SimpleToadletServer.allowedFullAccessLong=Machines ayant un acc?s complet 
(configuration, red?marrage, etc.) au noeud. ATTENTION : Faites bien attention 
? qui vous donnez un acc?s FProxy complet !
 SimpleToadletServer.allowedHosts=Noms d'h?tes et adresses IP autoris?es ? se 
connecter ? FProxy.
@@ -1011,8 +1024,8 @@
 SimpleToadletServer.bindToLong=Adresse IP o? ?couter
 SimpleToadletServer.cannotChangePortOnTheFly=Impossible de changer le port 
FProxy ? la vol?e
 SimpleToadletServer.couldNotChangeBindTo=Impossible de changer l'adresse 
d'?coute de FProxy : ${error}.
-SimpleToadletServer.cssName=Nom du CSS
-SimpleToadletServer.cssNameLong=Nom de la feuille de style que FProxy doit 
utiliser
+SimpleToadletServer.cssName=Th?me de l'interface web
+SimpleToadletServer.cssNameLong=Choisissez un th?me pour l'interface web de 
Freenet
 SimpleToadletServer.cssOverride=Utiliser un CSS personnalis? (ATTENTION !)
 SimpleToadletServer.cssOverrideCantRead=Le fichier CSS personnalis? est 
introuvable : ${filename}
 SimpleToadletServer.cssOverrideLong=Ce param?tre vous permet d'utiliser un CSS 
personnalis?. ATTENTION : les CSS peuvent ?tre dangereux et ne sont pas filtr?s 
! Utilisez-le ? vos risques et p?rils. (vous devriez contacter devl at 
freenetproject pour qu'il soit inclus dans la distribution principale ;) )

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties    
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties    
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -4,7 +4,7 @@
 Announcer.announceAlertTitle=Announce Nodo
 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.announceDisabledTooOldShort=Il nodo ha tentato di connettersi alla 
rete ma la tua versione di Freenet ? obsoleta. Dovresti aggiornarla!
+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.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.
@@ -44,23 +44,23 @@
 BookmarkEditorToadlet.myBookmarksTitle=I Miei Segnalibri
 BookmarkEditorToadlet.nameLabel=Nome :
 BookmarkEditorToadlet.paste=Incolla
-BookmarkEditorToadlet.pasteOrCancel=Clicka su un'icona 'incolla' o cancella.
+BookmarkEditorToadlet.pasteOrCancel=Clicca su un'icona 'incolla' o cancella.
 BookmarkEditorToadlet.pasteTitle=Taglia/Incolla
 BookmarkEditorToadlet.save=Salva
 BookmarkEditorToadlet.title=Modifica Preferiti
 BookmarkEditorToadlet.urlDecodeError=Errore nella decodifica della URL
 BookmarkItem.bookmarkUpdated=Il sito ${name} ? stato aggiornato all'edizione 
${edition}.
-BookmarkItem.bookmarkUpdatedShort=Freesite ${name} aggiornato. 
+BookmarkItem.bookmarkUpdatedShort=Freesite aggiornato: ${name}
 BookmarkItem.bookmarkUpdatedTitle=${name}: link aggiornato
 BookmarkItem.bookmarkUpdatedWithLink=Il Sito ${link}${name}${/link} ? stato 
aggiornato all'edizione ${edition}.
 BookmarkItem.deleteBookmarkUpdateNotification=Elimina notifica
 BookmarkItem.unnamedBookmark=Segnalibro Senza Nome
 BookmarkManager.list=Segnalibri
 BookmarkManager.listLong=Lista dei freesite preferiti
-BookmarkManager.malformedBookmark=Segnalibro Malformato
+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=Su questo nodo sta girando una versione 
talmente vecchia di Freenet per cui non ? possible connettersi ai propri peers. 
Aggiornare per favore!
+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.tooOldTitle=Versione obsoleta
 CSSTokenizerFilter.deletedDisallowedString=Stringa non permessa eliminata
 CSSTokenizerFilter.deletedUnmatchedChar=Ignorato char non corrispondente:
@@ -68,8 +68,8 @@
 CSSTokenizerFilter.deletedUnofficialIdentWithURL=Eliminata ident ufficiosa con 
url
 CSSTokenizerFilter.invalidURLContents=Contenuto della url() non valido
 CSSTokenizerFilter.supplementalCharsNotSupported=CARATTERI UCS-4 OLTRE 0xFFFF 
NON SUPPORTATI!
-CSSTokenizerFilter.unknownAtIdentifierLabel=Sconosciuto @identifier:
-ClockProblemDetectedUserAlert.shortText=L'orologio del computer non ? 
sincronizzato, quindi Freenet non pu? connettersi.
+CSSTokenizerFilter.unknownAtIdentifierLabel=@identifier sconosciuto:
+ClockProblemDetectedUserAlert.shortText=Freenet non pu? connettersi perch? 
l'orologio del computer non ? sincronizzato.
 ClockProblemDetectedUserAlert.text=Freenet ha rilevato che l'orologio di 
sistema (ora e data) non ? regolato correttamente. Il nodo non potr? funzionare 
correttamente finch? non sar? stato riavviato dopo aver regolato l'orologio.
 ClockProblemDetectedUserAlert.title=L'orologio del computer non ? regolato 
correttamente.
 ConfigToadlet.appliedFailureExceptions=Le modifiche alla configurazione sono 
state applicate con le seguenti eccezioni:
@@ -87,6 +87,10 @@
 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
@@ -117,11 +121,11 @@
 ConnectionsToadlet.nodeStatus.CONNECTION ERROR=ERRORE DI CONNESSIONE
 ConnectionsToadlet.nodeStatus.DISABLED=DISABILITATO
 ConnectionsToadlet.nodeStatus.DISCONNECTED=DISCONNESSO
-ConnectionsToadlet.nodeStatus.DISCONNECTING=IN DISCONNESSIONE
+ConnectionsToadlet.nodeStatus.DISCONNECTING=DISCONNESSIONE IN CORSO
 ConnectionsToadlet.nodeStatus.LISTEN ONLY=SOLO ASCOLTO
 ConnectionsToadlet.nodeStatus.LISTENING=IN ASCOLTO
 ConnectionsToadlet.nodeStatus.NEVER CONNECTED=MAI CONNESSO
-ConnectionsToadlet.nodeStatus.ROUTING DISABLED=NO INSTRADAMENTO TRAFFICO
+ConnectionsToadlet.nodeStatus.ROUTING DISABLED=NON STA INSTRADANDO TRAFFICO
 ConnectionsToadlet.nodeStatus.TOO NEW=TROPPO RECENTE
 ConnectionsToadlet.nodeStatus.TOO OLD=OBSOLETO
 ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=STATUS NON DETERMINATO
@@ -164,7 +168,7 @@
 DarknetConnectionsToadlet.add=Aggiungi
 DarknetConnectionsToadlet.addPeerTitle=Aggiungi un peer
 DarknetConnectionsToadlet.alreadyInReferences=Questa referenza ? gi? in lista.
-DarknetConnectionsToadlet.backedOff=Connesso ma respinto: Siamo connessi a 
questi peer ma siamo da essi respinti, quindi non li stiamo utilizzando per 
l'instradamento delle richieste
+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
 DarknetConnectionsToadlet.burstingShort=Bursting
@@ -175,7 +179,7 @@
 DarknetConnectionsToadlet.cantParseTryAgain=Non ? stato possibile interpretare 
it testo 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.clockProblemShort=Problema relativo all' orologio
+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.confirmRemoveNodeTitle=Conferma
 DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=Rimozione Nodo
@@ -232,8 +236,8 @@
 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.routingDisabled=No instradamento traffico (la 
connessione tra nodo locale e remoto ? attiva ma uno dei due rifiuta di 
instradare traffico)
-DarknetConnectionsToadlet.routingDisabledShort=No instradamento traffico
+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.seedClients=Nodi per i quali il nodo locale sta 
facendo da seednode.
 DarknetConnectionsToadlet.seedClientsShort=Seeding per
 DarknetConnectionsToadlet.seedServers=Nodi attualmente usati come seednode.
@@ -257,7 +261,7 @@
 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.extTooOldShort=Il file freenet-ext.jar ? vecchio. Per 
favore aggiornalo.
+ExtOldAgeUserAlert.extTooOldShort=Il file freenet-ext.jar ? obsoleto. Si prega 
di aggiornarlo.
 ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext troppo vecchio
 FProxyToadlet.abortToHomepage=Interrompi e ritorna alla homepage di FProxy
 FProxyToadlet.alerts=Messaggi di stato dettagliati
@@ -300,7 +304,7 @@
 FProxyToadlet.openForce=${link}Clicka qui${/link} per aprire il file come 
${mime} (leggi l'avvertenza sopra!).
 FProxyToadlet.openForceDisk=${link}Clicka qui${/link} per forzare il browser a 
scaricare il file su disco.
 FProxyToadlet.openPossRSSAsForceDisk=${link}Clicka qui${/link} per scaricare 
il file su disco (${bold}possibile pericolo${/bold} se si sta usando Firefox 
2.0.0.0; il problema dovrebbe essere stato risolto in 2.0.0.1
-FProxyToadlet.openPossRSSAsPlainText=${link}Clicka qui${/link} per aprire il 
file come testo 'liscio (plain text) (ci? ${bold}pu? rappresentare un 
pericolo${/bold} se si sta usando IE7 o FF2).
+FProxyToadlet.openPossRSSAsPlainText=${link}Clicka qui${/link} per aprire il 
file come testo 'liscio' (plain text) (ci? ${bold}pu? rappresentare un 
pericolo${/bold} se si sta usando IE7 o FF2).
 FProxyToadlet.openPossRSSForceDisk=${link}Clicca qui${/link} per cercare di 
costringere il browser a scaricare il file su disco (${bold}Pu? essere 
pericoloso se si sta usando Firefox 2.0.0${/bold} ; il problema dovrebbe essere 
risolto in 2.0.1).
 FProxyToadlet.openRSSAsRSS=${link}Clicca qui${/link} per aprire il file come 
RSS (ci? ${bold}rappresenta un pericolo${/bold} se l'autore del sito ? mal 
intenzionato, perch? il filtraggio di RSS in Freenet non ? ancora stato 
implementato).
 FProxyToadlet.openRSSForce=${link}Clicca qui${/link} per aprire il file come 
${mime} (ci? ${bold}pu? costituire un pericolo${/bold} se si usa IE7 o FF2).
@@ -326,7 +330,7 @@
 FProxyToadlet.welcomeTitle=Home
 FcpServer.allowedHosts=Host abilitati (Leggere l'avvertenza)
 FcpServer.allowedHostsFullAccess=Host ai quali ? consentito accesso pieno
-FcpServer.allowedHostsFullAccessLong=Gli indirizzi IP ai quali e' consentito 
pienamente l'accesso al nodo. I client su questi IP possono riavviare il nodo, 
riconfigurarlo ecc. Attenzione: a *tutti* I client e' consentito di fare I/O 
diretto sul disco
+FcpServer.allowedHostsFullAccessLong=Indirizzi IP ai quali e' consentito pieno 
accesso al nodo. I client su questi IP possono riavviare il nodo, 
riconfigurarlo ecc. Attenzione: a *tutti* I client e' consentito di fare I/O 
diretto sul disco
 FcpServer.allowedHostsLong=Indirizzi IP ai quali ? consentito connettersi al 
server FCP. Pu? essere una lista di di IP singoli separati da virgole e 
indirizzi IP in formato CIDR come 192.168.0.0/24. AVVERTENZA! Chiunque abbia 
accesso a FCP potr? caricare su Freenet  qualsiasi file al quale il nodo abbia 
accesso e scaricare su disco qualsiasi file da Freenet (i file esistenti non 
verranno sovrascritti)
 FcpServer.assumeDownloadDDAIsAllowed=Presumere che il download DDA sia 
permesso?
 FcpServer.assumeDownloadDDAIsAllowedLong=Presumere che il download DDA sia 
permesso? Se impostato su 'false' bisogner? fare una TestDDARequest prima di 
ogni accesso DDA
@@ -334,7 +338,7 @@
 FcpServer.assumeUploadDDAIsAllowedLong=Presumere che l'upload DDA Sia 
permesso? Se impostato su 'falso', bisogner? fare una TestDDARequest prima di 
ogni accesso DDA.
 FcpServer.bindTo=Indirizzo IP collegato
 FcpServer.bindToLong=Indirizzo IP collegato al server FCP.
-FcpServer.cannotStartOrStopOnTheFly=Non ? possibile fermare il server FCP "al 
volo"
+FcpServer.cannotStartOrStopOnTheFly=Non ? possibile arrestare il server FCP 
"al volo"
 FcpServer.couldNotChangeBindTo=Non ? stato possibile modificare l'indirizzo 
FCP collegato: ${error}.
 FcpServer.downloadsFileCanCreateCannotReadOrWrite=Il file ? stato creato ma 
non ? possibile leggerlo e scriverlo
 FcpServer.downloadsFileDoesNotExistCannotCreate=Il file non esiste e non ? 
possibile crearlo
@@ -368,7 +372,7 @@
 FetchException.longError.2=Il nodo non sa cosa fare dello splitfile
 FetchException.longError.20=URI non valida
 FetchException.longError.21=Troppo grande
-FetchException.longError.22=Metadata 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.25=Annullato
@@ -398,7 +402,7 @@
 FetchException.shortError.2=Splitfile metadati sconosciuto
 FetchException.shortError.20=URI non valida
 FetchException.shortError.21=Troppo grande
-FetchException.shortError.22=Metadati troppo grandi
+FetchException.shortError.22=Volume di metadati troppo grande
 FetchException.shortError.23=Troppi blocchi per segmento
 FetchException.shortError.24=Non abbastanza meta-strings
 FetchException.shortError.25=Annullato da caller
@@ -418,17 +422,17 @@
 FileOffer.askUserTitle=Trasferimento file diretto.
 FileOffer.commentLabel=Commenti:
 FileOffer.failedReceiveHeader=Non ? stato possibile completare il 
trasferimento del file ${filename} da ${node}.
-FileOffer.failedReceiveShort=Il trasferimento di ${filename} da ${node} ? 
fallito.
+FileOffer.failedReceiveShort=Trasferimento di ${filename} da ${node} fallito.
 FileOffer.failedReceiveTitle=Trasferimento fallito
 FileOffer.fileLabel=File:
 FileOffer.mimeLabel=MIME Type:
 FileOffer.offeredFileHeader=Il nodo ${name} offre il file:
-FileOffer.offeredFileShort=Il tuo peer amico ${node} ti sta offrendo il file 
${filename}.
+FileOffer.offeredFileShort=Il peer ${node} ha inviato il file ${filename}.
 FileOffer.rejectTransferButton=Rifiuta trasferimento
 FileOffer.senderLabel=Mittente:
 FileOffer.sizeLabel=Dimensioni:
 FileOffer.succeededReceiveHeader=Il trasferimento del file ${filename} da 
${node} ? stato completato.
-FileOffer.succeededReceiveShort=${filename} correttamente ricevuto da ${node}.
+FileOffer.succeededReceiveShort=${filename} ? stato ricevuto da ${node}.
 FileOffer.succeededReceiveTitle=Trasferimento file completato
 FirstTimeWizardToadlet.bandwidthLimit=Limitazioni dell'ampiezza di banda
 FirstTimeWizardToadlet.bandwidthLimitLong=Scegliere il tipo di connessione e 
la velocit? dal drop-down menu.
@@ -451,8 +455,8 @@
 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=Memoria utilizzata
-FirstTimeWizardToadlet.memoryLimitLong=Quanta memoria vuoi permettere a 
Freenet di utilizzare? Se hai molti download o upload in coda, Freenet 
necessiter? di pi? memoria. Suggeriamo di non scendere sotto i 128 Mb a meno 
che tu non sia realmente a corto di RAM. Se hai 1 Gb o pi?, dovresti settare 
almeno a 256 Mb. La modific? sar? effettiva al prossimo riavvio di Freenet.
+FirstTimeWizardToadlet.memoryLimit=Uso di 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.
@@ -466,17 +470,17 @@
 FirstTimeWizardToadlet.step3Title=Configurazione automatica di Freenet - 
Limiti ampiezza di banda
 FirstTimeWizardToadlet.step4Title=Freenet first time wizard! - Dimensioni 
magazzino dati (datastore)
 FirstTimeWizardToadlet.step5Title=Configurazione Automatica Freenet - 
Configurazione rete
-FirstTimeWizardToadlet.step6Title=Configurazione guidata del primo avvio di 
Freenet! - Utilizzo della memoria
+FirstTimeWizardToadlet.step6Title=Configurazione Automatica Freenet - 
Congratulazioni, il nodo ? ora configurato.
 FirstTimeWizardToadlet.step7Title=Configurazione Automatica Freenet - 
Congratulazioni, il nodo ? ora configurato.
 FirstTimeWizardToadlet.tenPercentDisk=(= 10% di spazio libero su disco)
 FirstTimeWizardToadlet.warningTitle=Avvertenza!
-FirstTimeWizardToadlet.welcomeInfoboxContent1=Benvenuti in Configurazione 
Automatica Freenet, che vi permetter? di configurare Freenet e cominciare ad 
usarlo velocemente e facilmente.
+FirstTimeWizardToadlet.welcomeInfoboxContent1=Benvenuti nella Configurazione 
Automatica Freenet, che vi permetter? di configurare Freenet e cominciare ad 
usarlo velocemente e facilmente.
 FirstTimeWizardToadlet.welcomeInfoboxTitle=Benevenuti in Configurazione 
Automatica Freenet
-FirstTimeWizardToadlet.memory.128M=128Mb - stretto necessario
-FirstTimeWizardToadlet.memory.192M=192Mb - ragionevole 
-FirstTimeWizardToadlet.memory.256M=256Mb - se hai almeno 1GB di RAM
-FirstTimeWizardToadlet.memory.512M=512Mb - se hai un sacco di RAM
-FirstTimeWizardToadlet.memory.64M=64MB - se sei davvero disperato
+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.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.
 GIFFilter.invalidHeaderTitle=Header non valido
@@ -501,34 +505,44 @@
 IPDetectorPluginManager.connectionProblems=Problemi di connessione:
 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 la porta ${port} UDP (non TCP) 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.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.forwardPortShort=Per favore, forwardare la porta UDP 
${port}.
-IPDetectorPluginManager.forwardTwoPorts=Il tuo nodo sembra essere dietro 
quanlche tipo di NAT (vedi la pagina connettivit? per dettagli). Se possibile, 
dovresti forwardare le porte ${port1} e ${port2} UDP (non TCP) 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.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 .
+IPDetectorPluginManager.forwardTwoPorts=Il tuo nodo sembra essere dietro 
quanlche tipo di NAT (vedi la pagina connettivit? per dettagli). Se possibile, 
dovresti eseguire il forward UDP (non TCP) delle porte ${port1} e ${port2} per 
migliorare la connettivit?. E' possibile comunque che tu abbia gi? provveduto; 
serve del tempo a Freenet per determinare l'avvenuto forward. Leggi 
${link}qui${/link} per ulteriori informazioni.
+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.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 cono NAT completo
+IPDetectorPluginManager.fullConeTitle=Rilevato 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
 IPDetectorPluginManager.noConnectivityshort=Gravi problemi di connessione: 
Nessuna connettivit? UDP, Freenet non pu? funzionare!
-IPDetectorPluginManager.portForwardHelpURL=http://wiki.freenetproject.org/FirewallAndRouterIssues
 (Problematiche con firewall e routers)
-IPDetectorPluginManager.portRestricted=La connessione a Internet sembra 
avvenire attraverso un NAT a porte ristrette (router). Il nodo potr? 
connettersi a quasi tutti gli altri nodi ma non a quelli dietro NAT simmetrici.
+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 "cono ristretto" NAT (router). Dovrebbe essere comunque possibile 
connettersi alla maggior parte dei nodi Freenet.
-IPDetectorPluginManager.restrictedTitle=E' stato rilevato un cono NAT ristretto
+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.seriousConnectionProblems=Gravi problemi di 
connessione:
-IPDetectorPluginManager.suggestForwardPort=Potrebbe essere necessario 
configurare il 'port forwarding' della portav (Porta UDP numero${port}) 
manualmente. Vedi: http://wiki.freenetproject.org/FirewallAndRouterIssues 
(disponibile solo in inglese, per ora).
+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.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)
-IPDetectorPluginManager.symmetric=La connessione a Internet sembra avvenire 
attraverso un NAT simmetrico o un firewall. Il nodo potr? probabilmente 
connettersi soltanto ad utenti direttamente connessi a Internet, o che usano 
NAT a cono ristretto.
-IPDetectorPluginManager.symmetricPS=Il tuo nodo si trova dietro un NAT 
simmetrico, che ? particolarmente problematico, quindi se non fai il forward 
delle porte, potresti non riuscire a connetterti alla maggior parte dei nodi!
+IPDetectorPluginManager.symmetric=Dai rilevamenti appare che il nodo potrebbe 
trovarsi dietro una NAT simmetrica o un firewall. Probabilmente, sar? possibile 
connettersi ad utenti connessi direttamente a internet o dietro restricted cone 
NAT
+IPDetectorPluginManager.symmetricPS=Il nodo si trova dietro una NAT 
simmetrica. Queta ? una situazione particolarmente  particolarmente 
problematica: ? necessario configurare il forward delle porte. In caso 
contrario potrebbe risultare impossibile connettersi alla maggioranza dei nodi.
 IPDetectorPluginManager.symmetricTitle=Rilevato firewall simmetrico
 IPUndetectedUserAlert.detecting=Freenet sta cercando in questo momento di 
rilevare l'indirizzo IP esterno. Il protrarsi della durata di questa operazione 
oltre il limite di pochi minuti ? indicativo di problemi.
-IPUndetectedUserAlert.detectingShort=Freenet sta cercando di determinare il 
tuo indirizzo IP esterno.
+IPUndetectedUserAlert.detectingShort=Indirizzo IP esterno in corso di 
rilevamento.
 IPUndetectedUserAlert.detectingWithConfigLink=Freenet sta rilevando 
l'indirizzo IP esterno. Se l'operazione dura pi? di qualche minuto si pu? 
presumere che qualcosa non stia andando come dovrebbe e si pu? provare ad usare 
il Suggerimento Temporaneo per l'Indirizzo IP ${link}parametro di 
configurazione${/link}.
 IPUndetectedUserAlert.suggestForwardPort=Sarebbe opportuno configurare il port 
forward sul router per le porte ${port1} e ${port2} (UDP) in modo da facilitare 
le connessioni.
 IPUndetectedUserAlert.suggestForwardTwoPorts=Sarebbe opportuno configurare il 
port forward sul router per le porte ${port1} e ${port2} (UDP) in modo da 
facilitare le connessioni.
 IPUndetectedUserAlert.unknownAddress=Non ? stato possibile rilevare 
l'indirizzo IP esterno (o l'indirizzo IP del NAT box o del firewall). Si pu? 
comunque scambiare refs con altri utenti, ma sar? possibile connettersi 
solamente a nodi che non si trovino a loro volta dietro NAT o firewall. Non 
appaena ci si sar? connessi in questo modo ad almeno un altro utente, sar? 
possibile determinare l'indirizzo IP esterno. Si pu? suggerire al nodo 
l'indirizzo IP esterno usando 'Suggerimento Temporaneo per l'Indirizzo IP' 
${link}parametro di configurazione${/link}
-IPUndetectedUserAlert.unknownAddressShort=Freenet non ha potuto determinare il 
tuo indirizzo IP. Potresti avere problemi a connetterti.
+IPUndetectedUserAlert.unknownAddressShort=Non ? stato possibile rilevare 
l'indirizzo IP. Potrebbero verificarsi problemi di connessione.
 IPUndetectedUserAlert.unknownAddressTitle=Indirizzo esterno sconosciuto
 IPUndetectedUserAlert.unknownAddressWithConfigLink=Freenet non ha potuto 
rilevare l'indirizzo IP esterno (o l'indirizzo IP del NAT box o firewall). E' 
comunque possibile scambiare referenze con altri utenti, ma la connessione 
avverr? soltanto se l'altra parte non ? a sua volta dietro NAT o firewall. 
Appena connesso ad almeno un utente in questo modo, Freenet riuscit? a 
determinare l'indirizzo IP esterno.E' possibile suggerire al nodo l'IP esterno 
usando il campo 'suggerimento provvisorio per l'indirizzo IP'  ${link}parametro 
di configurazione${/link}. Sarebbe inlotre auspicabile configurare il forward 
UDP per la porta ${port} sul router, in modo da rendere pi? facili le 
connessioni
 InsertException.longError.1=Caller ha fornito una URI che non ? possibile 
utilizzare"
@@ -557,17 +571,17 @@
 InsertException.shortError.9=Conflitto con dati esistenti
 IntOption.parseError=Il valore specificato non pu? essere interpretato come 
32-bit integer : ${val}
 InvalidAddressOverrideUserAlert.unknownAddress=Freenet ha rilevato che il 
valore attualmente in uso per ipAddessOverride non ? valido in quanto non 
conforme alla sintassi appropriata per un hostname n? per un indirizzo IPv4 o 
IPv6 (in accordo con l'implementazione corrente della funzione che controlla la 
sintassi per indirizzi IPv6)
-InvalidAddressOverrideUserAlert.unknownAddressShort=Il tuo ipAddressOverride 
(IP impostato manualmente) ? fasullo. Per favore correggilo.
+InvalidAddressOverrideUserAlert.unknownAddressShort=L' indirizzo IP impostato 
manualmente (ipAddressOverride) non funziona. si prega di correggerlo.
 InvalidAddressOverrideUserAlert.unknownAddressTitle=Valore Override Indirizzo 
non Valido
 InvalidAddressOverrideUserAlert.unknownAddressWithConfigLink=Freenet ha 
rilevato che il valore attualmente in uso per ipAddessOverride non ? valido in 
quanto non conforme alla sintassi appropriata per un hostname n? per un 
indirizzo IPv4 o IPv6 (in accordo con l'implementazione corrente della funzione 
che controlla la sintassi per indirizzi IPv6) E' possibile correggere l' 
Override indirizzo IP ${link}configuration parameter${/link}.
-JPEGFilter.notJpeg=Le dimensioni del file che si sta cercando di richiamare 
sono troppo piccole per un'immagine JPEG. Potrebbe trattarsi di un file in un 
altro formato e il browser potrebbe fare qualcosa di sbagliato a causa della 
mancata corrispondenza; il file ? stato pertanto bloccato.
+JPEGFilter.notJpeg=Le dimensioni del file che si sta cercando di richiamare 
sono troppo ridotte perch? possa trattarsi di un'immagine JPEG. Potrebbe essere 
un file in un altro formato e il browser potrebbe fare qualcosa di sbagliato a 
causa della mancata corrispondenza; il file ? stato pertanto bloccato.
 JPEGFilter.tooShort=File troppo piccolo per un JPEG.
 JPEGFilter.tooShortTitle=Troppo corto
 KnownUnsafeContentTypeException.dangerousInlines=Contenuto di questo tipo pu? 
includere immagini o video che vengono caricati direttamente da internet, 
esponendo l'indirizzo IP dell'utente e quindi compromettendone gravemente 
l'anonimato.
 KnownUnsafeContentTypeException.dangerousInlinesLabel=Collegamenti esterni 
pericolosi:
 KnownUnsafeContentTypeException.dangerousLinks=Contenuto di questo tipo pu? 
includere dei link a pagine pubblicate al di fuori di Freenet. Clickando su 
tali link (e possono essere camuffati) si espone il proprio indirizzo IP, 
compromettendo l'anonimato.
 KnownUnsafeContentTypeException.dangerousLinksLabel=Link pericolosi:
-KnownUnsafeContentTypeException.dangerousMetadata=Contenuto di questo tipo pu? 
includere metadati, i quali possono essere visualizzati da alcuni browser eed 
altri programmi: tali metadati possono contenere link o immagini caricate 
direttamente da internet, che possono compromettere l'anonimato.
+KnownUnsafeContentTypeException.dangerousMetadata=Contenuto di questo tipo pu? 
includere metadati, i quali possono essere visualizzati da alcuni browser o con 
l'aiuto di altri programmi: i metadati possono contenere link o immagini 
caricate direttamente da internet, che possono compromettere l'anonimato.
 KnownUnsafeContentTypeException.dangerousMetadataLabel=Metadati pericolosi:
 KnownUnsafeContentTypeException.dangerousScripts=Contenuto di questo tipo pu? 
includere script pericolosi che quando eseguiti possono compromettere 
l'anonimato dell'utente connettendosi direttamente al web o compromettere la 
sicurezza in altro modo.
 KnownUnsafeContentTypeException.dangerousScriptsLabel=Scripting pericoloso:
@@ -578,7 +592,7 @@
 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.
 LocalFileInsertToadlet.dirAccessDenied=L'accesso a questa directory ? 
interdetto
-LocalFileInsertToadlet.dirCannotBeRead=Non ? stato possibile leggere nella 
directory "${path}".
+LocalFileInsertToadlet.dirCannotBeRead=Non ? stato possibile leggere dalla 
directory "${path}".
 LocalFileInsertToadlet.fileHeader=File
 LocalFileInsertToadlet.insert=Inserisci
 LocalFileInsertToadlet.listing=Elenco directory ${path}
@@ -604,7 +618,7 @@
 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 definito un nome per 
il nodo.
+MeaningfulNodeNameUserAlert.noNodeNickTitle=Non ? stato impostato il nome del 
nodo.
 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
@@ -621,7 +635,7 @@
 N2NTMToadlet.queuedTitle=Aggiunto alla Coda
 N2NTMToadlet.returnToFriends=Torna alla lista degli Amici
 N2NTMToadlet.returnToNodeHomepage=Torna alla homepage del nodo
-N2NTMToadlet.sendMessage=Invia Messaggio Testuale
+N2NTMToadlet.sendMessage=Invia Messaggio di Testo da Nodo a Nodo (N2NTM)
 N2NTMToadlet.sendMessageShort=Invia Messaggio
 N2NTMToadlet.sendStatus=Status N2NTM in uscita
 N2NTMToadlet.sent=Messaggio inviato al peer
@@ -638,15 +652,15 @@
 Node.acceptSeedConnectionsShort=Essere un seednode?
 Node.alwaysAllowLocalAddresses=Sempre permettere 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=Assumi che la port non sia forwardata.
+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.buggyJVMShort=Freenet sta girando con la versione Java ${version}. Per 
favore aggiorna il prima possibile, la versione che usi ha pericolosi bug.
+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}buggy${/link}. Pu? produrre 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.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.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)
@@ -691,15 +705,15 @@
 Node.nodeName=Nickname di questo nodo Freenet
 Node.nodeNameLong=Nickname del nodo. Visibile solo agli Amici
 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 girando con una JVM (Java Virtual Machine) 
non SUN, questo non ? raccomandato, per favore scarica la versione Sun Java 
corrente.
+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
 Node.notUsingWrapper=Il nodo sta girando senza il wrapper. Ci? ? generalmente 
sconsigliabile. Il nodo non potr? riavviare s? stesso e quindi l'aggiornamento 
automatico non potr? funzionare. Inoltre, se la JVM se ne dovesse andare nel 
"limbo" non sar? possibile riavviare automaticamente nemmeno qiuella. Non 
verranno generati stack dump in alcuni posti e quindi debugging sar? pi? 
difficile.
-Node.notUsingWrapperShort=Freenet sta girando senza "wrapper". Non ? 
raccomandato.
+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 Modo Promiscuo (connette automaticamente a nodi 
non gestiti da utenti conosciuti ed affidabili)
-Node.opennetEnabledLong=AbilitaModo Promiscuo? 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.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.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?
@@ -719,7 +733,7 @@
 Node.throttleLocalTrafficLong=Abilita throttle traffico locale? Abilitando 
questa opzione anche LAN e traffico localhost saranno soggetti alla limitazione 
di banda.
 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=Problemi di connessione: Il tuo MTU di connessione ? 
troppo basso per permettere a Freenet di lavorare correttamente. Si 
verificheranno dei problemi.
+Node.tooSmallMTUShort=Problema di connessione: MTU di connessione troppo basso 
per consentire a Freenet di funzionare correttamente. Potranno verificarsi dei 
problemi.
 NodeClientCore.couldNotFindOrCreateDir=Non ? stato possibile trovare o creare 
la directory
 NodeClientCore.downloadAllowedDirs=Directory dove il download ? consentito
 NodeClientCore.downloadAllowedDirsLong=Si pu? usare una lista di directory 
dove dove il download e' permesso, separate da 'punto e virgola' (;). 
"downloads" significa downloadsDir, vuoto (nessuna directory specificata) 
significa che il download su disco non e' permesso, "all" significa download 
permessi in tutte le directory AVVERTENZA; Se impostato su "all" ("tutte"), 
ogni utente potr? scaricare files  in qualsiasi directory.
@@ -736,7 +750,7 @@
 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, non tutte le 
funzionalit? potrebbero essere operative e il nodo potrebbe essere lento.
+NodeClientCore.startingUpShort=Freenet si sta avviando, qualcosa potrebbe 
ancora non funzionare e il nodo potrebbe essere lento.
 NodeClientCore.startingUpTitle=Avviamento di Freenet in corso
 NodeClientCore.tempDir=Directory file temporanei
 NodeClientCore.tempDirLong=Nome della directory dei file temporanei
@@ -745,11 +759,11 @@
 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.ipOverrideLong=Impostazione manuale dell'indirizzo IP (di 
solito non ? necessario) - Utilizzare se si ha un indirizzo IP statico o un 
domain name  (es. dyndns), e ci si trova dietro un firewall.
+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.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: Potresti trovarti 
dietro una NAT simmetrica.
+NodeIPDetector.maybeSymmetricShort=Problema di connessione: il nodo potrebbe 
trovarsi dietro una NAT simmetrica.
 NodeIPDetector.maybeSymmetricTitle=Problemi di connessione
 NodeIPDetector.unknownHostErrorInIPOverride=Host sconosciuto: ${error}
 NodeStat.aggressiveGC=Modificatore  dell' AggressiveGC
@@ -758,10 +772,10 @@
 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 le richieste locali 
come fossero richieste remote, per limitazioni della disponibilit? di banda?
-NodeStat.ignoreLocalVsRemoteBandwidthLiabilityLong=Abilita per ridurre 
significativamente 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.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.memCheckLong=Abilita verifica della memoria Scrive un messaggio nel 
log file. La verifica della memoria deve essere abilitata perche' 
aggressiveGCModificator abbia effetto
+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
@@ -786,8 +800,8 @@
 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 mancanze 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 abbastanza "Nice levels" disponibili! 
Per favore, far girare Freenet ad un "Nice Level" inferiore.
+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)
@@ -820,7 +834,7 @@
 PeerManagerUserAlert.tooManyNeverConnected=Ben ${count} tra i peer di questo 
nodo non sono mai stati connessi, nemmeno una volta sola: . Non bisognerebbe 
aggiungere peer a meno che la propria referenza venga aggiunta a sua volta. In 
caso contrario sar? impossibile connettersi.
 PeerManagerUserAlert.tooManyNeverConnectedTitle=Molti peers non sono ancora 
stati connessi nemmeno una volta
 PeerManagerUserAlert.tooManyNeverConnectedWithLink=${count} peer di questo 
nodo non sono mai stati connessi, nemmeno una volta sola. Non bisognerebbe 
aggiungere nuovi peers a meno che essi non aggiungano a loro volta ${link}your 
reference${/link}. Se ci? non avviene non sar? possibile stabilire una 
connessione.
-PeerManagerUserAlert.tooManyPeers=Il nodo ha troppi peer (${count} > ${max}). 
Non si raccomanda di far girare "ubernodes" con l'aggiunta automatica di peer; 
questo non produce una topologia mondo-piccolo. Ci? influisce negativamente sul 
rendimento poich? i peer disconnessi usano una piccola quantit? di banda e di 
CPU. Potrebbe essere necessario "ripulire" la lista dei peer.
+PeerManagerUserAlert.tooManyPeers=Il nodo ha troppi peer (${count} > ${max}). 
Non si raccomanda di far girare "ubernodes" con l'aggiunta automatica di peer; 
questo non produce una topologia mondo-piccolo. Ci? influisce negativamente sul 
rendimento perch? anche i peer disconnessi usano un po' di banda e di CPU. 
Potrebbe essere necessario "ripulire" la lista dei peer.
 PeerManagerUserAlert.tooManyPeersTitle=Troppi peer
 PeerManagerUserAlert.tooOldNeverConnectedPeers=Uno o pi? peer non si sono mai 
connessi nelle due settimane trascorse da quando sono stati aggiunti.  E' da 
prendere in considerazione l'idea di rimuoverli in quanto essi stanno 
marginalmente compromettendo il rendimento (pacchetti sprecati cencando di 
comunicare con nodi che non ci sono).
 PeerManagerUserAlert.tooOldNeverConnectedPeersTitle=Peer mai connesso/i 
obsoleto/i
@@ -831,8 +845,8 @@
 PeersSayKeyBlownAlert.failedTransferSayBlownLabel=Questi nodi hanno comunicato 
che la chiave di revoca ? saltata ma poi non hanno completato il trasferimento 
del certificato di revoca:
 PeersSayKeyBlownAlert.fetching=Il nodo sta scaricando il certificato di revoca 
contentnte spiegazioni pi? dettagliate.
 PeersSayKeyBlownAlert.intro=Uno o pi? peers ci comunicano che la chiave di 
revoca per l'aggiornamento automatico ? saltata. Questo significa che qualcuno 
potrebbe essere venuto a conoscenza della chiave privata del sistema di 
autoaggiornamento, cosa che potrebbe far eseguire al nodo il codice che 
l'attaccante volesse fargli eseguire (se l'aggiornamento venisse eseguito): per 
prevenire tale eventualit?, il sistema di autoaggiornamento ? stato 
disabilitato. E' anche possibile che dei peers stiano deliberatamente mentendo 
a proposito della chiave di revoca.
-PeersSayKeyBlownAlert.short=Alcuni dei tuoi nodi, dicono che la chiave di auto 
aggiornamento ? rovinata!
-PeersSayKeyBlownAlert.titleWithCount=chiave di Auto-aggiornamento saltata, 
evento confermato da ${count} peer!
+PeersSayKeyBlownAlert.short=Alcuni peer avvertono che la chiave di auto 
aggiornamento ? saltata!
+PeersSayKeyBlownAlert.titleWithCount=La chiave di Auto-aggiornamento ? 
saltata! L' evento ? stato confermato da ${count} peer!
 PluginManager.cannotSetOnceLoaded=Una volta caricata, non ? pi? possibile 
impostare la lista dei plugin
 PluginManager.loadedOnStartup=Plugin da caricare all'avvio
 PluginManager.loadedOnStartupLong=Classpath, nome e locazione dei plugin da 
caricare all'avvio
@@ -892,7 +906,7 @@
 PproxyToadlet.reloadExplanation=Ricaricare un plugin ? come scaricarlo e 
ricaricarlo.
 PproxyToadlet.reloadOnStartupShort=Ricarica all'avvio
 PproxyToadlet.reloadPluginTitle=Ricarica Plugin
-PproxyToadlet.reloadPurgeWarning=Rimuovi il plugin dalla cache prima ri 
ricaricarlo. Se il plugin era stato scaricato da internet, sar? scaricato 
nuovamente.
+PproxyToadlet.reloadPurgeWarning=Rimuovi il plugin dalla cache prima di 
ricaricarlo. Se il plugin era stato scaricato da internet, sar? scaricato 
nuovamente.
 PproxyToadlet.reloadWarning=Attenzione: alcuni plugin non reagiscono in modo 
ottimale a un reload.
 PproxyToadlet.returnToPluginPage=Torna alla pagina dei plugin
 PproxyToadlet.startedAtTitle=Avviato:
@@ -901,7 +915,7 @@
 PproxyToadlet.startingPluginTime=tempo trascorso
 PproxyToadlet.startingPluginsTitle=Avvio plugins in corso
 PproxyToadlet.unauthorized=L'accesso a questa pagina non ? autorizzato.
-PproxyToadlet.unauthorizedTitle=Accesso Non Autoriuzzato
+PproxyToadlet.unauthorizedTitle=Accesso Non Autorizzato
 PproxyToadlet.unload=Termina
 PproxyToadlet.unloadPluginTitle=Termina plugin?
 PproxyToadlet.unloadPluginWithName=Conferma terminazione ${name}?
@@ -922,7 +936,7 @@
 QueueToadlet.completedUDirectory=Directory Upload Completati:(${size})
 QueueToadlet.delete=Elimina
 QueueToadlet.download=Scarica
-QueueToadlet.downloadSucceeded=Il file ${origlink}${filename}${/origlink} ? 
stato scaricato correttamente. ${link}Click qui${/link} per aprile il file 
(${size}).
+QueueToadlet.downloadSucceeded=Il file ${origlink}${filename}${/origlink} ? 
stato scaricato. ${link}Click qui${/link} per aprile il file (${size}).
 QueueToadlet.downloadSucceededTitle=Download effettuato: ${filename}
 QueueToadlet.emergency=urgenza estrema
 QueueToadlet.errorAccessDenied=Errore: Accesso Negato
@@ -993,16 +1007,16 @@
 QueueToadlet.remove=Elimina
 QueueToadlet.requestNavigation=Esplora Richieste
 QueueToadlet.restart=Riavvia
-QueueToadlet.siteUploadSucceeded=I file ${filename} (${files} ${size} total 
size) del tuo freesite, sono stati correttamente caricati su Freenet. 
${link}Click qui${/link} per aprire l'homepage del tuo freesite.
-QueueToadlet.siteUploadSucceededTitle=Inserimento del Freesite eseguito: 
${filename}
+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.size=Dimensioni
 QueueToadlet.starting=AVVIAMENTO IN CORSO
 QueueToadlet.title=Coda globale di ${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.uploadSucceeded=Il file${filename} (size ${size}) ? stato 
correttamente caricato su Freenet. ${link}Click qui${/link} per aprire il file.
-QueueToadlet.uploadSucceededTitle=Upload eseguito: ${filename}
+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.veryhigh=molto alta
 QueueToadlet.verylow=bassissima
 QueueToadlet.warningUnsafeContent=Contenuto Potenzialmente Pericoloso
@@ -1046,7 +1060,7 @@
 SimpleToadletServer.cssOverrideCantRead=Non ? stato possibile leggere il file 
di sovrascrittura CSS fornito: ${filename}
 SimpleToadletServer.cssOverrideLong=Questa impostazione permette di utilizzare 
un CSS personalizzato invece di quello normalmente usato. AVVERTENZA: i CSS 
possono essere pericolosi, e *non* vengono filtrati: utilizzare a proprio 
rischio. Per includerli nella distribuzione principale e-mail devl at 
freenetroject.org
 SimpleToadletServer.cssOverrideNotInUploads=Non ? possibile usare questa 
impostazione: "${filename} non ? una directory dalla quale sono permessi gli 
upload.
-SimpleToadletServer.doRobots=Escludere robots via robots.txt?
+SimpleToadletServer.doRobots=Usare robots.txt per escludere i robot?
 SimpleToadletServer.doRobotsLong=Pubblica /robots.txt che dice a persone, 
Google, spiders, wget, ecc. di lasciarci in pace.
 SimpleToadletServer.enableInlinePrefetch=Abilita pre-ricezione (prefetching) 
di immagini inlinea (inline)?
 SimpleToadletServer.enableInlinePrefetchLong=Questo potrebbe essere utile se 
il browser utilizza un numero ridotto di connessioni per comunicare con il 
nodo. D'altra parte potrebbe non esserlo.
@@ -1058,7 +1072,7 @@
 SimpleToadletServer.enabledLong=Abilita FProxy e relativi servizi HTTP
 SimpleToadletServer.illegalCSSName=Il nome CSS non pu? contenere i catarreri 
"barra" (/ slash) e "due punti" ( : colon)
 SimpleToadletServer.panicButton=Mostra bottone Emergenza
-SimpleToadletServer.panicButtonLong=Mostra il bottone Emergenza nella pagina 
della Coda
+SimpleToadletServer.panicButtonLong=Mostra il bottone Emergenza nella pagina 
della Coda. Se usato, Il bottone Emergenza rimuove tutte le richieste che non 
hanno ricevuto conferma.
 SimpleToadletServer.port=Numero della porta FProxy
 SimpleToadletServer.portLong=Numero della porta FProxy
 SimpleToadletServer.ssl=Abilitare ssl?
@@ -1083,7 +1097,7 @@
 StatisticsToadlet.javaVersion=Versione Java: ${version}
 StatisticsToadlet.jeDumpButton=Genera JE Dump
 StatisticsToadlet.jvmInfoTitle=Info JVM
-StatisticsToadlet.jvmVendor=Fornitore di JVM: ${vendor}
+StatisticsToadlet.jvmVendor=JVM fornita da: ${vendor}
 StatisticsToadlet.jvmVersion=Versione JVM: ${version}
 StatisticsToadlet.maxMemory=Max Memoria Java: ${memory}
 StatisticsToadlet.noRequests=Il nodo non sta elaborando alcuna richiesta in 
questo momento.
@@ -1093,7 +1107,7 @@
 StatisticsToadlet.osArch=Architettura OS: ${arch}
 StatisticsToadlet.osName=Sistema Operativo: ${name}
 StatisticsToadlet.osVersion=Versione Sistema Operativo: ${version}
-StatisticsToadlet.outputRate=Output: ${rate}/second (of ${max}/second)
+StatisticsToadlet.outputRate=Output: ${rate} al secondo (di ${max} al secondo)
 StatisticsToadlet.payloadOutput=Output Carico Utile: ${total} (${rate}/second) 
(${percent}%)
 StatisticsToadlet.peerStatsTitle=Statistiche peer
 StatisticsToadlet.priority=Priorit?
@@ -1136,12 +1150,12 @@
 TextModeClientInterfaceServer.telnetPortNumber=Porta telnet
 TextModeClientInterfaceServer.telnetPortNumberLong=Numero della porta telnet
 TimeSkewDetectedUserAlert.shortText=Il nodo ha rilevato una discrepanza 
temporale. Freenet potrebbe bloccarsi in strani modi!
-TimeSkewDetectedUserAlert.text=Una discepanza 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 clients del 
network, hardware bugs.
+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!
 Toadlet.cancel=Cancella
 Toadlet.clickHere=Clicka qui
 Toadlet.homepage=Homepage
-Toadlet.internalErrorPleaseReport=Errore interno: se possibile, riportarlo
+Toadlet.internalErrorPleaseReport=Errore interno:  riportarlo se possibile
 Toadlet.internalErrorTitle=Errore Interno
 Toadlet.no=No
 Toadlet.nodeHomepage=Homepage del Nodo
@@ -1202,12 +1216,12 @@
 UpdatedVersionAvailableUserAlert.fetchingNewExt=E' in corso il download di una 
nuova versione di Freenet (extra jar versione ${extVersion}).
 UpdatedVersionAvailableUserAlert.fetchingNewNode=Il nodo sta scaricando una 
versione aggiornata di Freenet (versione nodo ${nodeVersion}).
 UpdatedVersionAvailableUserAlert.finalCheck=Il nodo sta eseguendo un controllo 
finale per verificare la sicurezza dell'aggiornamento (${count} of ${max}).
-UpdatedVersionAvailableUserAlert.notLatest=Il nodo non sta usando la versione 
del programma pi? aggiornata.
+UpdatedVersionAvailableUserAlert.notLatest=Sembra che il nodo non stia usando 
una versione aggiornata del software.
 UpdatedVersionAvailableUserAlert.shortArmed=In nodo sta scaricando una nuova 
versione di Freenet e si riavvier? una volta terminato il download.
-UpdatedVersionAvailableUserAlert.shortNotReadyNotArmed=Il nodo sta scaricando 
una nuova versione di Freenet, ma necessita il vostro permesso per poterla 
utilizzare.
-UpdatedVersionAvailableUserAlert.shortReadyNotArmed=Il nodo ha scaricato una 
nuova versione di Freenet, ma necessita il vostro permesso per poterla 
utilizzare.
+UpdatedVersionAvailableUserAlert.shortNotReadyNotArmed=Il nodo sta scaricando 
una nuova versione di Freenet, ma per poterla utilizzare ? necessaria la 
conferma da parte dell'utente.
+UpdatedVersionAvailableUserAlert.shortReadyNotArmed=Il nodo ha scaricato una 
nuova versione di Freenet ma potr? usarla solo dopo la conferma da parte dell' 
utente.
 UpdatedVersionAvailableUserAlert.title=E' disponibile una nuova versione 
stabile di Freenet
-UpdatedVersionAvailableUserAlert.updateASAPButton=Aggiorna appena possibile
+UpdatedVersionAvailableUserAlert.updateASAPButton=Si prega di aggiornare al 
pi? presto possibile
 UpdatedVersionAvailableUserAlert.updateASAPQuestion=Riavviare il nodo dopo che 
l'aggiornamento ? stato completato?
 UpdatedVersionAvailableUserAlert.updateNowButton=Aggiorna Adesso!
 UserAlert.apply=Conferma
@@ -1229,14 +1243,14 @@
 WelcomeToadlet.arkFetchCount=ARK Fetchers: ${total}
 WelcomeToadlet.confirmAddBookmarkSubTitle=Conferma Aggiunta Sgnalibro
 WelcomeToadlet.confirmAddBookmarkTitle=Aggiungi ai Segnalibri
-WelcomeToadlet.confirmAddBookmarkWithKey=Confermare che si vuole aggiungere la 
chiave ${key} ai preferiti ed aggiugnere la descrizione desiderata:
+WelcomeToadlet.confirmAddBookmarkWithKey=Si prega di confermare l' intenzione 
di aggiungere la chiave ${key} ai preferiti ed aggiugnere una descrizione.
 WelcomeToadlet.confirmExternalLinkSubTitle=Conferma link esterno
 WelcomeToadlet.confirmExternalLinkTitle=ATTENZIONE: Link esterno
 WelcomeToadlet.confirmExternalLinkWithURL=Confermare che l'indirizzo da 
visitare sia ${url}. ATTENZIONE: Si sta per lasciare FREENET! Cliccare su 
questo link METTERA' in serio pericolo l'anonimato dell'utente. Si raccomanda 
vivamente di non farlo.
 WelcomeToadlet.confirmFIN=Inserire il messaggio Frost seguente?
 WelcomeToadlet.databaseStatsSubTitle=Statistiche Database
 WelcomeToadlet.databaseStatsTitle=Ricevi statistiche JE
-WelcomeToadlet.disabledAlert=Allarme non abilitato
+WelcomeToadlet.disabledAlert=Allarme disabilitato
 WelcomeToadlet.extVersion=Freenet-ext Build #${build} r${rev}
 WelcomeToadlet.extVersionWithRecommended=Freenet-ext Build #${build} (si 
raccomanda ${recbuild}) r${rev}
 WelcomeToadlet.fetch=Richiama
@@ -1267,18 +1281,18 @@
 WelcomeToadlet.restartConfirm=Conferma: Riavvia nodo Freenet?
 WelcomeToadlet.restartConfirmTitle=Riavvia Nodo
 WelcomeToadlet.restartNode=Riavvia il nodo
-WelcomeToadlet.restarting=Attendere mentre il nodo viene riavviato. Questo 
dura fino a tre minuti. Grazie per usare Freenet.
+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
 WelcomeToadlet.shutdownConfirm=Conferma: Arresta nodo Freenet?
 WelcomeToadlet.shutdownConfirmTitle=Arresta Nodo
-WelcomeToadlet.shutdownDone=Nodo Freenet arrestato..
+WelcomeToadlet.shutdownDone=Arresto del nodo Freenet in corso
 WelcomeToadlet.shutdownNode=Arresta il nodo
 WelcomeToadlet.splitfileErrorLabel=Errore specifico splitfile:
 WelcomeToadlet.startIndexHeader=Indice dal quale iniziare
 WelcomeToadlet.subjectHeader=Oggetto
-WelcomeToadlet.targetBoardHeader=Board obiettivo
-WelcomeToadlet.testnetWarning=gira in modalit? testnet. Questo METTE 
seriamente in pericolo l'anonimato!
+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.threadDumpNotUsingWrapper=Non ? possibile generare un thread 
dump se il nodo non sta girando nel wrapper
@@ -1293,8 +1307,9 @@
 WelcomeToadlet.uriWouldHaveBeen=La URI sarebbe stata: ${uri}
 WelcomeToadlet.version=Freenet ${fullVersion} Build ${build} r${rev}
 WelcomeToadlet.versionHeader=Informazioni sulla Versione e Controllo del Nodo
-WelcomeToadlet.writtenDatabaseStats=Le statistiche del runtime database sono 
state iscritte nel log file del wrapper
-WrapperConfig.wrapper.java.maxmemory.long=Limite di memoria usata da Freenet. 
Freenet richieder? pi? memoria se possiedi un grande datastore. I cambiamenti 
non avranno effetto fino al prossimo riavvio del nodo Freenet.
+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.short=Memoria massima (in megabytes)
 testing.test=test${test1}test${test2}test
+?BookmarkEditorToadlet.pasteOrCancel=Click su un'icona incolla o cancella.
 End

Modified: branches/saltedhashstore/freenet/src/freenet/node/Announcer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Announcer.java    
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/node/Announcer.java    
2008-05-09 02:17:04 UTC (rev 19858)
@@ -42,20 +42,20 @@
        private static final int STATUS_CONNECTING_SEEDNODES = 1;
        private static final int STATUS_NO_SEEDNODES = -1;
        private int runningAnnouncements;
-       /** We want to announce to 3 different seednodes. */
-       private static final int WANT_ANNOUNCEMENTS = 3;
+       /** We want to announce to 5 different seednodes. */
+       private static final int WANT_ANNOUNCEMENTS = 5;
        private int sentAnnouncements;
        private long startTime;
        private long timeAddedSeeds;
        static final long MIN_ADDED_SEEDS_INTERVAL = 60*1000;
-       /** After we have sent 3 announcements, wait for 1 minute before 
sending 3 more if we still have no connections. */
-       static final int COOLING_OFF_PERIOD = 60*1000;
+       /** After we have sent 3 announcements, wait for 30 seconds before 
sending 3 more if we still have no connections. */
+       static final int COOLING_OFF_PERIOD = 30*1000;
        /** Identities of nodes we have announced to */
        private final HashSet announcedToIdentities;
        /** IPs of nodes we have announced to. Maybe this should be 
first-two-bytes, but I'm not sure how to do that with IPv6. */
        private final HashSet announcedToIPs;
        /** How many nodes to connect to at once? */
-       static final int CONNECT_AT_ONCE = 10;
+       static final int CONNECT_AT_ONCE = 15;
        /** Do not announce if there are more than this many opennet peers 
connected */
        private static final int MIN_OPENNET_CONNECTED_PEERS = 10;
        private static final long NOT_ALL_CONNECTED_DELAY = 60*1000;
@@ -158,6 +158,7 @@
                                }
                        }
                }
+               node.dnsr.forceRun();
                // If none connect in a minute, try some more.
                node.getTicker().queueTimedJob(new Runnable() {
                        public void run() {
@@ -320,6 +321,12 @@
                                                        SeedServerPeerNode pn = 
(SeedServerPeerNode) seeds.get(i);
                                                        
node.peers.disconnect(pn, true, true);
                                                }
+                                               // Re-check every minute. 
Something bad might happen (e.g. cpu starvation), causing us to have to reseed.
+                                               
node.getTicker().queueTimedJob(new Runnable() {
+                                                       public void run() {
+                                                               
maybeSendAnnouncement();
+                                                       }
+                                               }, RETRY_DELAY);
                                        } else {
                                                
node.getTicker().queueTimedJob(new Runnable() {
                                                        public void run() {

Modified: branches/saltedhashstore/freenet/src/freenet/node/DNSRequester.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/DNSRequester.java 
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/node/DNSRequester.java 
2008-05-09 02:17:04 UTC (rev 19858)
@@ -51,11 +51,11 @@
             lastLogTime = now;
         }
         for(int i=0;i<nodes.length;i++) {
-            //Logger.minor(this, "Node: "+pn);
+            //Logger.minor(this, "Node: "+nodes[i]);
             if(!nodes[i].isConnected()) {
                 // Not connected
                 // Try new DNS lookup
-               //Logger.minor(this, "Doing lookup on "+pn);
+               //Logger.minor(this, "Doing lookup on "+nodes[i]+" of 
"+nodes.length);
                 nodes[i].maybeUpdateHandshakeIPs(false);
             }
         }
@@ -67,4 +67,10 @@
             // Ignore, just wake up. Just sleeping to not busy wait anyway
         }
     }
+
+       public void forceRun() {
+               synchronized(this) {
+                       notifyAll();
+               }
+       }
 }

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/IPDetectorPluginManager.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/node/IPDetectorPluginManager.java  
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/node/IPDetectorPluginManager.java  
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -438,7 +438,7 @@

                        // If detect attempt failed to produce an IP in the 
last 5 minutes, don't
                        // try again yet.
-                       if(failedRunners.size() == runners.size()) {
+                       if(failedRunners.size() == plugins.length) {
                                if(now - lastDetectAttemptEndedTime < 
5*60*1000) {
                                        if(logMINOR) Logger.minor(this, "Last 
detect failed less than 5 minutes ago");
                                        return;

Modified: branches/saltedhashstore/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/NodeClientCore.java       
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/node/NodeClientCore.java       
2008-05-09 02:17:04 UTC (rev 19858)
@@ -190,14 +190,14 @@
                                        }
                });
                try {
-                       persistentTempBucketFactory = new 
PersistentTempBucketFactory(new 
File(nodeConfig.getString("persistentTempDir")), "freenet-temp-", 
node.fastWeakRandom);
+                       persistentTempBucketFactory = new 
PersistentTempBucketFactory(new 
File(nodeConfig.getString("persistentTempDir")), "freenet-temp-", random, 
node.fastWeakRandom);
                        persistentEncryptedTempBucketFactory = new 
PersistentEncryptedTempBucketFactory(persistentTempBucketFactory);
                } catch (IOException e2) {
                        String msg = "Could not find or create persistent 
temporary directory";
                        throw new 
NodeInitException(NodeInitException.EXIT_BAD_TEMP_DIR, msg);
                }

-               tempBucketFactory = new 
PaddedEphemerallyEncryptedBucketFactory(new 
TempBucketFactory(tempFilenameGenerator), node.fastWeakRandom, 1024);
+               tempBucketFactory = new 
PaddedEphemerallyEncryptedBucketFactory(new 
TempBucketFactory(tempFilenameGenerator), random, node.fastWeakRandom, 1024);

                // Downloads directory


Modified: branches/saltedhashstore/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/RequestHandler.java       
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/node/RequestHandler.java       
2008-05-09 02:17:04 UTC (rev 19858)
@@ -364,7 +364,7 @@
                                }
                        }

-               }, "Send throttled SSK data");
+               }, "Send throttled SSK data for "+RequestHandler.this);

                if(SEND_OLD_FORMAT_SSK) {
                        Message df = DMT.createFNPSSKDataFound(uid, headers, 
data);

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/SeedServerPeerNode.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/SeedServerPeerNode.java   
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/node/SeedServerPeerNode.java   
2008-05-09 02:17:04 UTC (rev 19858)
@@ -61,12 +61,22 @@

        protected void sendInitialMessages() {
                super.sendInitialMessages();
-               OpennetManager om = node.getOpennet();
+               final OpennetManager om = node.getOpennet();
                if(om == null) {
                        Logger.normal(this, "Opennet turned off while 
connecting to seednodes");
                        node.peers.disconnect(this, true, true);
                } else {
-                       om.announcer.maybeSendAnnouncement();
+                       // Wait 5 seconds. Another node may connect first, we 
don't want all the
+                       // announcements to go to the node which we connect to 
most quickly.
+                       node.getTicker().queueTimedJob(new Runnable() {
+                               public void run() {
+                                       try {
+                                               
om.announcer.maybeSendAnnouncement();
+                                       } catch (Throwable t) {
+                                               Logger.error(this, "Caught "+t, 
t);
+                                       }
+                               }
+                       }, 5*1000);
                }
        }


Modified: 
branches/saltedhashstore/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/node/TextModeClientInterface.java  
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/node/TextModeClientInterface.java  
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -709,7 +709,7 @@
                 if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Setting node.name to "+key);
             }catch(Exception e){
-               Logger.error(this, "Error setting node's name");
+               Logger.error(this, "Error setting node's name", e);
                }
             core.storeConfig();
         } else if(uline.startsWith("DISABLEPEER:")) {

Modified: branches/saltedhashstore/freenet/src/freenet/node/Version.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Version.java      
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/node/Version.java      
2008-05-09 02:17:04 UTC (rev 19858)
@@ -24,17 +24,17 @@
        public static final String protocolVersion = "1.0";

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

        /** Oldest build of Fred we will talk to */
-       private static final int oldLastGoodBuild = 1144;
-       private static final int newLastGoodBuild = 1145;
+       private static final int oldLastGoodBuild = 1145;
+       private static final int newLastGoodBuild = 1146;
        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, 14, 0, 0, 0 );
+               _cal.set( 2008, Calendar.MAY, 8, 0, 0, 0 );
                transitionTime = _cal.getTimeInMillis();
        }


Modified: branches/saltedhashstore/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/fcp/FCPServer.java        
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/node/fcp/FCPServer.java        
2008-05-09 02:17:04 UTC (rev 19858)
@@ -49,6 +49,7 @@
 import freenet.support.api.StringCallback;
 import freenet.support.io.Closer;
 import freenet.support.io.FileUtil;
+import java.util.LinkedList;

 /**
  * FCP server process.
@@ -613,7 +614,7 @@
                if(logMINOR) Logger.minor(this, "Storing persistent requests");
                ClientRequest[] persistentRequests = getPersistentRequests();
                if(logMINOR) Logger.minor(this, "Persistent requests count: 
"+persistentRequests.length);
-               Bucket[] toFree = null;
+               LinkedList toFree = null;
                try {
                        synchronized(persistenceSync) {
                                toFree = 
core.persistentTempBucketFactory.grabBucketsToFree();
@@ -654,16 +655,25 @@
                        if(logMINOR) Logger.minor(this, "Stored persistent 
requests");
                } finally {
                        if(toFree != null) {
-                               for(int i=0;i<toFree.length;i++) {
+                               long freedBuckets = 0;
+                               Iterator it = toFree.iterator();
+                               while(it.hasNext()) {
+                                       Bucket current = (Bucket) it.next();
                                        try {
-                                               toFree[i].free();
-                                       } catch (Throwable t) {
+                                               current.free();
+                                               freedBuckets++;
+                                       } catch(Throwable t) {
                                                try {
-                                                       
System.err.println("Caught "+t+" trying to free bucket "+toFree[i]);
+                                                       
System.err.println("Caught " + t + " trying to free bucket " + current);
                                                        t.printStackTrace();
-                                               } catch (Throwable t1) { /* 
ignore */ }
+                                               } catch(Throwable t1) { /* 
ignore */ }
                                        }
                                }
+                               // Help it to be collected
+                               toFree.clear();
+                               toFree = null;
+                               if(logMINOR)
+                                       Logger.minor(this, "We have freed 
"+freedBuckets+" persistent buckets");
                        }
                }
        }

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdater.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdater.java  
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdater.java  
2008-05-09 02:17:04 UTC (rev 19858)
@@ -289,6 +289,7 @@
                        }
                        c.cancel();
                }catch(Exception e){
+                       Logger.minor(this, "Cannot kill NodeUpdater", e);
                }
        }


Modified: 
branches/saltedhashstore/freenet/src/freenet/support/NumberedItemComparator.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/support/NumberedItemComparator.java
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/support/NumberedItemComparator.java
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -42,11 +42,13 @@
                 secondDistance = i2 - i1; // smaller => i2 > i1
                 firstDistance = i1 + Long.MAX_VALUE - i2; // smaller => i1 > i2
             }
+            // REDFLAG: base must be odd, so we never get ==
+                       assert firstDistance != secondDistance && firstDistance 
!= -secondDistance;
+            
             if(Math.abs(firstDistance) < Math.abs(secondDistance)) {
                 return 1; // i1>i2
             } else //if(Math.abs(secondDistance) < Math.abs(firstDistance)) {
                 return -1; // i2>i1
-            // REDFLAG: base must be odd, so we never get ==
         }
     }


Modified: 
branches/saltedhashstore/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
       2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
       2008-05-09 02:17:04 UTC (rev 19858)
@@ -40,15 +40,16 @@
         * @param bucket The bucket which we are proxying to. Must be empty.
         * @param pcfb The encryption mode with which to encipher/decipher the 
data.
         * @param minSize The minimum padded size of the file (after it has 
been closed).
-        * @param origRandom a week prng we will padd from.
+        * @param strongPRNG a strong prng we will key from.
+        * @param weakPRNG a week prng we will padd from.
         * @throws UnsupportedCipherException 
         */
-       public PaddedEphemerallyEncryptedBucket(Bucket bucket, int minSize, 
Random origRandom) {
-               this.randomSource = origRandom;
+       public PaddedEphemerallyEncryptedBucket(Bucket bucket, int minSize, 
RandomSource strongPRNG, Random weakPRNG) {
+               this.randomSource = weakPRNG;
                this.bucket = bucket;
                if(bucket.size() != 0) throw new 
IllegalArgumentException("Bucket must be empty");
                byte[] tempKey = new byte[32];
-               origRandom.nextBytes(tempKey);
+               strongPRNG.nextBytes(tempKey);
                this.key = tempKey;
                this.minPaddedSize = minSize;
                readOnly = false;

Modified: 
branches/saltedhashstore/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucketFactory.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucketFactory.java
        2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucketFactory.java
        2008-05-09 02:17:04 UTC (rev 19858)
@@ -1,5 +1,6 @@
 package freenet.support.io;

+import freenet.crypt.RandomSource;
 import java.io.IOException;

 import freenet.support.api.Bucket;
@@ -13,16 +14,18 @@
 public class PaddedEphemerallyEncryptedBucketFactory implements BucketFactory {

        final BucketFactory baseFactory;
-       final Random random;
+       final RandomSource strongPRNG;
+       final Random weakPRNG;
        final int minSize;

-       public PaddedEphemerallyEncryptedBucketFactory(BucketFactory factory, 
Random r, int minSize) {
+       public PaddedEphemerallyEncryptedBucketFactory(BucketFactory factory, 
RandomSource strongPRNG, Random weakPRNG, int minSize) {
                baseFactory = factory;
                this.minSize = minSize;
-               this.random = r;
+               this.strongPRNG = strongPRNG;
+               this.weakPRNG = weakPRNG;
        }

        public Bucket makeBucket(long size) throws IOException {
-               return new 
PaddedEphemerallyEncryptedBucket(baseFactory.makeBucket(size), minSize, random);
+               return new 
PaddedEphemerallyEncryptedBucket(baseFactory.makeBucket(size), minSize, 
strongPRNG, weakPRNG);
        }
 }

Modified: 
branches/saltedhashstore/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
    2008-05-09 02:09:10 UTC (rev 19857)
+++ 
branches/saltedhashstore/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
    2008-05-09 02:17:04 UTC (rev 19858)
@@ -3,13 +3,13 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.support.io;

+import freenet.crypt.RandomSource;
 import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;

-import freenet.crypt.RandomSource;
 import freenet.support.Logger;
 import freenet.support.api.Bucket;
 import freenet.support.api.BucketFactory;
@@ -36,16 +36,18 @@
        private final FilenameGenerator fg;

        /** Random number generator */
-       private final Random rand;
+       private final RandomSource strongPRNG;
+       private final Random weakPRNG;

        /** Buckets to free */
-       private final LinkedList bucketsToFree;
+       private LinkedList bucketsToFree;

-       public PersistentTempBucketFactory(File dir, String prefix, Random 
rand) throws IOException {
+       public PersistentTempBucketFactory(File dir, String prefix, 
RandomSource strongPRNG, Random weakPRNG) throws IOException {
                boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
                this.dir = dir;
-               this.rand = rand;
-               this.fg = new FilenameGenerator(rand, false, dir, prefix);
+               this.strongPRNG = strongPRNG;
+               this.weakPRNG = weakPRNG;
+               this.fg = new FilenameGenerator(weakPRNG, false, dir, prefix);
                if(!dir.exists()) {
                        dir.mkdir();
                        if(!dir.exists()) {
@@ -78,6 +80,8 @@

        public void register(File file) {
                synchronized(this) {
+                       if(originalFiles == null)
+                               throw new IllegalStateException("completed Init 
has already been called!");
                        file = FileUtil.getCanonicalFile(file);
                        if(!originalFiles.remove(file))
                                Logger.error(this, "Preserving "+file+" but it 
wasn't found!", new Exception("error"));
@@ -96,6 +100,7 @@
                                Logger.minor(this, "Deleting old tempfile "+f);
                        f.delete();
                }
+               originalFiles = null;
        }

        private Bucket makeRawBucket(long size) throws IOException {
@@ -104,12 +109,12 @@

        public Bucket makeBucket(long size) throws IOException {
                Bucket b = makeRawBucket(size);
-               return new DelayedFreeBucket(this, new 
PaddedEphemerallyEncryptedBucket(b, 1024, rand));
+               return new DelayedFreeBucket(this, new 
PaddedEphemerallyEncryptedBucket(b, 1024, strongPRNG, weakPRNG));
        }

        public Bucket makeEncryptedBucket() throws IOException {
                Bucket b = makeRawBucket(-1);
-               return new DelayedFreeBucket(this, new 
PaddedEphemerallyEncryptedBucket(b, 1024, rand));
+               return new DelayedFreeBucket(this, new 
PaddedEphemerallyEncryptedBucket(b, 1024, strongPRNG, weakPRNG));
        }

        /**
@@ -121,10 +126,10 @@
                }
        }

-       public Bucket[] grabBucketsToFree() {
+       public LinkedList grabBucketsToFree() {
                synchronized(this) {
-                       Bucket[] toFree = (Bucket[]) bucketsToFree.toArray(new 
Bucket[bucketsToFree.size()]);
-                       bucketsToFree.clear();
+                       LinkedList toFree = bucketsToFree;
+                       bucketsToFree = new LinkedList();
                        return toFree;
                }
        }

Modified: 
branches/saltedhashstore/freenet/src/net/i2p/util/NativeBigInteger.java
===================================================================
--- branches/saltedhashstore/freenet/src/net/i2p/util/NativeBigInteger.java     
2008-05-09 02:09:10 UTC (rev 19857)
+++ branches/saltedhashstore/freenet/src/net/i2p/util/NativeBigInteger.java     
2008-05-09 02:17:04 UTC (rev 19858)
@@ -420,7 +420,7 @@
                        if(tryLoadResource(temp, resource))
                                return true;
                } catch(Exception fnf) {
-                       Logger.error(NativeBigInteger.class, "Error reading 
jbigi resource");
+                       Logger.error(NativeBigInteger.class, "Error reading 
jbigi resource", fnf);
                        System.err.println("Error reading jbigi resource");
                } catch(UnsatisfiedLinkError ule) {
                        Logger.error(NativeBigInteger.class, "Library " + 
resourceName + " is not appropriate for this system.");


Reply via email to