Author: j16sdiz
Date: 2008-08-10 09:16:13 +0000 (Sun, 10 Aug 2008)
New Revision: 21698
Added:
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/startssl.pem
branches/saltedhashstore/freenet/src/freenet/node/SeedServerTestPeerNode.java
branches/saltedhashstore/freenet/src/freenet/node/simulator/SeednodePingTest.java
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoader.java
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
Modified:
branches/saltedhashstore/freenet/.settings/org.eclipse.jdt.core.prefs
branches/saltedhashstore/freenet/src/freenet/client/HighLevelSimpleClient.java
branches/saltedhashstore/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
branches/saltedhashstore/freenet/src/freenet/client/Metadata.java
branches/saltedhashstore/freenet/src/freenet/client/async/SingleFileInserter.java
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java
branches/saltedhashstore/freenet/src/freenet/clients/http/PproxyToadlet.java
branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
branches/saltedhashstore/freenet/src/freenet/clients/http/StatisticsToadlet.java
branches/saltedhashstore/freenet/src/freenet/crypt/Global.java
branches/saltedhashstore/freenet/src/freenet/io/comm/DMT.java
branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.es.properties
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
branches/saltedhashstore/freenet/src/freenet/node/Announcer.java
branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java
branches/saltedhashstore/freenet/src/freenet/node/KeyTracker.java
branches/saltedhashstore/freenet/src/freenet/node/LowLevelGetException.java
branches/saltedhashstore/freenet/src/freenet/node/Node.java
branches/saltedhashstore/freenet/src/freenet/node/NodeClientCore.java
branches/saltedhashstore/freenet/src/freenet/node/NodeCrypto.java
branches/saltedhashstore/freenet/src/freenet/node/NodeDispatcher.java
branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java
branches/saltedhashstore/freenet/src/freenet/node/NodeStats.java
branches/saltedhashstore/freenet/src/freenet/node/OpennetManager.java
branches/saltedhashstore/freenet/src/freenet/node/PeerManager.java
branches/saltedhashstore/freenet/src/freenet/node/PeerNode.java
branches/saltedhashstore/freenet/src/freenet/node/PeerNodeStatus.java
branches/saltedhashstore/freenet/src/freenet/node/RequestHandler.java
branches/saltedhashstore/freenet/src/freenet/node/RequestStarter.java
branches/saltedhashstore/freenet/src/freenet/node/RequestStarterGroup.java
branches/saltedhashstore/freenet/src/freenet/node/ResettingHTLProbeRequestSender.java
branches/saltedhashstore/freenet/src/freenet/node/SeedClientPeerNode.java
branches/saltedhashstore/freenet/src/freenet/node/TextModeClientInterface.java
branches/saltedhashstore/freenet/src/freenet/node/UptimeEstimator.java
branches/saltedhashstore/freenet/src/freenet/node/Version.java
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeBusyNetworkTest.java
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeNetworkColoringTest.java
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodePingTest.java
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeRequestInsertTest.java
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeRoutingTest.java
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeSecretPingTest.java
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeULPRTest.java
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdateManager.java
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdater.java
branches/saltedhashstore/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginManager.java
branches/saltedhashstore/freenet/src/freenet/support/FileLoggerHook.java
branches/saltedhashstore/freenet/src/freenet/support/PooledExecutor.java
branches/saltedhashstore/freenet/test/freenet/clients/http/filter/ContentFilterTest.java
branches/saltedhashstore/freenet/test/freenet/config/ConfigTest.java
Log:
Merge build 1155 into saltedhashstore
Modified: branches/saltedhashstore/freenet/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- branches/saltedhashstore/freenet/.settings/org.eclipse.jdt.core.prefs
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/.settings/org.eclipse.jdt.core.prefs
2008-08-10 09:16:13 UTC (rev 21698)
@@ -1,4 +1,3 @@
-#Fri Jun 06 10:23:15 HKT 2008
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
Modified:
branches/saltedhashstore/freenet/src/freenet/client/HighLevelSimpleClient.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/client/HighLevelSimpleClient.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/client/HighLevelSimpleClient.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -6,6 +6,7 @@
import java.util.HashMap;
import java.util.Set;
+import freenet.client.async.ClientCallback;
import freenet.client.events.ClientEventListener;
import freenet.keys.FreenetURI;
@@ -38,6 +39,11 @@
public FetchResult fetch(FreenetURI uri, long maxSize, Object context)
throws FetchException;
/**
+ * Non-blocking fetch of a URI with a configurable max-size, context
object, callback and context.
+ */
+ public void fetch(FreenetURI uri, long maxSize, Object context,
ClientCallback callback, FetchContext fctx) throws FetchException;
+
+ /**
* Blocking insert.
* @param filenameHint If set, insert a single-file manifest containing
only this file, under the given filename.
* @throws InsertException If there is an error inserting the data
@@ -45,6 +51,11 @@
public FreenetURI insert(InsertBlock insert, boolean getCHKOnly, String
filenameHint) throws InsertException;
/**
+ * Non-blocking insert.
+ */
+ public void insert(InsertBlock insert, boolean getCHKOnly, String
filenameHint, boolean isMetadata, InsertContext ctx, ClientCallback cb) throws
InsertException;
+
+ /**
* Blocking insert of a redirect.
*/
public FreenetURI insertRedirect(FreenetURI insertURI, FreenetURI
target) throws InsertException;
Modified:
branches/saltedhashstore/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -136,6 +136,12 @@
return fw.waitForCompletion();
}
+ public void fetch(FreenetURI uri, long maxSize, Object context,
ClientCallback callback, FetchContext fctx) throws FetchException {
+ if(uri == null) throw new NullPointerException();
+ ClientGetter get = new ClientGetter(callback,
core.requestStarters.chkFetchScheduler, core.requestStarters.sskFetchScheduler,
uri, fctx, priorityClass, context, null, null);
+ get.start();
+ }
+
public FreenetURI insert(InsertBlock insert, boolean getCHKOnly, String
filenameHint) throws InsertException {
return insert(insert, getCHKOnly, filenameHint, false);
}
@@ -149,6 +155,13 @@
put.start(false);
return pw.waitForCompletion();
}
+
+ public void insert(InsertBlock insert, boolean getCHKOnly, String
filenameHint, boolean isMetadata, InsertContext ctx, ClientCallback cb) throws
InsertException {
+ ClientPutter put = new ClientPutter(cb, insert.getData(),
insert.desiredURI, insert.clientMetadata,
+ ctx, core.requestStarters.chkPutScheduler,
core.requestStarters.sskPutScheduler, priorityClass,
+ getCHKOnly, isMetadata, this, null,
filenameHint, false);
+ put.start(false);
+ }
public FreenetURI insertRedirect(FreenetURI insertURI, FreenetURI
targetURI) throws InsertException {
Metadata m = new Metadata(Metadata.SIMPLE_REDIRECT, targetURI,
new ClientMetadata());
Modified: branches/saltedhashstore/freenet/src/freenet/client/Metadata.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/client/Metadata.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/client/Metadata.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -15,8 +15,7 @@
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
-import java.util.Map.Entry;
-
+import java.util.Set;
import freenet.keys.BaseClientKey;
import freenet.keys.ClientCHK;
import freenet.keys.FreenetURI;
@@ -644,6 +643,22 @@
public Metadata getDefaultDocument() throws MetadataParseException {
return getDocument("");
}
+
+ /**
+ * Get all documents in the manifest (ignores default doc).
+ * @throws MetadataParseException
+ */
+ public HashMap<String, Metadata> getDocuments() {
+ HashMap<String, Metadata> docs = new HashMap<String, Metadata>();
+ Set s = manifestEntries.keySet();
+ Iterator i = s.iterator();
+ while (i.hasNext()) {
+ String st = (String) i.next();
+ if (st.length()>1)
+ docs.put(st, (Metadata) manifestEntries.get(st));
+ }
+ return docs;
+ }
/**
* Does the metadata point to a single URI?
Modified:
branches/saltedhashstore/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/client/async/SingleFileInserter.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/client/async/SingleFileInserter.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -21,6 +21,7 @@
import freenet.support.api.Bucket;
import freenet.support.compress.CompressionOutputSizeException;
import freenet.support.compress.Compressor;
+import freenet.support.io.BucketChainBucketFactory;
import freenet.support.io.BucketTools;
/**
@@ -170,7 +171,7 @@
ctx.eventProducer.produceEvent(new StartedCompressionEvent(i));
Compressor comp =
Compressor.getCompressionAlgorithmByDifficulty(i);
Bucket result;
- result = comp.compress(origData,
ctx.persistentBucketFactory, origData.size());
+ result = comp.compress(origData, new
BucketChainBucketFactory(ctx.persistentBucketFactory, CHKBlock.DATA_LENGTH),
origData.size());
if(result.size() <
oneBlockCompressedSize) {
bestCodec = comp;
if(bestCompressedData != null)
Modified:
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -119,6 +119,8 @@
long total1 =
firstNode.getTotalInputBytes()+firstNode.getTotalOutputBytes();
long total2 =
secondNode.getTotalInputBytes()+secondNode.getTotalOutputBytes();
return compareLongs(total1, total2);
+ }else if(sortBy.equals("selection_percentage")){
+ return
compareLongs(firstNode.getNumberOfSelections(),
secondNode.getNumberOfSelections());
}else if(sortBy.equals("time_delta")){
return compareLongs(firstNode.getClockDelta(),
secondNode.getClockDelta());
}else if(sortBy.equals(("uptime"))){
@@ -397,6 +399,7 @@
if(mode >= PageMaker.MODE_ADVANCED) {
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed,
"time_routable")).addChild("#", "%\u00a0Time Routable");
+
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed,
"selection_percentage")).addChild("#", "%\u00a0Selection");
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed,
"total_traffic")).addChild("#", "Total\u00a0Traffic\u00a0(in/out/resent)");
peerTableHeaderRow.addChild("th",
"Congestion\u00a0Control");
peerTableHeaderRow.addChild("th").addChild("a", "href", sortString(isReversed,
"time_delta")).addChild("#", "Time\u00a0Delta");
@@ -415,10 +418,11 @@
}
}
+ long numberOfSelectionSamples =
peers.getNumberOfSelectionSamples();
for (int peerIndex = 0, peerCount =
peerNodeStatuses.length; peerIndex < peerCount; peerIndex++) {
PeerNodeStatus peerNodeStatus =
peerNodeStatuses[peerIndex];
- drawRow(peerTable, peerNodeStatus, mode
>= PageMaker.MODE_ADVANCED, fProxyJavascriptEnabled, now, path,
enablePeerActions, endCols, drawMessageTypes);
+ drawRow(peerTable, peerNodeStatus, mode
>= PageMaker.MODE_ADVANCED, fProxyJavascriptEnabled, now, path,
enablePeerActions, endCols, drawMessageTypes, numberOfSelectionSamples);
}
@@ -689,7 +693,7 @@
abstract protected SimpleFieldSet getNoderef();
- private void drawRow(HTMLNode peerTable, PeerNodeStatus peerNodeStatus,
boolean advancedModeEnabled, boolean fProxyJavascriptEnabled, long now, String
path, boolean enablePeerActions, SimpleColumn[] endCols, boolean
drawMessageTypes) {
+ private void drawRow(HTMLNode peerTable, PeerNodeStatus peerNodeStatus,
boolean advancedModeEnabled, boolean fProxyJavascriptEnabled, long now, String
path, boolean enablePeerActions, SimpleColumn[] endCols, boolean
drawMessageTypes, long numberOfSelectionSamples) {
HTMLNode peerRow = peerTable.addChild("tr");
if(enablePeerActions) {
@@ -770,6 +774,8 @@
if(advancedModeEnabled) {
// percent of time connected column
peerRow.addChild("td", "class", "peer-idle" /* FIXME
*/).addChild("#",
fix1.format(peerNodeStatus.getPercentTimeRoutableConnection()));
+ // selection stats
+ peerRow.addChild("td", "class", "peer-idle" /* FIXME
*/).addChild("#", (numberOfSelectionSamples > 0 ?
((peerNodeStatus.getNumberOfSelections()*100/numberOfSelectionSamples)+"%") :
"N/A"));
// total traffic column
peerRow.addChild("td", "class", "peer-idle" /* FIXME
*/).addChild("#", SizeUtil.formatSize(peerNodeStatus.getTotalInputBytes())+" /
"+SizeUtil.formatSize(peerNodeStatus.getTotalOutputBytes())+"/"+SizeUtil.formatSize(peerNodeStatus.getResendBytesSent()));
// congestion control
Modified:
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/clients/http/FProxyToadlet.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -109,7 +109,7 @@
}
- public static void handleDownload(ToadletContext context, Bucket data,
BucketFactory bucketFactory, String mimeType, String requestedMimeType, String
forceString, boolean forceDownload, String basePath, FreenetURI key, String
extras, String referrer, boolean downloadLink, ToadletContext ctx) throws
ToadletContextClosedException, IOException {
+ public static void handleDownload(ToadletContext context, Bucket data,
BucketFactory bucketFactory, String mimeType, String requestedMimeType, String
forceString, boolean forceDownload, String basePath, FreenetURI key, String
extras, String referrer, boolean downloadLink, ToadletContext ctx,
NodeClientCore core) throws ToadletContextClosedException, IOException {
if(Logger.shouldLog(Logger.MINOR, FProxyToadlet.class))
Logger.minor(FProxyToadlet.class,
"handleDownload(data.size="+data.size()+", mimeType="+mimeType+",
requestedMimeType="+requestedMimeType+", forceDownload="+forceDownload+",
basePath="+basePath+", key="+key);
String extrasNoMime = extras; // extras will not include MIME
type to start with - REDFLAG maybe it should be an array
@@ -224,6 +224,11 @@
HTMLNode option = optionList.addChild("li");
L10n.addL10nSubstitution(option,
"FProxyToadlet.openAsText", new String[] { "link", "/link" }, new String[] {
"<a href=\""+basePath+key.toString()+"?type=text/plain"+extrasNoMime+"\">",
"</a>" });
// FIXME: is this safe? See bug #131
+
+ if((mimeType.equals("application/x-freenet-index")) &&
(core.node.pluginManager.isPluginLoaded("plugins.ThawIndexBrowser.ThawIndexBrowser")))
{
+ option = optionList.addChild("li");
+ L10n.addL10nSubstitution(option,
"FProxyToadlet.openAsThawIndex", new String[] { "link", "/link" }, new String[]
{ "<a href=\""+basePath +
"plugins/plugins.ThawIndexBrowser.ThawIndexBrowser/?key=" + key.toString() +
"\">", "</a>" });
+ }
option = optionList.addChild("li");
L10n.addL10nSubstitution(option,
"FProxyToadlet.openForceDisk", new String[] { "link", "/link" }, new String[] {
"<a href=\""+basePath+key.toString()+"?forcedownload"+extras+"\">", "</a>" });
if(!(mimeType.equals("application/octet-stream") ||
mimeType.equals("application/x-msdownload"))) {
@@ -436,8 +441,9 @@
String referer = sanitizeReferer(ctx);
- handleDownload(ctx, data, ctx.getBucketFactory(),
mimeType, requestedMimeType, httprequest.getParam("force", null),
httprequest.isParameterSet("forcedownload"), "/", key, maxSize != MAX_LENGTH ?
"&max-size="+maxSize : "", referer, true, ctx);
+ handleDownload(ctx, data, ctx.getBucketFactory(),
mimeType, requestedMimeType, httprequest.getParam("force", null),
httprequest.isParameterSet("forcedownload"), "/", key, maxSize != MAX_LENGTH ?
"&max-size="+maxSize : "", referer, true, ctx, core);
+
} catch (FetchException e) {
String msg = e.getMessage();
if(Logger.shouldLog(Logger.MINOR, this))
Modified:
branches/saltedhashstore/freenet/src/freenet/clients/http/PproxyToadlet.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/clients/http/PproxyToadlet.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/clients/http/PproxyToadlet.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -118,19 +118,35 @@
else
{
PageMaker pageMaker = ctx.getPageMaker();
-
- if (request.isPartSet("submit-official") ||
request.isPartSet("submit-other")) {
+
+ if (request.isPartSet("submit-official")) {
String pluginName = null;
- if (request.isPartSet("submit-official")) {
- pluginName =
request.getPartAsString("plugin-name", 40);
- } else {
- pluginName =
request.getPartAsString("plugin-url", 200);
- }
- pm.startPlugin(pluginName, true);
+ pluginName =
request.getPartAsString("plugin-name", 40);
+ pm.startPluginOfficial(pluginName, true);
headers.put("Location", ".");
ctx.sendReplyHeaders(302, "Found", headers,
null, 0);
return;
}
+ if (request.isPartSet("submit-other")) {
+ String pluginName = null;
+ pluginName =
request.getPartAsString("plugin-url", 200);
+ boolean fileonly =
"on".equalsIgnoreCase(request.getPartAsString("fileonly", 20));
+ if (fileonly)
+ pm.startPluginFile(pluginName, true);
+ else
+ pm.startPluginURL(pluginName, true);
+ headers.put("Location", ".");
+ ctx.sendReplyHeaders(302, "Found", headers,
null, 0);
+ return;
+ }
+ if (request.isPartSet("submit-freenet")) {
+ String pluginName = null;
+ pluginName =
request.getPartAsString("plugin-uri", 300);
+ pm.startPluginFreenet(pluginName, true);
+ headers.put("Location", ".");
+ ctx.sendReplyHeaders(302, "Found", headers,
null, 0);
+ return;
+ }
if (request.isPartSet("dismiss-user-alert")) {
int userAlertHashCode =
request.getIntPart("disable", -1);
core.alerts.dismissAlert(userAlertHashCode);
@@ -211,7 +227,8 @@
if (purge) {
pm.removeCachedCopy(fn);
}
- pm.startPlugin(fn, true);
+ // FIXME
+ pm.startPluginAuto(fn, true);
headers.put("Location", ".");
ctx.sendReplyHeaders(302, "Found",
headers, null, 0);
@@ -299,7 +316,7 @@
}
/* find which plugins have already been loaded.
*/
- List/*<String>*/ availablePlugins =
findAvailablePlugins();
+ List<String> availablePlugins =
pm.findAvailablePlugins();
Iterator/*<PluginInfoWrapper>*/ loadedPlugins =
pm.getPlugins().iterator();
while (loadedPlugins.hasNext()) {
PluginInfoWrapper pluginInfoWrapper =
(PluginInfoWrapper) loadedPlugins.next();
@@ -317,6 +334,7 @@
showPluginList(ctx, pm, contentNode);
showOfficialPluginLoader(ctx, contentNode,
availablePlugins);
showUnofficialPluginLoader(ctx, contentNode);
+ showFreenetPluginLoader(ctx, contentNode);
writeHTMLReply(ctx, 200, "OK",
pageNode.generate());
} else {
@@ -358,31 +376,6 @@
}
/**
- * Returns a list of the names of all available official plugins. Right
now
- * this list is hardcoded but in future we could retrieve this list
from emu
- * or from freenet itself.
- *
- * @return A list of all available plugin names
- */
- private List/* <String> */findAvailablePlugins() {
- List/* <String> */availablePlugins = new ArrayList/* <String>
*/();
- availablePlugins.add("Echo");
- availablePlugins.add("Freemail");
- availablePlugins.add("HelloWorld");
- availablePlugins.add("HelloFCP");
- availablePlugins.add("JSTUN");
- availablePlugins.add("KeyExplorer");
- availablePlugins.add("MDNSDiscovery");
- availablePlugins.add("SNMP");
- availablePlugins.add("TestGallery");
- availablePlugins.add("ThawIndexBrowser");
- availablePlugins.add("UPnP");
- availablePlugins.add("XMLLibrarian");
- availablePlugins.add("XMLSpider");
- return availablePlugins;
- }
-
- /**
* Shows a list of all currently loading plugins.
*
* @param pluginManager
@@ -489,6 +482,22 @@
addOtherForm.addChild("input", new String[] { "type", "name",
"size" }, new String[] { "text", "plugin-url", "80" });
addOtherForm.addChild("#", " ");
addOtherForm.addChild("input", new String[] { "type", "name",
"value" }, new String[] { "submit", "submit-other", l10n("Load") });
+ addOtherForm.addChild("br");
+ addOtherForm.addChild("input", new String[] { "type", "name",
"checked" }, new String[] { "checkbox", "fileonly", "checked" });
+ addOtherForm.addChild("#", " " + l10n("fileonly"));
}
+
+ private void showFreenetPluginLoader(ToadletContext toadletContext,
HTMLNode contentNode) {
+ /* box for freenet plugins. */
+ HTMLNode addFreenetPluginBox = contentNode.addChild("div",
"class", "infobox infobox-normal");
+ addFreenetPluginBox.addChild("div", "class", "infobox-header",
l10n("loadFreenetPlugin"));
+ HTMLNode addFreenetPluginContent =
addFreenetPluginBox.addChild("div", "class", "infobox-content");
+ HTMLNode addFreenetForm =
toadletContext.addFormChild(addFreenetPluginContent, ".",
"addFreenetPluginForm");
+ addFreenetForm.addChild("div", l10n("loadFreenetPluginText"));
+ addFreenetForm.addChild("#", (l10n("loadFreenetURLLabel") + ":
"));
+ addFreenetForm.addChild("input", new String[] { "type", "name",
"size" }, new String[] { "text", "plugin-uri", "80" });
+ addFreenetForm.addChild("#", " ");
+ addFreenetForm.addChild("input", new String[] { "type", "name",
"value" }, new String[] { "submit", "submit-freenet", l10n("Load") });
+ }
}
Modified:
branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/clients/http/QueueToadlet.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -509,7 +509,7 @@
String mimeType =
clientGet.getMIMEType();
String
requestedMimeType = request.getParam("type", null);
String forceString =
request.getParam("force");
-
FProxyToadlet.handleDownload(ctx, data, ctx.getBucketFactory(), mimeType,
requestedMimeType, forceString, request.isParameterSet("forcedownload"),
"/queue/", key, "", "/queue/", false, ctx);
+
FProxyToadlet.handleDownload(ctx, data, ctx.getBucketFactory(), mimeType,
requestedMimeType, forceString, request.isParameterSet("forcedownload"),
"/queue/", key, "", "/queue/", false, ctx, core);
return;
}
}
Modified:
branches/saltedhashstore/freenet/src/freenet/clients/http/StatisticsToadlet.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/clients/http/StatisticsToadlet.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/clients/http/StatisticsToadlet.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -165,6 +165,7 @@
// FIXME! We need some nice images
final long now = System.currentTimeMillis();
+ double myLocation = node.getLocation();
final long nodeUptimeSeconds = (now - node.startupTime) / 1000;
if(ctx.isAllowedFullAccess())
@@ -209,7 +210,7 @@
// store size box
HTMLNode storeSizeInfobox =
nextTableCell.addChild("div", "class", "infobox");
- drawStoreSizeBox(storeSizeInfobox, nodeUptimeSeconds);
+ drawStoreSizeBox(storeSizeInfobox, myLocation,
nodeUptimeSeconds);
if(numberOfConnected + numberOfRoutingBackedOff > 0) {
// Load balancing box
@@ -287,7 +288,7 @@
//Swap statistics box
HTMLNode locationSwapInfobox =
nextTableCell.addChild("div", "class", "infobox");
- drawSwapStatsBox(locationSwapInfobox,
nodeUptimeSeconds, swaps, noSwaps);
+ drawSwapStatsBox(locationSwapInfobox, myLocation,
nodeUptimeSeconds, swaps, noSwaps);
// unclaimedFIFOMessageCounts box
HTMLNode unclaimedFIFOMessageCountsInfobox =
nextTableCell.addChild("div", "class", "infobox");
@@ -316,14 +317,54 @@
HTMLNode peerCircleInfobox =
nextTableCell.addChild("div", "class", "infobox");
peerCircleInfobox.addChild("div", "class",
"infobox-header", "Peer\u00a0Location\u00a0Distribution (w/pReject)");
HTMLNode peerCircleTable =
peerCircleInfobox.addChild("div", "class", "infobox-content").addChild("table");
- addPeerCircle(peerCircleTable, peerNodeStatuses);
+ addPeerCircle(peerCircleTable, peerNodeStatuses,
myLocation);
nextTableCell = overviewTableRow.addChild("td");
// node distribution box
HTMLNode nodeCircleInfobox =
nextTableCell.addChild("div", "class", "infobox");
nodeCircleInfobox.addChild("div", "class",
"infobox-header", "Node\u00a0Location\u00a0Distribution (w/Swap\u00a0Age)");
HTMLNode nodeCircleTable =
nodeCircleInfobox.addChild("div", "class", "infobox-content").addChild("table");
- addNodeCircle(nodeCircleTable);
+ addNodeCircle(nodeCircleTable, myLocation);
+
+
+ overviewTableRow = overviewTable.addChild("tr");
+ nextTableCell = overviewTableRow.addChild("td",
"class", "first");
+ // specialisation box
+ int[] incomingRequestCountArray = new int[1];
+ int[] incomingRequestLocation =
stats.getIncomingRequestLocation(incomingRequestCountArray);
+ int incomingRequestsCount =
incomingRequestCountArray[0];
+
+ if(incomingRequestsCount > 0) {
+ HTMLNode nodeSpecialisationInfobox =
nextTableCell.addChild("div", "class", "infobox");
+ nodeSpecialisationInfobox.addChild("div",
"class", "infobox-header", "Incoming\u00a0Request\u00a0Distribution");
+ HTMLNode nodeSpecialisationTable =
nodeSpecialisationInfobox.addChild("div", "class",
"infobox-content").addChild("table");
+ addSpecialisation(nodeSpecialisationTable,
myLocation, incomingRequestsCount, incomingRequestLocation);
+ }
+
+ nextTableCell = overviewTableRow.addChild("td");
+ int[] outgoingLocalRequestCountArray = new int[1];
+ int[] outgoingLocalRequestLocation =
stats.getOutgoingLocalRequestLocation(outgoingLocalRequestCountArray);
+ int outgoingLocalRequestsCount =
outgoingLocalRequestCountArray[0];
+
+ if(outgoingLocalRequestsCount > 0) {
+ HTMLNode nodeSpecialisationInfobox =
nextTableCell.addChild("div", "class", "infobox");
+ nodeSpecialisationInfobox.addChild("div",
"class", "infobox-header",
"Outgoing\u00a0Local\u00a0Request\u00a0Distribution");
+ HTMLNode nodeSpecialisationTable =
nodeSpecialisationInfobox.addChild("div", "class",
"infobox-content").addChild("table");
+ addSpecialisation(nodeSpecialisationTable,
myLocation, outgoingLocalRequestsCount, outgoingLocalRequestLocation);
+ }
+
+ overviewTableRow = overviewTable.addChild("tr");
+ nextTableCell = overviewTableRow.addChild("td",
"class", "first");
+ int[] outgoingRequestCountArray = new int[1];
+ int[] outgoingRequestLocation =
stats.getOutgoingRequestLocation(outgoingRequestCountArray);
+ int outgoingRequestsCount =
outgoingRequestCountArray[0];
+
+ if(outgoingRequestsCount > 0) {
+ HTMLNode nodeSpecialisationInfobox =
nextTableCell.addChild("div", "class", "infobox");
+ nodeSpecialisationInfobox.addChild("div",
"class", "infobox-header", "Outgoing\u00a0Request\u00a0Distribution");
+ HTMLNode nodeSpecialisationTable =
nodeSpecialisationInfobox.addChild("div", "class",
"infobox-content").addChild("table");
+ addSpecialisation(nodeSpecialisationTable,
myLocation, outgoingRequestsCount, outgoingRequestLocation);
+ }
}
this.writeHTMLReply(ctx, 200, "OK", pageNode.generate());
@@ -413,7 +454,7 @@
}
}
- private void drawStoreSizeBox(HTMLNode storeSizeInfobox, long
nodeUptimeSeconds) {
+ private void drawStoreSizeBox(HTMLNode storeSizeInfobox, double loc,
long nodeUptimeSeconds) {
storeSizeInfobox.addChild("div", "class", "infobox-header",
"Datastore");
HTMLNode storeSizeInfoboxContent =
storeSizeInfobox.addChild("div", "class", "infobox-content");
@@ -523,16 +564,7 @@
row.addChild("td", thousendPoint.format(cacheFalsePos));
// location-based stats
- boolean hasLoc=true;
double nodeLoc=0.0;
- try {
- nodeLoc=node.getLocationManager().getLocation();
- } catch (Error e) {
- //FIXME: PLEASE, how do we get the node location on the
stats page?
- //Logger.error(this, "why?", e);
- e.printStackTrace();
- hasLoc=false;
- }
double
avgCacheLocation=node.nodeStats.avgCacheLocation.currentValue();
double
avgStoreLocation=node.nodeStats.avgStoreLocation.currentValue();
@@ -558,28 +590,27 @@
row.addChild("td", fix1p4.format(furthestStoreSuccess));
row.addChild("td", fix1p4.format(furthestCacheSuccess));
- if (hasLoc) {
- row=storeSizeTable.addChild("tr");
- row.addChild("td", "Avg. Distance");
- row.addChild("td", fix1p4.format(storeDist));
- row.addChild("td", fix1p4.format(cacheDist));
-
- long
cacheLocationReports=node.nodeStats.avgCacheLocation.countReports();
- long
storeLocationReports=node.nodeStats.avgStoreLocation.countReports();
-
- double storePercent=1.0*storeLocationReports/storeKeys;
- double cachePercent=1.0*cacheLocationReports/cachedKeys;
-
- //Cap the reported value at 100%, as the decaying
average does not account beyond that anyway.
- if (storePercent>1.0) storePercent=1.0;
- if (cachePercent>1.0) cachePercent=1.0;
-
- row=storeSizeTable.addChild("tr");
- row.addChild("td", "Distance Stats");
- row.addChild("td", fix3p1pct.format(storePercent));
- row.addChild("td", fix3p1pct.format(cachePercent));
- }
-
+ row = storeSizeTable.addChild("tr");
+ row.addChild("td", "Avg. Distance");
+ row.addChild("td", fix1p4.format(storeDist));
+ row.addChild("td", fix1p4.format(cacheDist));
+
+ long cacheLocationReports =
node.nodeStats.avgCacheLocation.countReports();
+ long storeLocationReports =
node.nodeStats.avgStoreLocation.countReports();
+
+ double storePercent = 1.0 * storeLocationReports / storeKeys;
+ double cachePercent = 1.0 * cacheLocationReports / cachedKeys;
+
+ //Cap the reported value at 100%, as the decaying average does
not account beyond that anyway.
+ if(storePercent > 1.0)
+ storePercent = 1.0;
+ if(cachePercent > 1.0)
+ cachePercent = 1.0;
+
+ row = storeSizeTable.addChild("tr");
+ row.addChild("td", "Distance Stats");
+ row.addChild("td", fix3p1pct.format(storePercent));
+ row.addChild("td", fix3p1pct.format(cachePercent));
}
private void drawUnclaimedFIFOMessageCountsBox(HTMLNode
unclaimedFIFOMessageCountsInfobox) {
@@ -614,10 +645,9 @@
}
- private void drawSwapStatsBox(HTMLNode locationSwapInfobox, long
nodeUptimeSeconds, double swaps, double noSwaps) {
+ private void drawSwapStatsBox(HTMLNode locationSwapInfobox, double
location, long nodeUptimeSeconds, double swaps, double noSwaps) {
locationSwapInfobox.addChild("div", "class", "infobox-header",
"Location swaps");
- double location = node.getLocation();
int startedSwaps = node.getStartedSwaps();
int swapsRejectedAlreadyLocked =
node.getSwapsRejectedAlreadyLocked();
int swapsRejectedNowhereToGo =
node.getSwapsRejectedNowhereToGo();
@@ -816,6 +846,8 @@
static void drawBandwidth(HTMLNode activityList, Node node, long
nodeUptimeSeconds, boolean isAdvancedModeEnabled) {
long[] total = node.collector.getTotalIO();
+ if(total[0] == 0 || total[1] == 0)
+ return;
long total_output_rate = (total[0]) / nodeUptimeSeconds;
long total_input_rate = (total[1]) / nodeUptimeSeconds;
long totalPayload = node.getTotalPayloadSent();
@@ -1052,7 +1084,7 @@
private final static long MAX_CIRCLE_AGE_THRESHOLD = 24l*60*60*1000;
// 24 hours
private final static int HISTOGRAM_LENGTH = 10;
- private void addNodeCircle (HTMLNode circleTable) {
+ private void addNodeCircle (HTMLNode circleTable, double myLocation) {
int[] histogram = new int[HISTOGRAM_LENGTH];
for (int i = 0; i < HISTOGRAM_LENGTH; i++) {
histogram[i] = 0;
@@ -1097,7 +1129,7 @@
histogram[histogramIndex]++;
nodeCircleInfoboxContent.addChild("span", new String[]
{ "style", "class" }, new String[] {
generatePeerCircleStyleString(location.doubleValue(), false, strength),
"connected" }, "x");
}
- nodeCircleInfoboxContent.addChild("span", new String[] {
"style", "class" }, new String[] {
generatePeerCircleStyleString(node.getLocation(), true, 1.0), "me" }, "x");
+ nodeCircleInfoboxContent.addChild("span", new String[] {
"style", "class" }, new String[] { generatePeerCircleStyleString(myLocation,
true, 1.0), "me" }, "x");
//
double histogramPercent;
for (int i = 0; i < HISTOGRAM_LENGTH; i++) {
@@ -1109,8 +1141,24 @@
nodeHistogramGraphCell.addChild("div", new String[] {
"class", "style" }, new String[] { "histogramConnected", "height: " +
fix3pctUS.format(histogramPercent) + "; width: 100%;" }, "\u00a0");
}
}
+
+ private void addSpecialisation(HTMLNode table, double peerLocation, int
incomingRequestsCount, int[] incomingRequestLocation) {
+ HTMLNode nodeHistogramLegendTableRow = table.addChild("tr");
+ HTMLNode nodeHistogramGraphTableRow = table.addChild("tr");
+ int myIndex = (int)(peerLocation *
incomingRequestLocation.length);
+ for (int i = 0; i<incomingRequestLocation.length; i++) {
+ HTMLNode nodeHistogramLegendCell =
nodeHistogramLegendTableRow.addChild("td");
+ HTMLNode nodeHistogramGraphCell =
nodeHistogramGraphTableRow.addChild("td", "style", "height: 100px;");
+ HTMLNode nodeHistogramGraphCell2 =
nodeHistogramLegendCell.addChild("div", "class", "histogramLabel");
+ if(i == myIndex)
+ nodeHistogramGraphCell2 =
nodeHistogramGraphCell2.addChild("span", "class", "me");
+ nodeHistogramGraphCell2.addChild("#",
fix1p1.format(((double) i) / incomingRequestLocation.length ));
+ nodeHistogramGraphCell.addChild("div", new String[] {
"class", "style" }, new String[] { "histogramConnected", "height: " +
fix3pctUS.format(((double)incomingRequestLocation[i]) / incomingRequestsCount)
+ "; width: 100%;" }, "\u00a0");
+ }
- private void addPeerCircle (HTMLNode circleTable, PeerNodeStatus[]
peerNodeStatuses) {
+ }
+
+ private void addPeerCircle (HTMLNode circleTable, PeerNodeStatus[]
peerNodeStatuses, double myLocation) {
int[] histogramConnected = new int[HISTOGRAM_LENGTH];
int[] histogramDisconnected = new int[HISTOGRAM_LENGTH];
for (int i = 0; i < HISTOGRAM_LENGTH; i++) {
@@ -1132,8 +1180,7 @@
peerCircleInfoboxContent.addChild("span", new String[] {
"style", "class" }, new String[] { generatePeerCircleStyleString(0.625, false,
1.0), "mark" }, "+");
peerCircleInfoboxContent.addChild("span", new String[] {
"style", "class" }, new String[] { generatePeerCircleStyleString(0.75, false,
1.0), "mark" }, "--");
peerCircleInfoboxContent.addChild("span", new String[] {
"style", "class" }, new String[] { "position: absolute; top: " +
PEER_CIRCLE_RADIUS + "px; left: " + (PEER_CIRCLE_RADIUS +
PEER_CIRCLE_ADDITIONAL_FREE_SPACE) + "px", "mark" }, "+");
- //
- double myLocation = node.getLocation();
+
PeerNodeStatus peerNodeStatus;
double peerLocation;
double peerDistance;
Added:
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/startssl.pem
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/startssl.pem
(rev 0)
+++
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/startssl.pem
2008-08-10 09:16:13 UTC (rev 21698)
@@ -0,0 +1,44 @@
+-----BEGIN CERTIFICATE-----
+MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
+MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
+Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
+MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
+U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
+cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
+A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
+pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
+OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
+Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
+Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
+HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
+Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
+Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
+26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
+AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
+FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
+ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
+LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
+BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
+Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
+dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
+cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
+YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
+dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
+bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
+YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
+TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
+9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
+jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
+FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
+ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
+ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
+EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
+L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
+yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
+O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
+um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
+NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
+-----END CERTIFICATE-----
Modified: branches/saltedhashstore/freenet/src/freenet/crypt/Global.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/crypt/Global.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/crypt/Global.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -20,44 +20,41 @@
* COUNTER: 1653
* Primality of q, 2q+1, and p is assured 2^200:1.
*/
- public static final DSAGroup DSAgroupBigA =
+ public static final DSAGroup DSAgroupBigA =
new DSAGroup(
- new NativeBigInteger( /* p */
-
"008608ac4f55361337f2a3e38ab1864ff3c98d66411d8d2afc9c526320c541f65078e86bc78494a5d73e4a9a67583f941f2993ed6c97dbc795dd88f0915c9cfbffc7e5373cde13e3c7ca9073b9106eb31bf82272ed0057f984a870a19f8a83bfa707d16440c382e62d3890473ea79e9d50c4ac6b1f1d30b10c32a02f685833c6278fc29eb3439c5333885614a115219b3808c92a37a0f365cd5e61b5861761dad9eff0ce23250f558848f8db932b87a3bd8d7a2f7cf99c75822bdc2fb7c1a1d78d0bcf81488ae0de5269ff853ab8b8f1f2bf3e6c0564573f612808f68dbfef49d5c9b4a705794cf7a424cd4eb1e0260552e67bfc1fa37b4a1f78b757ef185e86e9",
16),
- new NativeBigInteger( /* q */
-
"00b143368abcd51f58d6440d5417399339a4d15bef096a2c5d8e6df44f52d6d379", 16),
- new NativeBigInteger( /* g */
-
"51a45ab670c1c9fd10bd395a6805d33339f5675e4b0d35defc9fa03aa5c2bf4ce9cfcdc256781291bfff6d546e67d47ae4e160f804ca72ec3c5492709f5f80f69e6346dd8d3e3d8433b6eeef63bce7f98574185c6aff161c9b536d76f873137365a4246cf414bfe8049ee11e31373cd0a6558e2950ef095320ce86218f992551cc292224114f3b60146d22dd51f8125c9da0c028126ffa85efd4f4bfea2c104453329cc1268a97e9a835c14e4a9a43c6a1886580e35ad8f1de230e1af32208ef9337f1924702a4514e95dc16f30f0c11e714a112ee84a9d8d6c9bc9e74e336560bb5cd4e91eabf6dad26bf0ca04807f8c31a2fc18ea7d45baab7cc997b53c356",
16));
-
- static final int GROUP_INDEX_BIG_A = 1;
-
- public static final DHGroup
- /* -- Diffie-Hellman Group A ----------------------------
- * For use in internode symmetric-cipher key exchange
- *
- * Diffie-Hellman KE modulus (|p|=1024, g=2)
- *
- * Taken from the IPsec standard
- */
- DHgroupA = new DHGroup(
- new NativeBigInteger(
- "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"+
- "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"+
- "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"+
- "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"+
- "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381"+
- "FFFFFFFFFFFFFFFF", 16),
- Util.TWO);
+ new NativeBigInteger( /* p */
+
"008608ac4f55361337f2a3e38ab1864ff3c98d66411d8d2afc9c526320c541f65078e86bc78494a5d73e4a9a67583f941f2993ed6c97dbc795dd88f0915c9cfbffc7e5373cde13e3c7ca9073b9106eb31bf82272ed0057f984a870a19f8a83bfa707d16440c382e62d3890473ea79e9d50c4ac6b1f1d30b10c32a02f685833c6278fc29eb3439c5333885614a115219b3808c92a37a0f365cd5e61b5861761dad9eff0ce23250f558848f8db932b87a3bd8d7a2f7cf99c75822bdc2fb7c1a1d78d0bcf81488ae0de5269ff853ab8b8f1f2bf3e6c0564573f612808f68dbfef49d5c9b4a705794cf7a424cd4eb1e0260552e67bfc1fa37b4a1f78b757ef185e86e9",
16),
+ new NativeBigInteger( /* q */
+
"00b143368abcd51f58d6440d5417399339a4d15bef096a2c5d8e6df44f52d6d379", 16),
+ new NativeBigInteger( /* g */
+
"51a45ab670c1c9fd10bd395a6805d33339f5675e4b0d35defc9fa03aa5c2bf4ce9cfcdc256781291bfff6d546e67d47ae4e160f804ca72ec3c5492709f5f80f69e6346dd8d3e3d8433b6eeef63bce7f98574185c6aff161c9b536d76f873137365a4246cf414bfe8049ee11e31373cd0a6558e2950ef095320ce86218f992551cc292224114f3b60146d22dd51f8125c9da0c028126ffa85efd4f4bfea2c104453329cc1268a97e9a835c14e4a9a43c6a1886580e35ad8f1de230e1af32208ef9337f1924702a4514e95dc16f30f0c11e714a112ee84a9d8d6c9bc9e74e336560bb5cd4e91eabf6dad26bf0ca04807f8c31a2fc18ea7d45baab7cc997b53c356",
16));
+ public static final int GROUP_INDEX_BIG_A = 1;
+ public static final DHGroup /* -- Diffie-Hellman Group A
----------------------------
+ * For use in internode symmetric-cipher key exchange
+ *
+ * Diffie-Hellman KE modulus (|p|=1024, g=2)
+ *
+ * Taken from the IPsec standard
+ */ DHgroupA = new DHGroup(
+ new NativeBigInteger(
+ "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" +
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381" +
+ "FFFFFFFFFFFFFFFF", 16),
+ Util.TWO);
- public static void main(String[] args) {
- System.err.println(DSAgroupBigA.toString() + '\t' +
- DSAgroupBigA.fingerprintToString());
- System.err.println(DHgroupA.toString() + '\t' +
- DHgroupA.fingerprintToString());
- }
+ public static void main(String[] args) {
+ System.err.println(DSAgroupBigA.toString() + '\t' +
+ DSAgroupBigA.fingerprintToString());
+ System.err.println(DHgroupA.toString() + '\t' +
+ DHgroupA.fingerprintToString());
+ }
public static DSAGroup getGroup(int groupIndex) {
- if(groupIndex == GROUP_INDEX_BIG_A) return DSAgroupBigA;
+ if(groupIndex == GROUP_INDEX_BIG_A)
+ return DSAgroupBigA;
return null;
}
}
Modified: branches/saltedhashstore/freenet/src/freenet/io/comm/DMT.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/io/comm/DMT.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/io/comm/DMT.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -29,9 +29,7 @@
import freenet.support.Buffer;
import freenet.support.Fields;
import freenet.support.ShortBuffer;
-import java.nio.DoubleBuffer;
-
/**
* @author ian
*
@@ -988,27 +986,7 @@
msg.set(PING_SEQNO, seqNo);
return msg;
}
-
- public static final MessageType FNPLinkPing = new
MessageType("FNPLinkPing", PRIORITY_HIGH) {{
- addField(PING_SEQNO, Long.class);
- }};
- public static final Message createFNPLinkPing(long seqNo) {
- Message msg = new Message(FNPLinkPing);
- msg.set(PING_SEQNO, seqNo);
- return msg;
- }
-
- public static final MessageType FNPLinkPong = new
MessageType("FNPLinkPong", PRIORITY_HIGH) {{
- addField(PING_SEQNO, Long.class);
- }};
-
- public static final Message createFNPLinkPong(long seqNo) {
- Message msg = new Message(FNPLinkPong);
- msg.set(PING_SEQNO, seqNo);
- return msg;
- }
-
public static final MessageType FNPPong = new MessageType("FNPPong",
PRIORITY_HIGH) {{
addField(PING_SEQNO, Integer.class);
}};
Modified: branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java 2008-08-10
09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java 2008-08-10
09:16:13 UTC (rev 21698)
@@ -59,7 +59,7 @@
L10n(String selected) {
selectedLanguage = mapLanguageNameToShortCode(selected);
- File tmpFile = new File(L10n.PREFIX + selected +
L10n.OVERRIDE_SUFFIX);
+ File tmpFile = new File(L10n.PREFIX + selectedLanguage +
L10n.OVERRIDE_SUFFIX);
try {
if(tmpFile.exists() && tmpFile.canRead() &&
tmpFile.length() > 0) {
@@ -116,7 +116,7 @@
// If there is no need to keep it in the override,
remove it...
// unless the original/default is the same as the
translation
- if(("".equals(value) ||
L10n.getString(key).equals(value)) &&
!L10n.getDefaultString(key).equals(value)) {
+ if (("".equals(value)) ||
(value.equals(currentTranslation.get(key)))) {
translationOverride.removeValue(key);
} else {
value = value.replaceAll("(\r|\n|\t)+", "");
Modified:
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.de.properties
2008-08-10 09:16:13 UTC (rev 21698)
@@ -8,6 +8,7 @@
Announcer.announceDisabledTooOldTitle=Ank?ndigungen deaktiviert (zu alt)
Announcer.announceLoading=Freenet l?dt gerade die Seednodes(Saat-Knoten)-Datei
herunter, sodass es versuchen kann sich im Rest des Netzwerks bekannt zu
machen. Die Bekanntgabe kann ein paar Minuten dauern.
Announcer.coolingOff=In den n?chsten ${time} Sekunden wartet der Knoten auf
die Knoten, bei denen er sich gerade gemeldet hat um sich zu verbinden. Wenn
dies nicht gen?gend Knoten hervorbringt, wird er es mit einem anderen Knoten
versuchen.
+Bookmark.noName=unbenannt
BookmarkEditorToadlet.addBookmark=Lesezeichen hinzuf?gen
BookmarkEditorToadlet.addCategory=Kategorie hinzuf?gen
BookmarkEditorToadlet.addDefaultBookmarks=Die Standard-Lesezeichen erneut
hinzuf?gen
@@ -90,7 +91,7 @@
ConfigToadlet.pluginmanager2=Plugin-Manager 2
ConfigToadlet.possibilitiesTitle=Fortsetzen
ConfigToadlet.reset=Zur?cksetzen
-ConfigToadlet.returnToNodeConfig=Zur Knoten-Konfiguration zur?ckkehren
+ConfigToadlet.returnToNodeConfig=Zur?ck zur Knoten-Konfiguration
ConfigToadlet.shortTitle=Konfiguration
ConfigToadlet.ssl=SSL (ben?tigt Neustart)
ConfigToadlet.title=Freenet-Knoten-Konfiguration
@@ -435,7 +436,7 @@
FirstTimeWizardToadlet.noNetworkIF=Keine zus?tzliche Netzwerk-Schnittstelle
gefunden
FirstTimeWizardToadlet.noNetworkIFLong=Freenet hat keine zus?tzliche
Netzwerk-Schnittstelle gefunden. Es wird annehmen, dass Sie sich von Ihrem
Computer (und nur von Ihrem Computer) mit ihm verbinden.
FirstTimeWizardToadlet.opennetNo=Ja, ich habe mindestens 5 Freunde, die
bereits Freenet benutzen und werde Ihre Kontaktdaten auf der Freunde-Seite
eintragen.
-FirstTimeWizardToadlet.opennetWarning=Wenn Freenet dort wo Sie leben illegal
ist oder wenn Sie es benutzen um Inhalte abzurufen, die Sie in Schwierigkeiten
bringen k?nnten, kann es sein, dass dem Knoten zu sagen, dass er sich mit
automatisch mit Fremden verbinden soll, gef?hrlich ist, da es das Leben eines
Angreifers deutlich erleichtert. Freenet ist immernoch Alpha-Software und wir
geben keine Garantie f?r die Sicherheit.
+FirstTimeWizardToadlet.opennetWarning=Wenn Freenet dort wo Sie leben illegal
ist oder wenn Sie es benutzen um Inhalte abzurufen, die Sie in Schwierigkeiten
bringen k?nnten, kann es sein, dass dem Knoten zu sagen, dass er sich
automatisch mit Fremden verbinden soll, gef?hrlich ist, da es das Leben eines
Angreifers deutlich erleichtert. Freenet ist immer noch experimentell und wir
geben keine Garantie f?r die Sicherheit.
FirstTimeWizardToadlet.opennetYes=Nein, ich m?chte, dass der Knoten
automatisch Fremde findet mit denen er sich verbinden kann.
FirstTimeWizardToadlet.skipWizard=Ich bin kein Neuling, bitte ?berspringe den
Assistenten!
FirstTimeWizardToadlet.step1Title=Freenet-Einrichtungs-Assistent! - Freunde
und Fremde
@@ -661,6 +662,9 @@
Node.inBWLimit=Limit f?r hereinkommende Bandbreite (Bytes pro Sekunde)
Node.inBWLimitLong=Limit f?r die hereinkommende Bandbreite (Bytes/Sek); der
Knoten wird versuchen dieses nicht zu ?berschreiten; -1 = 4x das gesetzte Limit
f?r die ausgehende Bandbreite
Node.invalidStoreSize=Die Speicher-Gr??e muss mindestens 32MB betragen
+Node.java14ShortText=Java 1.4 wird in naher Zukunft nicht mehr unterst?tzt
werden, bitte aktualisieren Sie auf mindestens 1.5.
+Node.java14Text=Sie f?hren Freenet auf Java 1.4 aus. Bitte aktualisieren Sie
auf mindestens Java 1.5. Die automatische Aktualisierung wurde vor?bergehend
deaktiviert, da zuk?nftige Versionen m?glicherweise ?berhaupt nicht starten.
+Node.java14Title=Java 1.4 wird nicht l?nger unterst?tzt
Node.l10nLanguage=Die Sprache die der Knoten benutzt um Nachrichten anzuzeigen
Node.l10nLanguageLong=Diese Einstellung ?ndert die Sprache in der Nachrichten
angezeigt werden. Beachten Sie, dass manche Zeichenfolgen erst beim n?chsten
Start des Knotens ?bersetzt werden.
Node.maxHTL=Maximale HTL
@@ -689,6 +693,10 @@
Node.passOpennetPeersThroughDarknetLong=Wenn aktiviert, werden
Opennet-Knotenreferenzen (NIEMALS unsere eigene Darknet-Knotenreferenz) ?ber
unsere Darknet-Partner weitergeleitet. Sodass ein Knoten (dieser Knoten oder
seine Partner) Opennet-Partner von seinen Darknet-Partnern bekommen kann. Dies
ist n?tzlich, da es uns erlaubt einen Bootstrap (Erlangung neuer Quellen ohne
vorher welche zu haben) nach neuen Opennet-Partnern durchzuf?hren nachdem wir
unsere Partner, zum Beispiel durch Ausfallzeiten, verloren haben. Jedoch kann
es eine Traffic(Verkehrs)-Analyse etwas erleichtern, deshalb sollten Sie es
ausschalten wenn Sie paranoid sind.
Node.port=FNP-Port Nummer (UDP)
Node.portLong=UDP-Port f?r Knoten-zu-Knoten Kommunikationen
(Freenet-Knoten-Protokoll)
+Node.publishOurPeersLocation=Sollen wir die Position unserer Partner an unsere
Partner weitergeben?
+Node.publishOurPeersLocationLong=Sollen wir die Position unserer Partner an
unsere Partner weitergeben? Dies zu tun, hilft dem Routing gibt aber
Informationen an potenzielle Angreifer preis.
+Node.routeAccordingToOurPeersLocation=Sollen wir die Positionen der Partner
unserer Partner zu Routing-Zwecken ber?cksichtigen?
+Node.routeAccordingToOurPeersLocationLong=Sollen wir die Positionen der
Partner unserer Partner zu Routing-Zwecken ber?cksichtigen? Dies zu tun
verbessert das Routing, k?nnte aber einem potenziellen Angreifer helfen.
Node.storeDirectory=Speicher-Verzeichnis
Node.storeDirectoryLong=Name des Verzeichnisses in welchem die
Speicher-Dateien platziert werden
Node.storeMaxMemTooHigh=Mehr als 80% Ihres RAMs (Hauptspeichers) an BDB
(Datenbank) abzugeben ist wahrscheinlich nicht das was Sie tun wollen!
@@ -781,6 +789,10 @@
OpennetUserAlert.warningTitle=Warnung: Unsicherer Modus aktiviert: Ihr Knoten
wird sich mit Fremden verbinden
PNGFilter.invalidHeader=Die Datei, die Sie versucht haben abzurufen, ist keine
PNG-Datei. Sie enth?lt keinen g?ltigen PNG-Header (Dateikopf). Es k?nnte sich
um ein anderes Dateiformat handeln und Ihr Browser k?nnte etwas gef?hrliches
damit tun, deshalb wurde sie blockiert.
PNGFilter.invalidHeaderTitle=Keine PNG-Datei - ung?ltiger Header
+PageMaker.modeAdvanced=Erweiterte Oberfl?che
+PageMaker.modeAdvancedTooltip=Eine erweiterte Oberfl?che, die nur erfahrene
Freenet-Benutzer und Entwickler werden benutzen m?ssen
+PageMaker.modeSimple=Einfache Oberfl?che
+PageMaker.modeSimpleTooltip=Eine einfache Oberfl?che, die alle Benutzer
bedienen k?nnen
PeerManagerUserAlert.clockProblem=${count} Ihrer Knoten sind nicht in der Lage
sich zu verbinden, weil ihre System-Zeit sich um mehr als 24 Stunden von Ihrer
unterscheidet. Bitte ?berpr?fen Sie, ob Ihr Computer die korrekte Zeit hat.
Eine inkorrekte Zeit wird das Fehlschlagen von vielen Knoten- und
Client-Mechanismen verursachen.
PeerManagerUserAlert.clockProblemTitle=Zeit-Problem
PeerManagerUserAlert.connError=${count} Ihrer Partner k?nnen sich aus einer
unbekannten Ursache nicht verbinden, m?glicherweise aufgrund eines fehlerhaften
Knotens oder einer besch?digten Knoten-Referenz.
@@ -853,7 +865,7 @@
PproxyToadlet.loadOfficialPlugin=Ein offizielles Plugin hinzuf?gen
PproxyToadlet.loadOfficialPluginLabel=Offizielles Plugin laden
PproxyToadlet.loadOfficialPluginText=Diese Plugins liegen auf den Servern des
Freenet-Projekts. Wir glauben, dass diese Plugins keine pers?nlichen
Informationen ungefragt herausgeben, auch wenn wir es nicht garantieren.
-PproxyToadlet.loadOfficialPluginWarning=WARNUNG: Das Laden eines offiziellen
Plugins beinhaltet das Herunterladen des Plugins aus dem Internet (nicht aus
dem Freenet). Ein Angreifer k?nnte das Herunterladen bemerken und vielleicht
manipulieren. Laden Sie hier keine Plugins herunter wenn dies ein Problem
darstellt.
+PproxyToadlet.loadOfficialPluginWarning=WARNUNG: Das Laden eines offiziellen
Plugins beinhaltet das Herunterladen des Plugins aus dem Internet (nicht aus
dem Freenet). Laden Sie hier keine Plugins herunter wenn dies ein Problem
darstellt.
PproxyToadlet.loadOtherPlugin=Ein inoffizielles Plugin hinzuf?gen
PproxyToadlet.loadOtherPluginText=Hier k?nnen Sie die URL eines Plugins
eingeben, das geladen werden soll. Andere Plugins als die oben aufgelisteten,
werden von uns noch nicht einmal im Entferntesten unterst?tzt oder darauf
gepr?ft, ob sie pers?nliche Informationen herausgeben. Wenn Sie also hier ein
inoffizielles Plugin laden, sind Sie auf sich allein gestellt.
PproxyToadlet.loadOtherURLLabel=Plugin-URL
@@ -876,7 +888,7 @@
PproxyToadlet.reloadPluginTitle=Plugin neu laden
PproxyToadlet.reloadPurgeWarning=Das Plugin vor dem neu laden aus dem Cache
(Zwischenspeicher) l?schen. Wenn das Plugin aus dem Internet geladen wurde,
wird es nochmals heruntergeladen!
PproxyToadlet.reloadWarning=Warnung: Einige Plugins haben Probleme mit dem
erneuten Laden!
-PproxyToadlet.returnToPluginPage=Zur Plugin-Seite zur?ckkehren
+PproxyToadlet.returnToPluginPage=Zur?ck zur Plugin-Seite
PproxyToadlet.startedAtTitle=Gestartet am
PproxyToadlet.startingPluginName=Plugin-Name
PproxyToadlet.startingPluginStatus=Aktueller Status
@@ -903,8 +915,12 @@
QueueToadlet.completedU=Vollst?ndige Uploads (${size})
QueueToadlet.completedUDirectory=Vollst?ndige Verzeichnis-Uploads (${size})
QueueToadlet.download=Download
+QueueToadlet.downloadFiles=Massen-Downloads
+QueueToadlet.downloadFilesInstructions=Sie k?nnen in das Textfeld unten eine
Liste mit herunterzuladenden Schl?sseln einf?gen (ein Schl?ssel pro Zeile)
QueueToadlet.downloadSucceeded=Die Datei ${origlink}${filename}${/origlink}
wurde erfolgreich heruntergeladen. ${link}Klicken Sie hier${/link} um die Datei
zu ?ffnen (${size}).
QueueToadlet.downloadSucceededTitle=Erfolgreich heruntergeladen: ${filename}
+QueueToadlet.enqueuedFailure=Die folgenden ${number} Schl?ssel konnten nicht
zur Warteschlange hinzugef?gt werden:
+QueueToadlet.enqueuedSuccessfully=Die folgenden ${number} Schl?ssel wurden
erfolgreich in die Warteschlange eingereiht:
QueueToadlet.errorAccessDenied=Fehler: Zugriff verweigert!
QueueToadlet.errorAccessDeniedFile=Die aktuelle Konfiguration des Knotens
untersagt Ihnen das Hochladen der Datei "${file}".
QueueToadlet.errorDToDisk=Kann nicht auf den Datentr?ger herunterladen
@@ -1037,6 +1053,10 @@
SimpleToadletServer.portLong=Der TCP-Port auf dem FProxy Nachrichten empfangen
soll
SimpleToadletServer.ssl=SSL aktivieren?
SimpleToadletServer.sslLong=SSL auf FProxy aktivieren?
+StartupToadlet.entropyErrorContent=Auf Ihrem System steht nicht genug Entropie
zur Verf?gung... Freenet wird erst starten, wenn es genug gesammelt hat.
+StartupToadlet.entropyErrorTitle=Es ist nicht genug Entropie verf?gbar!
+StartupToadlet.isStartingUp=Ihr Knoten startet gerade, bitte warten Sie.
+StartupToadlet.title=Freenet startet gerade
StaticToadlet.pathInvalidChars=Der angegebene URI enth?lt nicht erlaubte
Zeichen.
StaticToadlet.pathNotFound=Der Pfad, den Sie angegeben haben, existiert nicht.
StaticToadlet.pathNotFoundTitle=Pfad nicht gefunden
@@ -1120,8 +1140,9 @@
Toadlet.notSupportedWithClass=Ihr Browser hat eine Anfrage gesendet, die
Freenet (${class}) nicht verstehen konnte.
Toadlet.ok=OK
Toadlet.permRedirectWithReason=Permanente Weiter-/Umleitung: ${reason}
-Toadlet.returnToNodeHomepage=Zur Knoten-Startseite zur?ckkehren
-Toadlet.returnToPrevPage=Zur vorherigen Seite zur?ckkehren
+Toadlet.returnToNodeHomepage=Zur?ck zur Knoten-Startseite
+Toadlet.returnToPrevPage=Zur?ck zur vorherigen Seite
+Toadlet.returnToQueuepage=Zur?ck zur Warteschlange
Toadlet.tempRedirectWithReason=Tempor?re Weiter-/Umleitung: ${reason}
Toadlet.unauthorized=Der Zugriff aus diese Seite ist Ihnen nicht gestattet.
Toadlet.unauthorizedTitle=Nicht erlaubt
Modified:
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
2008-08-10 09:16:13 UTC (rev 21698)
@@ -330,6 +330,7 @@
FProxyToadlet.notEnoughMetaStrings=Not enough meta-strings
FProxyToadlet.notFoundTitle=Not Found
FProxyToadlet.openAsText=${link}Click here${/link} to open the file as plain
text (this should not be dangerous but it may be garbled).
+FProxyToadlet.openAsThawIndex=${link}Click here${/link} to open the file with
thaw index browser (read warning above!).
FProxyToadlet.openForce=${link}Click here${/link} to open the file as ${mime}
(read warning above!).
FProxyToadlet.openForceDisk=${link}Click here${/link} to force your browser to
download the file to disk.
FProxyToadlet.openPossRSSForceDisk=${link}Click here${/link} to try to force
your browser to download the file to disk (this ${bold}this may also be
dangerous${/bold} if you run Firefox 2.0.0, 2.0.1 should fix this).
@@ -694,8 +695,8 @@
Node.passOpennetPeersThroughDarknetLong=If true, opennet noderefs (NEVER our
own darknet noderef) will be relayed through our darknet peers. So a node (this
node, or its peers) can get opennet peers from its darknet peers. This is
useful because it allows us to bootstrap new opennet peers after having lost
our peers due to downtime, for example. However, it may make traffic analysis
slightly easier, so turn it off if you are paranoid.
Node.port=FNP port number (UDP)
Node.portLong=UDP port for node-to-node communications (Freenet Node Protocol)
-Node.publishOurPeersLocation=Shall we send our peer's location to our peers?
-Node.publishOurPeersLocationLong=Shall we send our peer's location to our
peers? Doing so helps routing but gives some information away to a potential
attacker.
+Node.publishOurPeersLocation=Shall we send our peers' locations to our peers?
+Node.publishOurPeersLocationLong=Shall we send our peers' locations to our
peers? Doing so helps routing but gives some information away to a potential
attacker.
Node.routeAccordingToOurPeersLocation=Shall we use the locations of the peers
of our peers into account for routing purposes?
Node.routeAccordingToOurPeersLocationLong=Shall we use the locations of the
peers of our peers into account for routing purposes? Doing so helps routing
but might help a potential attacker.
Node.storeDirectory=Store directory
@@ -712,6 +713,8 @@
Node.tooSmallMTU=Too small MTU
Node.tooSmallMTULong=Your connection's MTU appears to be ${mtu} bytes. Freenet
will not function well with an MTU of less than ${minMTU} bytes: connections
will be unreliable and possibly slow. Please fix the problem if possible.
Node.tooSmallMTUShort=Connection problems: Your connection's MTU is too short
for Freenet to work well. Expect problems.
+Node.withAnnouncement=Allow the node to bootstrap itself using seednodes?
+Node.withAnnouncementLong=Allow the node to bootstrap itself using seednodes?
While this has to be the default behaviour, it's insecure by design.
NodeClientCore.couldNotFindOrCreateDir=Could not find or create directory
NodeClientCore.downloadAllowedDirs=Directories downloading is allowed to
NodeClientCore.downloadAllowedDirsLong=Semicolon separated list of directories
to which downloads are allowed. "downloads" means downloadsDir, empty means no
downloads to disk allowed, "all" means downloads allowed from anywhere.
WARNING! If this is set to "all" any user can download any file to anywhere on
your computer!
@@ -825,6 +828,10 @@
PeersSayKeyBlownAlert.failedTransferSayBlownLabel=These nodes told us that the
key has been blown, but then failed to transfer the revocation certificate:
PeersSayKeyBlownAlert.titleWithCount=Auto-update key blown according to
${count} peer(s)!
PeersSayKeyBlownAlert.short=Some of your peers say the auto-update key is
blown!
+PluginConfig.configFile=Plugins configuration file
+PluginConfig.configFileLong=Path/Filename for the file which stores the plugin
configuration
+PluginConfig.installDir=Plugins installation directory
+PluginConfig.installDirLong=Directory where to install the plugins
PluginManager.cannotSetOnceLoaded=Cannot set the plugins list once loaded
PluginManager.loadedOnStartup=Plugins to load on startup
PluginManager.loadedOnStartupLong=Classpath, name and location for plugins to
load when node starts up
@@ -857,11 +864,15 @@
PproxyToadlet.classNameTitle=Class Name
PproxyToadlet.downloadNotAllowedFromRemoteServer=Download of plugins is only
allowed from our server.
PproxyToadlet.Error=Error
+PproxyToadlet.fileonly=local files only
PproxyToadlet.internalIDTitle=Internal ID
PproxyToadlet.Load=Load
+PproxyToadlet.loadFreenetPlugin=Add an Unofficial Plugin from Freenet
+PproxyToadlet.loadFreenetPluginText=Here you can enter the Freenet URI of a
plugin you want to load. These plugins are not even remotely supported or
checked for privacy leaks by us, so if you load a remote plugin here, you are
basically on your own.
+PproxyToadlet.loadFreenetURLLabel=Plugin Key
PproxyToadlet.loadOfficialPlugin=Add an Official Plugin
PproxyToadlet.loadOfficialPluginText=These plugins are hosted on servers of
The Freenet Project. We believe that these plugins are free of privacy leaks
though we will not guarantee it.
-PproxyToadlet.loadOfficialPluginWarning=WARNING: Loading an official plugin
involves downloading it from the internet (not from Freenet). An attacker could
see the download, and maybe interfere with it. Do not load plugins here if that
is a problem.
+PproxyToadlet.loadOfficialPluginWarning=WARNING: Loading an official plugin
involves downloading it from the internet (not from Freenet). Do not load
plugins here if that is a problem.
PproxyToadlet.loadOfficialPluginLabel=Load Official Plugin
PproxyToadlet.loadOtherPlugin=Add an Unofficial Plugin
PproxyToadlet.loadOtherPluginText=Here you can enter the URL of a plugin you
want to load. Other plugins than the ones listed above are not even remotely
supported or checked for privacy leaks by us, so if you load a remote plugin
here, you are basically on your own.
Modified:
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.es.properties
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.es.properties
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.es.properties
2008-08-10 09:16:13 UTC (rev 21698)
@@ -1,5 +1,7 @@
+Bookmark.noName=sin nombre
BookmarkEditorToadlet.addBookmark=A?adir marcador
BookmarkEditorToadlet.addCategory=A?adir categor?a
+BookmarkEditorToadlet.addDefaultBookmarks=Agregar nuevamente los marcadores
por defecto
BookmarkEditorToadlet.addNewBookmark=A?adir un nuevo marcador
BookmarkEditorToadlet.addNewCategory=A?adir una nueva categor?a
BookmarkEditorToadlet.addedNewBookmark=Se ha a?adido satisfactoriamente el
nuevo marcador.
@@ -17,10 +19,12 @@
BookmarkEditorToadlet.deleteCategoryConfirm=?Est? seguro de borrar ${bookmark}
y todos sus descendientes?
BookmarkEditorToadlet.deleteSucceeded=Se ha borrado el marcador.
BookmarkEditorToadlet.deleteSucceededTitle=Borrado exitoso
+BookmarkEditorToadlet.descLabel=Descripcion del marcador:
BookmarkEditorToadlet.edit=Editar
BookmarkEditorToadlet.editBookmarkTitle=Modificar marcador
BookmarkEditorToadlet.editCategoryTitle=Editar categor?a
BookmarkEditorToadlet.error=Error
+BookmarkEditorToadlet.hasAnActivelinkLabel=Tiene el freesite un activelink?
BookmarkEditorToadlet.invalidKey=La clave de Freenet no es v?lida.
BookmarkEditorToadlet.invalidKeyTitle=Clave inv?lida
BookmarkEditorToadlet.invalidKeyWithReason=Clave inv?lida para Freenet.
@@ -36,6 +40,7 @@
BookmarkEditorToadlet.title=Editor de marcadores
BookmarkEditorToadlet.urlDecodeError=Error de decodificaci?n de URL
BookmarkItem.bookmarkUpdated=El sitio de marcadores de nombre ${name} ha
publicado la edici?n ${edition}.
+BookmarkItem.bookmarkUpdatedShort=Marcador actualizado: ${name}
BookmarkItem.bookmarkUpdatedTitle=Marcador actualizado: ${name}
BookmarkItem.bookmarkUpdatedWithLink=El sitio de marcadores de nombre
${link}${name}${/link} ha publicado la edici?n ${edition}.
BookmarkItem.deleteBookmarkUpdateNotification=Borrar notificaci?n
@@ -53,6 +58,9 @@
CSSTokenizerFilter.invalidURLContents=Contenidos inv?lidos de url()
CSSTokenizerFilter.supplementalCharsNotSupported=NO SE SOPORTAN LOS CARACTERES
UCS-4 POR ENCIMA DE 0xFFFF
CSSTokenizerFilter.unknownAtIdentifierLabel=Desconocido: @identifier:
+ClockProblemDetectedUserAlert.shortText=El reloj de tu computadora no esta
bien, Freenet tiene problemas para conectarse de esta forma.
+ClockProblemDetectedUserAlert.text=Freenet detecto que la fecha y hora del
reloj de tu computadora son incorrectos. Corrije el reloj y reinicia el nodo.
+ClockProblemDetectedUserAlert.title=El reloj de tu computadora esta fuera de
hora
ConfigToadlet.appliedFailureExceptions=Se han aplicado los cambios de
configuraci?n, con las siguientes excepciones:
ConfigToadlet.appliedFailureTitle=No se ha aplicado la configuraci?n
ConfigToadlet.appliedSuccess=Los cambios en la configuraci?n se han aplicado
con ?xito.
@@ -66,9 +74,30 @@
ConfigToadlet.reset=Reiniciar
ConfigToadlet.returnToNodeConfig=Regresar a la configuraci?n del nodo
ConfigToadlet.shortTitle=Configuraci?n
+ConfigToadlet.ssl=SSL (requiere reiniciar)
ConfigToadlet.title=Configuraci?n del nodo de Freenet
ConfigurablePersister.doesNotExistCannotCreate=El documento no existe y no se
ha podido crearlo
ConfigurablePersister.existsCannotReadWrite=El documento existe y no se puede
leer/escribir
+ConnectionsToadlet.nodeStatus.BUSY=OCUPADO
+ConnectionsToadlet.nodeStatus.CLOCK PROBLEM=PROBLEMA DE RELOJ
+ConnectionsToadlet.nodeStatus.CONNECTED=CONECTADO
+ConnectionsToadlet.nodeStatus.CONNECTION ERROR=ERROR DE CONECCI?N
+ConnectionsToadlet.nodeStatus.DISABLED=DESACTIVADO
+ConnectionsToadlet.nodeStatus.DISCONNECTED=DESCONECTADO
+ConnectionsToadlet.nodeStatus.DISCONNECTING=DESCONECTANDO
+ConnectionsToadlet.nodeStatus.LISTENING=ESCUCHANDO
+ConnectionsToadlet.nodeStatus.NEVER CONNECTED=NUNCA CONECTADO
+ConnectionsToadlet.nodeStatus.TOO NEW=MUY NUEVO
+ConnectionsToadlet.nodeStatus.TOO OLD=MUY VIEJO
+ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=ESTADO DESCONOCIDO
+ConnectivityToadlet.addressTitle=Direcci?n
+ConnectivityToadlet.connectivity=Conectividad a Internet
+ConnectivityToadlet.connectivityTitle=Conectividad
+ConnectivityToadlet.localRemoteTitle=Local/Remoto
+ConnectivityToadlet.noreply=SIN RESPUESTA
+ConnectivityToadlet.remote=REMOTO
+ConnectivityToadlet.summaryTitle=Conectividad
+ConnectivityToadlet.title=Conectividad a internet de ${nodeName}
ContentDataFilter.unknownCharset=La p?gina que se va a mostrar tiene un juego
de caracteres desconocido. Esto significa que no se ha podido filtrar la
p?gina, lo cual puede comprometer su anonimato.
ContentDataFilter.unknownCharsetTitle=?Juego de caracteres desconocido!
ContentDataFilter.warningUnknownCharsetTitle=Atenci?n: juego de caracteres
desconocido (${charset})
@@ -171,8 +200,10 @@
DarknetConnectionsToadlet.urlReference=Introduzca aqu? la URL de la referencia:
DarknetConnectionsToadlet.versionTitle=Versi?n
ExtOldAgeUserAlert.extTooOld=El archivo freenet-ext.jar parece anticuado: se
recomienda encarecidamente actualizarlo desde
http://downloads.freenetproject.org/alpha/freenet-ext.jar.
+ExtOldAgeUserAlert.extTooOldShort=El archivo freenet-ext.jar esta
desactualizado, actualizar!
ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext demasiado antiguo
FProxyToadlet.abortToHomepage=Abortar y volver a la p?gina principal de FProxy
+FProxyToadlet.alertsTitle=Alertas
FProxyToadlet.backToFProxy=${link}Pulse aqu?${/link} para ir a la p?gina
principal de FProxy
FProxyToadlet.backToReferrer=${link}Pulse aqu?${/link} para volver a la p?gina
previa.
FProxyToadlet.cantBindPort=?No se puede asociar fproxy a ese puerto!
@@ -256,6 +287,8 @@
FcpServer.isEnabledLong=Est? activado el servidor FCP?
FcpServer.portNumber=Puerto FCP
FcpServer.portNumberLong=Puerto empleado por el servidor FCP
+FcpServer.ssl=Activar SSL?
+FcpServer.sslLong=Activar SSL en el servicio de FCP
FetchException.longError.1=Demasiados niveles de recursi?n en los documentos
FetchException.longError.10=El documento no est? en el contenedor
FetchException.longError.11=Demasiadas partes en la ruta - ?no es un
manifiesto? Reintente eliminando una parte
@@ -320,17 +353,22 @@
FileOffer.askUserTitle=Transferencia directa de archivos
FileOffer.commentLabel=Comentario:
FileOffer.failedReceiveHeader=La transferencia del documento ${filename} desde
${node} ha fallado.
+FileOffer.failedReceiveShort=Fallo en la transferencia del archivo ${filename}
desde ${node}.
FileOffer.failedReceiveTitle=Fallo durante la recepci?n del documento
FileOffer.fileLabel=Archivo:
FileOffer.mimeLabel=Tipo MIME:
FileOffer.offeredFileHeader=El nodo ${name} ha ofrecido un documento:
+FileOffer.offeredFileShort=Tu amigo ${node} te ofrece el archivo ${filename}.
FileOffer.rejectTransferButton=Rechazar transferencia
FileOffer.senderLabel=Remitente:
FileOffer.sizeLabel=Tama?o:
FileOffer.succeededReceiveHeader=La transferencia del document ${filename}
desde ${node} se ha completado con ?xito.
+FileOffer.succeededReceiveShort=Archivo ${filename} recibido con exito desde
${node}.
FileOffer.succeededReceiveTitle=Documento recibido con ?xito
FirstTimeWizardToadlet.bandwidthLimit=L?mites de ancho de banda
FirstTimeWizardToadlet.bandwidthLimitLong=Por favor, seleccione su tipo de
conexi?n y velocidad de acceso en el men? desplegable a continuaci?n.
+FirstTimeWizardToadlet.bwlimitHigherSpeed=maxima velocidad
+FirstTimeWizardToadlet.bwlimitLowerSpeed=m?nima velocidad
FirstTimeWizardToadlet.chooseNodeName=?Hace falta un nombre para el nodo!
FirstTimeWizardToadlet.chooseNodeNameLong=Por favor, proporcione un nombre
para el nodo en el campo siguiente (se recomienda un apodo con, si quiere, una
direcci?n de correo). Esto es para que sus amigos (contactos de confianza,
a?adidos manualmente) puedan identificarle con facilidad. Esto no se muestra a
los desconocidos (nodos no de confianza a?adidos autom?ticamente). Sepa que
cualquier contacto, amigo o desconocido, puede identificar trivialmente su
direcci?n IP, aunque no pueden saber con facilidad qu? peticiones est? usted
haciendo.
FirstTimeWizardToadlet.congratz=?Bienvenido a bordo!
@@ -338,9 +376,11 @@
FirstTimeWizardToadlet.connectToStrangers=?Conectarse a desconocidos?
FirstTimeWizardToadlet.connectToStrangersLong=Si permite a Freenet conectarse
con desconocidos, Freenet ser? menos seguro para usted. Cualquiera podr?
averiguar que usted usa Freenet, y entes enemigos podr?n conectarse a este
nodo. Si no lo permite, tendr? que conectarse manualmente con al menos tres
Amigos (personas de su confianza) que ya est?n usando Freenet.
FirstTimeWizardToadlet.continue=Continuar
+FirstTimeWizardToadlet.continueEnd=Clickea aqui para comenzar a usar Freenet!
FirstTimeWizardToadlet.datastoreSize=Tama?o del almac?n de datos
FirstTimeWizardToadlet.datastoreSizeLong=Por favor, seleccione el tama?o del
almac?n de datos. Este almac?n act?a como una cach?; al guardar datos de la red
favorece que las transferencias sean m?s r?pidas al solicitarse documentos
populares. Cuanto m?s espacio pueda dedicar, m?s se beneficiar? la comunidad y
m?s r?pido funcionar? este nodo.
FirstTimeWizardToadlet.enableOpennet=?Conectarse autom?ticamente a nodos
desconocidos no de confianza?
+FirstTimeWizardToadlet.fivePercentDisk=(= 5% del espacio libre en disco)
FirstTimeWizardToadlet.homepageTitle=?Asistente para la primera vez en Freenet!
FirstTimeWizardToadlet.iDoTrust=?Conf?a en las conexiones desde ${interface}
(${ip}) ?
FirstTimeWizardToadlet.isNetworkTrusted=?Es de confianza la red local?
@@ -354,6 +394,7 @@
FirstTimeWizardToadlet.step4Title=?Asistente para la primera vez en Freenet! -
Tama?o del almac?n de datos
FirstTimeWizardToadlet.step5Title=?Asistente para la primera vez en Freenet! -
Configuraci?n de red
FirstTimeWizardToadlet.step7Title=?Asistente para la primera vez en Freenet! -
Enhorabuena, el nodo est? configurado
+FirstTimeWizardToadlet.warningTitle=Cuidado!
FirstTimeWizardToadlet.welcomeInfoboxContent1=Bienvenido al asistente para la
primera ejecuci?n de Freenet. Esta herramienta le ayudar? a poner a punto el
nodo r?pida y f?cilmente. Por favor,
FirstTimeWizardToadlet.welcomeInfoboxTitle=?Bienvenido al asistente para la
primera vez en Freenet!
GIFFilter.invalidHeader=El documento no comienza con una cabecera GIF v?lida.
@@ -376,26 +417,31 @@
HTMLFilter.tooManyNestedStyleOrScriptTags=Demasiadas etiquetas anidadas
'style' o 'script' - procesado ambiguo o inv?lido
HTMLFilter.tooManyNestedStyleOrScriptTagsLong=Demasiados </style> anidados -
procesado ambiguo o inv?lido, no se puede filtrar con fiabilidad as? que se
eliminar?n las etiquetas m?s interiores - puede aparecer basura en el navegador
HTMLFilter.unknownTag=etiqueta desconocida ${tag}
+IPDetectorPluginManager.connectionProblems=Problemas de conecci?n:
IPDetectorPluginManager.direct=Parece estar conectado directamente a internet.
Enhorabuena, deber?a poder conectar con cualquier otro nodo de Freenet.
IPDetectorPluginManager.directTitle=Se ha detectado que la conexi?n a internet
es directa
IPDetectorPluginManager.fullCone=Su conexi?n parece estar tras un enrutador de
tipo "full cone NAT". Enhorabuena, el nodo deber?a ser capaz de conectarse a
cualquier otro nodo de Freenet.
IPDetectorPluginManager.fullConeTitle=Se ha detectado una conexi?n de tipo
'Full cone NAT'
IPDetectorPluginManager.noConnectivity=Su conexi?n a internet parece no
soportar UDP. A no ser que esta detecci?n sea err?nea, es improbable que
Freenet pueda funcionar en esta m?quina por el momento.
IPDetectorPluginManager.noConnectivityTitle=No hay conectividad UDP
+IPDetectorPluginManager.noConnectivityshort=Problemas graves de conecci?n: no
hay conectividad UDP, Freenet will no va a funcionar!
IPDetectorPluginManager.portRestricted=Su conexi?n a internet parece estar
tras un enrutador NAT con restricciones de puertos. Podr? conectar con la
mayor?a de usuarios, pero no con aquellos tras NATs sim?tricos.
IPDetectorPluginManager.portRestrictedTitle=Se ha detectado un NAT de tipo
'restricted cone'
IPDetectorPluginManager.restricted=Su conexi?n parece estar tras un enrutador
de tipo "restricted cone NAT". Deber?a ser capaz de conectarse a la mayor?a de
usuarios.
IPDetectorPluginManager.restrictedTitle=Se ha detectado una conexi?n de tipo
'Restricted cone NAT'
+IPDetectorPluginManager.seriousConnectionProblems=Problemas serios de
conecci?n:
IPDetectorPluginManager.suggestForwardPort=Puede querer redirigir manualmente
el puerto (UDP n? ${port}). (Vea
http://wiki.freenetproject.org/FirewallAndRouterIssues ).
IPDetectorPluginManager.suggestForwardPortWithLink=Puede querer
${link}redirigir los puertos${/link} (UDP n? ${port}) manualmente (o podr?a
haberlo hecho ya, Freenet no puede detectarlo con facilidad).
IPDetectorPluginManager.suggestForwardTwoPorts=Puede desear redirigir
manualmente los puertos (UDP n? ${port1} y ${port2}). (Vea
http://wiki.freenetproject.org/FirewallAndRouterIssues ).
IPDetectorPluginManager.symmetric=Su conexi?n parece estar tras un NAT o
cortafuegos sim?trico. Probablemente s?lo podr? conectarse a usuarios
directamente conectados a internet o que se hallen tras "restricted cone" NATs.
IPDetectorPluginManager.symmetricTitle=Se ha detectado un cortafuegos sim?trico
IPUndetectedUserAlert.detecting=Freenet est? intentando detectar su direcci?n
IP externa. Si tarda m?s de unos minutos, entonces algo no ha funcionado
correctamente...
+IPUndetectedUserAlert.detectingShort=Freenet esta intentando detectar tu
direccion IP externa
IPUndetectedUserAlert.detectingWithConfigLink=Freenet est? intentando detectar
su direcci?n IP externa. Si esto tarda m?s de unos minutos, entonces algo no ha
funcionado y usted puede user la opci?n 'sugerencia de IP transitoria'
${link}configuration parameter${/link}. Adem?s, ser?a conveniente redirigir el
puerto UDP ${port} en el router a su direcci?n local para facilitar la conexi?n
del nodo.
IPUndetectedUserAlert.suggestForwardPort=Ser?a tambi?n una buena idea
redirigir el puerto ${port} (UDP) en el router para facilitar la conexi?n del
nodo
IPUndetectedUserAlert.suggestForwardTwoPorts=Ser?a tambi?n una buena idea
redirigir los puertos ${port1} y ${port2} (UDP) en el router para facilitar la
conexi?n del nodo.
IPUndetectedUserAlert.unknownAddress=Freenet no ha podido detectar su
direcci?n IP externa (o la del cortafuegos o NAT). A?n as?, usted puede
intercambiar referencias con otras personas, aunque ?stas s?lo funcionaran si
ellos no est?n tras un cortafuegos o NAT. Tan pronto como consiga una conexi?n
de este modo, Freenet podr? determinar su IP externa. Si usted la conoce, puede
indicarla en la opci?n 'sugerencia de IP transitoria' ${link}configuration
parameter${/link}. Adem?s, ser?a conveniente redirigir el puerto UDP ${port} en
su enrutador a su direcci?n local para facilitar la conexi?n del nodo.
+IPUndetectedUserAlert.unknownAddressShort=Freenet no pudo detectar tu
direccion IP externa, puede que existan problemas de conectividad.
IPUndetectedUserAlert.unknownAddressTitle=Direcci?n externa desconocida
IPUndetectedUserAlert.unknownAddressWithConfigLink=Freenet no ha podido
averiguar su direcci?n IP externa (o la del cortafuegos o NAT). A?n as?, usted
puede intercambiar referencias con otras personas, pero s?lo funcionar?n si
ellas no est?n tras un NAT o cortafuegos. En cuanto conecte con otro nodo de
este modo, Freenet podr? determinar la direcci?n IP externa. Usted puede
especificarla, si la conoce, en la opci?n 'Direcci?n IP transitoria'
${link}configuration parameter${/link}. Adem?s, ser?a una buena idea redirigir
el puerto ${port} de su router para tr?fico UDP hacia su direcci?n local para
facilitar la conexi?n del nodo.
InsertException.longError.1=El llamador ha proporcionado un URI que no podemos
usar"
@@ -490,6 +536,7 @@
N2NTMToadlet.tooLongTitle=Demasiado largo
N2NTMUserAlert.delete=Borrar
N2NTMUserAlert.header=De: ${from} (escrito el ${composed} | enviado el ${sent}
| recibido el ${received})
+N2NTMUserAlert.headerShort=Mensaje de ${from}
N2NTMUserAlert.reply=Responder
N2NTMUserAlert.title=Mensaje entre nodos ${number} desde ${peername} (${peer})
Node.alwaysAllowLocalAddresses=?Permitir siempre conectar a nodos a trav?s de
direcciones locales?
@@ -511,6 +558,8 @@
Node.disablePHTLSLong=Desactivar HTL probabil?stico (no toque esto si no sabe
lo que significa)
Node.dropPacketEvery=Frecuencia de descarte de paquetes para pruebas
Node.dropPacketEveryLong=Frecuencia de descarte de paquetes. Opci?n de prueba
que los desarrolladores emplean para simular p?rdidas de paquetes. Cero
significa nunca descartar artificialmente un paquete. ?No toque esto!
+Node.enableARKs=Activar ARKs? (NO DESACTIVAR!)
+Node.enableARKsLong=Activar ARKs? (NO DESACTIVAR!).
Node.errorApplyingConfig=Error al aplicar la nueva configuraci?n : ${error}
Node.extraPeerDir=Carpeta para datos extra de los contactos
Node.extraPeerDirLong=Nombre de la carpeta en la que guardar datos adicionales
de los nodos conectados
@@ -523,11 +572,16 @@
Node.l10nLanguageLong=Este ajuste cambia el idioma empleado para mostrar los
mensajes. Sepa que algunos textos no aparecer?n traducidos hasta el siguiente
arranque del nodo.
Node.maxHTL=HTL m?ximo
Node.maxHTLLong=HTL m?ximo (?PARA USO DE DESARROLLADORES ?NICAMENTE!)
+Node.maxOpennetPeers=Numero maximo de conecciones por Opennet
+Node.maxOpennetPeersMustBeTwentyOrLess=Debe ser veinte o menos
Node.mustBePositive=El valor de configuraci?n debe ser positivo
Node.nodeDir=Carpeta del nodo
Node.nodeDirLong=Ruta de la carpeta en que guardar documentos relacionados con
el nodo (p.e. la lista de contactos)
Node.nodeName=Apodo para este nodo de Freenet
Node.nodeNameLong=Apodo para el nodo. Esto ser? visible s?lo para sus amigos.
+Node.notUsingSunVMTitle=No se esta usando JVM de Sun
+Node.notUsingWrapperShort=Freenet esta corriendo sin el wrapper y no esta
recomendado.
+Node.notUsingWrapperTitle=No se esta usando el wrapper!
Node.oneConnectionPerIP=?Limitar a una conexi?n por direcci?n?
Node.oneConnectionPerIPLong=No permitir m?s de una conexi?n por direcci?n.
Esto hace ligeramente m?s dif?cil para un atacante el conectarse varias veces
simult?neas usando distintas identidades, ya sea para controlar el enrutado o
simplificar la recolecci?n de direcciones. Tambi?n previene el conectarse a un
mismo nodo a trav?s de darknet y opennet.
Node.opennetEnabled=?Activar modo promiscuo (conectar autom?ticamente a nodos
desconocidos)?
@@ -545,6 +599,7 @@
Node.storeSizeLong=Tama?o del almac?n de datos en bytes
Node.swapRInterval=Intervalo de env?o de peticiones de intercambio de
ubicaci?n (ms)
Node.swapRIntervalLong=Intervalo entre intentos de env?o de peticiones de
intercambio de ubicaci?n, en milisegundos. ?No lo toque!
+Node.tooSmallMTU=MTU muy peque?o
NodeClientCore.allowInsecureCHK=?Permitir CHKs inseguras?
NodeClientCore.allowInsecureCHKLong=Todas las CHKs anteriores a la versi?n
1010 eran inseguras (cifrado parcial). ?Permitirlas?
NodeClientCore.allowInsecureSSK=?Permitir SSKs inseguras?
@@ -566,6 +621,7 @@
NodeClientCore.movingTempDirOnTheFlyNotSupported=Actualmente no se puede
cambiar la carpeta temporal con el nodo en marcha
NodeClientCore.persistentTempDir=Carpeta de datos temporales persistentes
NodeClientCore.persistentTempDirLong=Nombre de la carpeta en que almacenar
datos temporales persistentes
+NodeClientCore.startingUpTitle=Freenet esta iniciando
NodeClientCore.tempDir=Carpeta de datos temporales
NodeClientCore.tempDirLong=Nombre de la carpeta en que guardar datos temporales
NodeClientCore.uploadAllowedDirs=El env?o de carpetas se permite desde
@@ -607,6 +663,7 @@
NodeUpdateManager.revocationURILong=URI de la clave de revocaci?n. Si se
encuentra, el nodo mostrar? su contenido y desactivar? el auto-actualizador.
NodeUpdateManager.updateCatastropheTitle=?Fallo catastr?fico de actualizaci?n!
NodeUpdateManager.updateFailed=Actualizaci?n fallida: ${reason}
+NodeUpdateManager.updateFailedShort=Fallo en la actualizaci?n: ${reason}
NodeUpdateManager.updateFailedTitle=?Actualizaci?n fallida!
NodeUpdateManager.updateURI=?D?nde debe el nodo buscar actualizaciones?
NodeUpdateManager.updateURILong=?D?nde debe buscar el nodo las actualizaciones?
@@ -618,6 +675,10 @@
OpennetUserAlert.warningTitle=Cuidado: Modo promiscuo activado: El nodo se
conectar? a Desconocidos
PNGFilter.invalidHeader=La imagen que ha intentado descargar no es un PNG. No
tiene una cabecera PNG v?lida. Podr?a ser otro tipo de documento, y su
navegador podr?a intentar hacer algo peligroso con el, as? que ha sido
bloqueado.
PNGFilter.invalidHeaderTitle=No es un PNG - cabecera inv?lida
+PageMaker.modeAdvanced=Interface avanzada
+PageMaker.modeAdvancedTooltip=Una interface avanzada que solo usuarios
experimentados y desarrolladores necesitan usar
+PageMaker.modeSimple=Interface simple
+PageMaker.modeSimpleTooltip=Una interface simple que todos los usuarios pueden
usar
PeerManagerUserAlert.clockProblem=${count} de las conexiones no pueden
establecerse porque el reloj del sistema remoto est? desajustado m?s de 24
horas respecto al reloj local. Por favor, compruebe si el computador local
tiene la hora correcta. Un reloj mal ajustado puede causar fallos tanto en el
nodo como en las aplicaciones cliente.
PeerManagerUserAlert.clockProblemTitle=Problemas con el reloj
PeerManagerUserAlert.connError=${count} de sus contactos no pueden conectarse
por razones desconocidas, posiblemente a causa de c?digo err?neo en el nodo o
una referencia incorrecta.
@@ -655,6 +716,8 @@
PluginManager.loadedOnStartupLong=Classpath, nombre y ubicaci?n para los
complementos a cargar cuando el nodo arranca
PluginManager.loadedPlugins=Complementos a cargar al arrancar
PluginManager.loadedPluginsLong=Una lista de complementos que se cargan cuando
el nodo arranca
+PluginManager.pluginLoadingFailedShort=No se puedo cargar el complemento
${name}!
+PluginManager.pluginLoadingFailedTitle=No se puedo cargar el complemento!
PluginManager.pluginReqNewerJVM=El complemento ${name} parece requerir una JVM
m?s reciente. Por favor, instale al menos la versi?n 1.5 de Sun Java, o elimine
el complemento.
PluginManager.pluginReqNewerJVMTitle=El complemento ${name} requiere una JVM
m?s reciente
PluginToadlet.addPluginTitle=A?adir un complemento
@@ -674,10 +737,18 @@
PluginToadlet.unsupportedMethod=M?todo no soportado.
PluginToadlet.unsupportedMethodTitle=M?todo no soportado
PluginToadlet.visit=Visite
+PproxyToadlet.Load=Cargar
+PproxyToadlet.changeReloadOnStartup=Cambiar
PproxyToadlet.classNameTitle=Nombre de clase
PproxyToadlet.internalIDTitle=ID interno
+PproxyToadlet.loadOfficialPlugin=Agregar complemento oficial
+PproxyToadlet.loadOfficialPluginLabel=Cargar complemento oficial
+PproxyToadlet.loadOtherPlugin=Agregar complemento no oficial
+PproxyToadlet.loadOtherURLLabel=URL del complemento
PproxyToadlet.loadPluginLabel=Cargar complemento:
PproxyToadlet.noPlugins=No hay complementos funcionando
+PproxyToadlet.noVersion=No Disponible
+PproxyToadlet.pluginDirectoryNotCreated=El directorio para el complemento no
puede ser creado
PproxyToadlet.pluginNotFoundReload=El complemento dado no ha podido ser
localizado para reiniciarlo.
PproxyToadlet.pluginNotFoundReloadTitle=Complemento no encontrado (recargando)
PproxyToadlet.pluginStopping=Complemento deteni?ndose
@@ -686,11 +757,23 @@
PproxyToadlet.plugins=Complementos
PproxyToadlet.pluginsWithNodeName=Complementos de ${name}
PproxyToadlet.reload=Recargar
+PproxyToadlet.reloadOnStartupShort=Recargar al iniciar
+PproxyToadlet.reloadPluginTitle=Recargar Complemento
PproxyToadlet.returnToPluginPage=Volver a la p?gina de complementos
PproxyToadlet.startedAtTitle=Arrancado el
+PproxyToadlet.startingPluginName=Nombre del complemento
+PproxyToadlet.startingPluginStatus=Estado actual
+PproxyToadlet.startingPluginTime=Tiempo empleado
+PproxyToadlet.startingPluginsTitle=Comenzando complementos
+PproxyToadlet.unauthorized=No estas autorizado a ver esta p?gina.
+PproxyToadlet.unauthorizedTitle=Acceso no autorizado
PproxyToadlet.unload=Descargar
PproxyToadlet.unloadPluginTitle=?Desinstalar plugin?
PproxyToadlet.unloadPluginWithName=?Est? seguro de que quiere desinstalar
${name}?
+PproxyToadlet.unloadPurge=Eliminar complemento del cache
+PproxyToadlet.versionTitle=Versi?n
+PproxyToadlet.startingPluginStatus.downloading=creando copia local
+PproxyToadlet.startingPluginStatus.starting=arrancando
QueueToadlet.DUinProgress=Inserciones de carpetas en curso
QueueToadlet.DinProgress=Descargas en curso
QueueToadlet.UinProgress=Inserciones en curso
@@ -703,6 +786,7 @@
QueueToadlet.completedU=Completadas: Inserciones (${size})
QueueToadlet.completedUDirectory=Completado: Env?o de carpetas (${size})
QueueToadlet.download=Descarga
+QueueToadlet.downloadSucceededTitle=Descarga completada: ${filename}
QueueToadlet.errorAccessDenied=Error: ?Acceso denegado!
QueueToadlet.errorAccessDeniedFile=La configuraci?n actual del nodo proh?be la
inserci?n del documento "${file}".
QueueToadlet.errorDToDisk=No se puede descargar a disco
@@ -734,6 +818,9 @@
QueueToadlet.identifier=Identificador
QueueToadlet.insertAs=Insertar como:
QueueToadlet.insertFile=Insertar documento
+QueueToadlet.insertFileBrowseLabel=Explorar archivos del disco
+QueueToadlet.insertFileCompressLabel=Comprimir
+QueueToadlet.insertFileInsertFileLabel=Insertar archivo
QueueToadlet.key=Clave
QueueToadlet.legend=Leyenda
QueueToadlet.mimeType=Tipo MIME
@@ -775,6 +862,9 @@
RequestStarterGroup.schedulerLong=Ajuste para la pol?tica de prioridades que
usa el planificador.
RevocationKeyFoundUserAlert.text=El nodo ha encontrado la clave de anulaci?n
del auto-actualizador. ?Esto significa, con toda probabilidad, que el sistema
de auto-actualizaci?n se ha visto COMPROMETIDO! En consecuencia, ha sido
desactivado para evitar la instalaci?n de "cosas malas". Se le sugiere
encarecidamente que compruebe la web del proyecto Freenet en busca de
noticias/actualizaciones. Tenga cuidado as?mismo de que la web no haya sido
tambi?n suplantada. El mensaje de revocaci?n recuperado es: ${message}.
RevocationKeyFoundUserAlert.title=?La clave privada del proyecto se ha visto
comprometida!
+SSL.enable=Activar soporte para SSL?
+SSL.enableLong=Activar soporte para SSL?
+SSL.version=Versi?n de SSL
ShortOption.parseError=No se ha podido interpretar como un vector de cadenas:
${error}
SimpleToadletServer.advancedMode=?Activar modo avanzado?
SimpleToadletServer.advancedModeLong=Mostrar o no informaci?n destinada a
usuarios avanzados/desarrolladores. Este ajuste deber?a mantenerse desactivado
(false) como norma general.
@@ -803,6 +893,11 @@
SimpleToadletServer.panicButtonLong=Si debe mostrarse o no el bot?n de p?nico
en la p?gina de /cola/
SimpleToadletServer.port=N? de puerto de FProxy
SimpleToadletServer.portLong=N? de puerto de FProxy
+SimpleToadletServer.ssl=Activar SSL?
+SimpleToadletServer.sslLong=Activar SSL en FProxy
+StartupToadlet.entropyErrorTitle=No hay suficiente entropia disponible!
+StartupToadlet.isStartingUp=Freenet esta iniciando, espere por favor
+StartupToadlet.title=Freenet esta iniciando
StaticToadlet.pathInvalidChars=La URI dada contiene caracteres prohibidos
StaticToadlet.pathNotFound=La ruta dada no existe
StaticToadlet.pathNotFoundTitle=No se ha encontrado la ruta de disco
@@ -811,20 +906,25 @@
StatisticsToadlet.allocMemory=Memoria Java asignada: ${memory}
StatisticsToadlet.bandwidthTitle=Ancho de banda
StatisticsToadlet.cpus=CPUs disponibles: ${count}
+StatisticsToadlet.fullTitle=Estad?sticas para ${name}
StatisticsToadlet.getLogs=Ver ?ltimo registro de eventos
StatisticsToadlet.inputRate=Tasa de entrada: ${rate}/s (de ${max})
+StatisticsToadlet.javaVersion=Versi?n de Java: ${version}
StatisticsToadlet.jeDumpButton=Generar un volcado de JE
StatisticsToadlet.jvmInfoTitle=Informaci?n de JVM
StatisticsToadlet.jvmVendor=Proveedor de JVM: ${vendor}
StatisticsToadlet.jvmVersion=Versi?n de Java (JVM): ${version}
StatisticsToadlet.maxMemory=Memoria Java m?xima: ${memory}
StatisticsToadlet.noRequests=El nodo no est? procesando ninguna petici?n en
este momento.
+StatisticsToadlet.nodeToNodeBytes=Mensajes nodo a nodo: ${total}
StatisticsToadlet.osArch=Arquitectura del S.O: ${arch}
StatisticsToadlet.osName=Nombre del S.O: ${name}
StatisticsToadlet.osVersion=Versi?n del S.O: ${version}
StatisticsToadlet.outputRate=Tasa de salida: ${rate}/s (de ${max})
StatisticsToadlet.payloadOutput=Env?o ?til: ${total} (${rate}/s)(${percent}%)
StatisticsToadlet.peerStatsTitle=Estad?sticas de contactos
+StatisticsToadlet.priority=Prioridad
+StatisticsToadlet.running=Corriendo
StatisticsToadlet.threadDumpButton=Generar un volcado de subprocesos
StatisticsToadlet.threads=Subprocesos en ejecuci?n: ${running}/${max}
StatisticsToadlet.totalInput=Recibido total: ${total} (${rate}/s)
@@ -832,6 +932,7 @@
StatisticsToadlet.transferringRequests=Transferencias: ${senders} enviando,
${receivers} recibiendo
StatisticsToadlet.usedMemory=Memoria usada por Java: ${memory}
StatisticsToadlet.versionTitle=Informaci?n de la versi?n del nodo
+StatisticsToadlet.waiting=Esperando
SymlinkerToadlet.symlinks=Enlaces simb?licon en ToadletServer
SymlinkerToadlet.symlinksLong=Una lista de "alias#target"'s que forma una
colecci?n de enlaces simb?licos
TestnetHandler.cannotEnableDisableOnTheFly=Activar/desactivar el modo Testnet
mientras el nodo est? en marcha es imposible; rein?cielo para obtener nuevas
conexiones
@@ -847,6 +948,7 @@
TextModeClientInterfaceServer.enableInputOutputLong=Activar cliente de texto
para consola? ('Enabled' proporciona un servidor estilo telnet, accesible
mediante socket).
TextModeClientInterfaceServer.enabled=Activar TMCI (Cliente de modo texto /
Text Mode Client Interface)
TextModeClientInterfaceServer.enabledLong=Determina si se activar? el TMCI
+TextModeClientInterfaceServer.ssl=Activar SSL?
TextModeClientInterfaceServer.telnetPortNumber=Puerto para Telnet
TextModeClientInterfaceServer.telnetPortNumberLong=N?mero de puerto para Telnet
TimeSkewDetectedUserAlert.text=El nodo ha detectado un salto en el reloj. Esto
es MUY perjudicial. El nodo no funcionar? correctamente hasta que se corrija.
Son causas habituales ajustes incorrectos del modo de ahorro de energ?a,
clientes de sincronizaci?n temporal por red (NTP) o hardware defectuoso.
@@ -866,6 +968,7 @@
Toadlet.returnToPrevPage=Regresar a la p?gina anterior
Toadlet.tempRedirectWithReason=Redirecci?n temporal: ${reason}
Toadlet.unauthorized=No se le permite acceder a esta p?gina.
+Toadlet.unauthorizedTitle=No autorizado
Toadlet.yes=S?
ToadletContextImpl.cannotParseContentLength=Error procesando Content-length:
${error}
ToadletContextImpl.headersLineTooLong=L?nea demasiado larga procesando
cabeceras
@@ -913,6 +1016,9 @@
UpdatedVersionAvailableUserAlert.fetchingNewNode=El nodo est? descargando una
actualizaci?n de Freenet (versi?n ${nodeVersion}).
UpdatedVersionAvailableUserAlert.finalCheck=El nodo est? ejecutando una
verificaci?n final acerca de la seguridad de la actualizaci?n (${count} de
${max}, tiempo m?ximo restante ${time}).
UpdatedVersionAvailableUserAlert.notLatest=Parece que el nodo no est?
actualizado a la ?ltima versi?n.
+UpdatedVersionAvailableUserAlert.shortArmed=El nodo esta bajando una nueva
version y se reiniciara cuando termine.
+UpdatedVersionAvailableUserAlert.shortNotReadyNotArmed=El nodo esta bajando
una nueva version de freenet pero necesita permiso para poder usarla.
+UpdatedVersionAvailableUserAlert.shortReadyNotArmed=Tu nodo bajo una nueva
version de freenet pero necesita tu permiso para usarla.
UpdatedVersionAvailableUserAlert.title=Hay disponible una nueva versi?n
estable de Freenet
UpdatedVersionAvailableUserAlert.updateASAPButton=Actualizar en cuanto sea
posible
UpdatedVersionAvailableUserAlert.updateASAPQuestion=?Desea que el nodo se
reinicie en cuanto se haya descargado la actualizaci?n?
@@ -927,7 +1033,9 @@
UserAlertManager.minorCountLabel=Menor:
UserAlertManager.totalLabel=Total:
UserAlertManager.warningCountLabel=Avisos:
+UserAlertsToadlet.titleWithName=Alertas para ${name}
WelcomeToadlet.activityTitle=Actividad actual
+WelcomeToadlet.alertsSummary=Resumen de alertas
WelcomeToadlet.arkFetchCount=Descargadores ARK: ${total}
WelcomeToadlet.confirmAddBookmarkSubTitle=Confirme la adici?n del marcador
WelcomeToadlet.confirmAddBookmarkTitle=A?adir un marcador
@@ -995,4 +1103,5 @@
WelcomeToadlet.version=Freenet ${fullVersion} Compilaci?n #${build} r${rev}
WelcomeToadlet.versionHeader=Informaci?n de versi?n & control del nodo
WelcomeToadlet.writtenDatabaseStats=Las estad?sticas de ejecuci?n de la base
de datos se han volcado al registro del lanzador (wrapper).
+WrapperConfig.wrapper.java.maxmemory.short=Memoria maxima (en megabytes)
End
Modified:
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.fr.properties
2008-08-10 09:16:13 UTC (rev 21698)
@@ -8,6 +8,7 @@
Announcer.announceDisabledTooOldTitle=Annonces d?sactiv?es (noeud trop ancien)
Announcer.announceLoading=Freenet t?l?charge la liste des seednodes afin de
pouvoir annoncer sa pr?sence sur le r?seau. Cela va prendre quelques minutes.
Announcer.coolingOff=Pendant les ${time} prochaines secondes, le noeud va
attendre que les noeuds auxquels il s'est annonc? se connectent. S'il n'y en a
pas assez, il essaiera ? nouveau.
+Bookmark.noName=Pas de nom
BookmarkEditorToadlet.addBookmark=Ajouter un marque-page
BookmarkEditorToadlet.addCategory=Ajouter une cat?gorie
BookmarkEditorToadlet.addDefaultBookmarks=Rajouter les marque-pages par d?faut
@@ -700,6 +701,10 @@
Node.passOpennetPeersThroughDarknetLong=Si activ?, les r?f?rences opennet
(JAMAIS votre r?f?rence darknet) seront relay?es ? travers nos Amis (connexions
darknet). Cela permet ? un noeud (le votre ou celui de vos Amis) d'obtenir des
connexions opennet ? partir de ses connexions darknet. C'est utile car cela
nous permet de retrouver de nouvelles connexions opennet quand on les a toutes
perdues suite ? un arr?t prolong? du noeud. Cependant, cela rend l'analyse de
traffic l?g?rement plus facile ; d?sactivez-le si vous ?tes parano.
Node.port=Num?ro de port FNP (UDP)
Node.portLong=Port UDP des communications inter-noeuds (Freenet Node Protocol)
+Node.publishOurPeersLocation=Devons nous envoyer la position de nos Amis ? nos
Amis ?
+Node.publishOurPeersLocationLong=Devons-nous envoyer la position de nos Amis ?
nos Amis ? Cela aide le routage mais donne des informations ? un attaquant
potentiel.
+Node.routeAccordingToOurPeersLocation=Devons nous utiliser la position des
Amis de nos Amis pour le routage ?
+Node.routeAccordingToOurPeersLocationLong=Devons nous utiliser la position des
Amis de nos Amis pour le routage ? Cela aide le routage mais pourrait aider un
attaquant potentiel.
Node.storeDirectory=Dossier du store
Node.storeDirectoryLong=Dossier o? placer le store
Node.storeMaxMemTooHigh=Vous ne voulez s?rement pas donner plus de 80% de
votre m?moire ? BDB !
@@ -1058,6 +1063,10 @@
SimpleToadletServer.portLong=Port TCP ?cout? par FProxy
SimpleToadletServer.ssl=Activer SSL ?
SimpleToadletServer.sslLong=Activer SSL pour FProxy
+StartupToadlet.entropyErrorContent=Il n'y a pas assez d'entropy sur votre
syst?me... Freenet ne d?marrera pas avant d'en avoir suffisament.
+StartupToadlet.entropyErrorTitle=Pas assez d'entropie disponible !
+StartupToadlet.isStartingUp=D?arrage de Freenet en cours, veuillez patienter.
+StartupToadlet.title=D?marrage de Freenet
StaticToadlet.pathInvalidChars=Cette URI contient des caract?res interdits.
StaticToadlet.pathNotFound=Le chemin sp?cifi? n'existe pas.
StaticToadlet.pathNotFoundTitle=Chemin introuvable.
@@ -1213,7 +1222,7 @@
UserAlertManager.alertsTitle=Alertes
UserAlertManager.clickForMore=Cliquez sur un lien pour plus de d?tails, ou
pour ne plus le voir.
UserAlertManager.criticalErrorCountLabel=Erreurs critiques :
-UserAlertManager.dumpEventsButton=Enlever le avertissements triviaux
+UserAlertManager.dumpEventsButton=Enlever les avertissements triviaux
UserAlertManager.errorCountLabel=Erreurs :
UserAlertManager.minorCountLabel=Mineur :
UserAlertManager.totalLabel=Total :
Modified:
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.it.properties
2008-08-10 09:16:13 UTC (rev 21698)
@@ -1,14 +1,13 @@
-?BookmarkEditorToadlet.pasteOrCancel=Click su un'icona incolla o cancella.
-Announcer.announceAlertIntro=Il nodo sta cercando di connettersi con i
seednode ed annunciare s? stesso all' OpenNet (network di Sconosciuti). Possono
essere necessari alcuni minuti per completare l'operazione.
-Announcer.announceAlertNoSeednodes=Non e' stato trovato il file seednodes.fref
e quindi il nodo non pu? connettersi automaticamente ad Opennet. Aggiungere
alcuni nodi manualmente o scaricare il file seednodes da
http://downloads.freenetproject.org/alpha/opennet/ .
-Announcer.announceAlertShort=Il nodo sta cercando di connettersi alla rete,
nel frattempo sar? pi? lento.
+Announcer.announceAlertIntro=Il nodo sta cercando di connettersi con i
seednode ed annunciare s? stesso all' OpenNet (network di Sconosciuti). Possono
essere necessari alcuni minuti per completare l'operazione.
+Announcer.announceAlertNoSeednodes=Non e' stato trovato il file seednodes.fref
e quindi il nodo non pu? connettersi automaticamente ad Opennet. Aggiungere
alcuni nodi manualmente o scaricare il file seednodes da
http://downloads.freenetproject.org/alpha/opennet/ .
+Announcer.announceAlertShort=Il nodo sta cercando di connettersi alla rete,
nel frattempo sar? pi? lento.
Announcer.announceAlertTitle=Annuncio Nodo in corso
-Announcer.announceDetails=Il nodo ha recentemente inoltrato
${recentSentAnnouncements} annunci, ${runningAnnouncements} dei quali ancora in
corso, ed aggiunto ${addedNodes} nodi (${refusedNodes} nodi hanno rifiutato la
connessione). In questo momento il nodo ? connesso a ${connectedSeednodes}
seednode e sta cercando di connettersi ad altri ${disconnectedSeednodes}.
-Announcer.announceDisabledTooOld=Il software utilizzato dal nodo ? obsoleto ed
inadatto alla connessione con la version corrente della rete Freenet.
L'annuncio ? stato diabilitato in quanto comunque inutile. Si prega di
aggiornare il nodo appena possibile (auto-aggiornamento potrebbe essere in
attesa di input o disabilitato)
-Announcer.announceDisabledTooOldShort=Il nodo non riesce a connettersi alla
rete perch? la versione di Freenet utilizzata ? obsoleta. Si prega di eseguire
l'aggiornamento.
+Announcer.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 software utilizzato dal nodo ? obsoleto ed
inadatto alla connessione con la version corrente della rete Freenet.
L'annuncio ? stato diabilitato in quanto comunque inutile. Si prega di
aggiornare il nodo appena possibile (auto-aggiornamento potrebbe essere in
attesa di input o disabilitato)
+Announcer.announceDisabledTooOldShort=Il nodo non riesce a connettersi alla
rete perch? la versione di Freenet utilizzata ? obsoleta. Si prega di eseguire
l'aggiornamento.
Announcer.announceDisabledTooOldTitle=Annuncio disabilitato (obsoleto)
Announcer.announceLoading=Il nodo sta caricando il file seednodes per
annunciarsi al resto della rete. Il completamento dell' operazione potrebbe
richiedere diversi minuti.
-Announcer.coolingOff=per i prossimi ${time} secondi, il nodo aspetter? che i
nodi che ha annunciato si connettano; se non ci saranno abbastanza nodi prover?
con un altro nodo.
+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.
Bookmark.noName=nessun nome
BookmarkEditorToadlet.addBookmark=Aggiungi Segnalibro
BookmarkEditorToadlet.addCategory=Aggiungi Categoria
@@ -37,11 +36,11 @@
BookmarkEditorToadlet.editCategoryTitle=Modifica Categoria
BookmarkEditorToadlet.error=Errore
BookmarkEditorToadlet.hasAnActivelinkLabel=Il freesite ha un activelink?
-BookmarkEditorToadlet.invalidKey=La chiave Freenet non ? valida.
+BookmarkEditorToadlet.invalidKey=La chiave Freenet non ? valida.
BookmarkEditorToadlet.invalidKeyTitle=Chiave non valida
BookmarkEditorToadlet.invalidKeyWithReason=Chiave Freenet non valida.
BookmarkEditorToadlet.keyLabel=Chiave :
-BookmarkEditorToadlet.moveDown=Gi?
+BookmarkEditorToadlet.moveDown=Gi?
BookmarkEditorToadlet.moveUp=Su
BookmarkEditorToadlet.myBookmarksTitle=I Miei Segnalibri
BookmarkEditorToadlet.nameLabel=Nome :
@@ -51,18 +50,18 @@
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.bookmarkUpdated=Il sito ${name} ? stato aggiornato all'edizione
${edition}.
BookmarkItem.bookmarkUpdatedShort=Freesite aggiornato: ${name}
BookmarkItem.bookmarkUpdatedTitle=${name}: link aggiornato
-BookmarkItem.bookmarkUpdatedWithLink=Il Sito ${link}${name}${/link} ? stato
aggiornato all'edizione ${edition}.
+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
BooleanOption.parseError=Booleano non riconosciuto: ${val} - prova "vero o
falso"
-BuildOldAgeUserAlert.tooOld=Il software di questo nodo ? antecedente alla pi?
vecchia versione (Build #${lastgood}) utilizzabile dai peer aggiornati ai quali
si cerca di connettersi. E' necessario aggiornare il nodo al pi? presto
possibile; non sar? possibile connettersi ai peer etichettati "TROPPO RECENTE"
finch? il nodo non sar? stato aggiornato (il nodo va tenuto aggiornato o si
rischia di essere esclusi dalla rete Freenet)
-BuildOldAgeUserAlert.tooOldShort=Il nodo sta utilizzando una versione di
Freenet obsoleta al punto da rendere impossibile il collegamento alla rete. Si
prega di eseguire l'aggiornamento al pi? presto possibile.
+BuildOldAgeUserAlert.tooOld=Il software di questo nodo ? antecedente alla pi?
vecchia versione (Build #${lastgood}) utilizzabile dai peer aggiornati ai quali
si cerca di connettersi. E' necessario aggiornare il nodo al pi? presto
possibile; non sar? possibile connettersi ai peer etichettati "TROPPO RECENTE"
finch? il nodo non sar? stato aggiornato (il nodo va tenuto aggiornato o si
rischia di essere esclusi dalla rete Freenet)
+BuildOldAgeUserAlert.tooOldShort=Il nodo sta utilizzando una versione di
Freenet obsoleta al punto da rendere impossibile il collegamento alla rete. Si
prega di eseguire l'aggiornamento al pi? presto possibile.
BuildOldAgeUserAlert.tooOldTitle=Versione obsoleta
CSSTokenizerFilter.deletedDisallowedString=Stringa non permessa eliminata
CSSTokenizerFilter.deletedUnmatchedChar=Ignorato char non corrispondente:
@@ -71,9 +70,9 @@
CSSTokenizerFilter.invalidURLContents=Contenuto della url() non valido
CSSTokenizerFilter.supplementalCharsNotSupported=CARATTERI UCS-4 OLTRE 0xFFFF
NON SUPPORTATI!
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.
+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:
ConfigToadlet.appliedFailureTitle=Configurazione Non Applicata!
ConfigToadlet.appliedSuccess=Le modifiche alla configurazione sono state
applicate.
@@ -82,11 +81,11 @@
ConfigToadlet.configNavTitle=Esplora Configurazione
ConfigToadlet.console=console
ConfigToadlet.contributeTranslation=Contribuisci alla traduzione
-ConfigToadlet.defaultIs=Il valore predefinito per l'opzione di configurazione
?: '${default}'.
+ConfigToadlet.defaultIs=Il valore predefinito per l'opzione di configurazione
?: '${default}'.
ConfigToadlet.false=falso
ConfigToadlet.fcp=fcp
ConfigToadlet.fproxy=fproxy
-ConfigToadlet.fullTitle=Configurazione del Nodo Freenet di ${name}
+ConfigToadlet.fullTitle=Configurazione del nodo Freenet: ${name}
ConfigToadlet.homepage=Homepage del Nodo
ConfigToadlet.logger=log
ConfigToadlet.node=nodo
@@ -97,7 +96,7 @@
ConfigToadlet.returnToNodeConfig=Torna alla configurazione del nodo
ConfigToadlet.returnToNodeHomepage=Torna alla homepage del nodo
ConfigToadlet.shortTitle=Configurazione
-ConfigToadlet.ssl=SSL (il cambiamento non influisce sui server attivi, il
riavviamento ? necessario)
+ConfigToadlet.ssl=SSL (necessario riavvio)
ConfigToadlet.title=Configurazione del Nodo Freenet
ConfigToadlet.toadletsymlinker=toadletsymlinker
ConfigToadlet.true=vero
@@ -109,8 +108,8 @@
ConfigToadlet.node.scheduler=nodo.schedulatore
ConfigToadlet.node.testnet=nodo.testnet
ConfigToadlet.node.updater=nodo.aggiornamento
-ConfigurablePersister.doesNotExistCannotCreate=Il file non esiste e non pu?
essere creato
-ConfigurablePersister.existsCannotReadWrite=Il file esiste ma non pu? essere
letto/scritto
+ConfigurablePersister.doesNotExistCannotCreate=Il file non esiste e non pu?
essere creato
+ConfigurablePersister.existsCannotReadWrite=Il file esiste ma non pu? essere
letto/scritto
ConnectionsToadlet.nodeStatus.BACKED OFF=RESPINTO
ConnectionsToadlet.nodeStatus.BURSTING=BURST
ConnectionsToadlet.nodeStatus.BUSY=OCCUPATO
@@ -130,8 +129,8 @@
ConnectivityToadlet.addressTitle=Indirizzo
ConnectivityToadlet.byIPTitle=Pachetti per ${ip} per indirizzo IP - ${status}
(lunghezza minima tunnel ${tunnelLength})
ConnectivityToadlet.byPortTitle=Pacchetti per ${port} per porta - ${status}
(lunghezza minima tunnel ${tunnelLength})
-ConnectivityToadlet.connectivity=Connettivit? Internet
-ConnectivityToadlet.connectivityTitle=Connettivit?
+ConnectivityToadlet.connectivity=Connettivit? Internet
+ConnectivityToadlet.connectivityTitle=Connettivit?
ConnectivityToadlet.firstReceiveLeadTime=Da online a prima ricezione
ConnectivityToadlet.firstSendLeadTime=Da start a prima trasmissione
ConnectivityToadlet.local=LOCALE
@@ -139,9 +138,9 @@
ConnectivityToadlet.noreply=NESSUNA RISPOSTA
ConnectivityToadlet.remote=REMOTO
ConnectivityToadlet.sentReceivedTitle=Pacchetti ricevuti/trasmessi
-ConnectivityToadlet.summaryTitle=Connettivit?
-ConnectivityToadlet.title=Connettivit? internet di ${nodeName}
-ContentDataFilter.unknownCharset=La pagina che sta per essere visualizzata
utilizza un formato di caratteri (charset) di tipo sconosciuto. Ci? rende
impossibile filtrare la pagina, il che potrebbe a sua volta compromettere
l'anonimato dell'utente.
+ConnectivityToadlet.summaryTitle=Connettivit?
+ConnectivityToadlet.title=Connettivit? internet di ${nodeName}
+ContentDataFilter.unknownCharset=La pagina che sta per essere visualizzata
utilizza un formato di caratteri (charset) di tipo sconosciuto. Ci? rende
impossibile filtrare la pagina, il che potrebbe a sua volta compromettere
l'anonimato dell'utente.
ContentDataFilter.unknownCharsetTitle=Charset sconosciuto!
ContentDataFilter.warningUnknownCharsetTitle=Attenzione: charset sconosciuto
(${charset})
ContentFilter.applicationPdfReadAdvice=Documento Adobe(R) PDF - MOLTO
PERICOLOSO!
@@ -151,90 +150,90 @@
ContentFilter.imageIcoReadAdvice=File icona: probabilmente non pericoloso
ContentFilter.imageIcoWriteAdvice=File icona - probabilmente non pericoloso
(ma potrebbe contenere altri dati)
ContentFilter.imageJpegReadAdvice=Immagine JPEG - probabilmente non pericoloso
-ContentFilter.imageJpegWriteAdvice=Immagine JPEG - probabilmente non
pericoloso ma pu? contenere dati EXIF
+ContentFilter.imageJpegWriteAdvice=Immagine JPEG - probabilmente non
pericoloso ma pu? contenere dati EXIF
ContentFilter.imagePngReadAdvice=Immagine PNG - probabilmente non pericoloso
ContentFilter.imagePngWriteAdvice=Immagine PNG - probabilmente non pericoloso
ma sarebbe opportuno eliminare eventuali commenti e porzioni di testo
-ContentFilter.textCssReadAdvice=CSS (cascading style sheet, di solito ? usato
in combinazione con HTML) - probabilmente non pericoloso se filtrato, ma il
filtro non ? del tipo "whitelist" quindi fare attenzione
-ContentFilter.textCssWriteAdvice=CSS (cascading style sheet, solitamente usato
con HTML) - pu? contenere metadati, controllare manualmente
+ContentFilter.textCssReadAdvice=CSS (cascading style sheet, di solito ? usato
in combinazione con HTML) - probabilmente non pericoloso se filtrato, ma il
filtro non ? del tipo "whitelist" quindi fare attenzione
+ContentFilter.textCssWriteAdvice=CSS (cascading style sheet, solitamente usato
con HTML) - pu? contenere metadati, controllare manualmente
ContentFilter.textHtmlReadAdvice=HTML - Non pericoloso se filtrato
-ContentFilter.textHtmlWriteAdvice=HTML - pu? contenere metadati di tipo
pericoloso, ecc; si consiglia di controllare manualmente
-ContentFilter.textPlainReadAdvice=Formato testo semplice (plain text)- non ?
pericoloso a meno che il browser utilizzato non sia particolarmente "stupido"
(per esempio Internet Explorer)
+ContentFilter.textHtmlWriteAdvice=HTML - pu? contenere metadati di tipo
pericoloso, ecc; si consiglia di controllare manualmente
+ContentFilter.textPlainReadAdvice=Formato testo semplice (plain text)- non ?
pericoloso a meno che il browser utilizzato non sia particolarmente "stupido"
(per esempio Internet Explorer)
ContentFilter.textPlainWriteAdvice=Testo semplice (plain text) - non
pericoloso a meno che l'utente vi includa informazioni compromettenti
DarknetConnectionsToadlet.activityInserts=Inserzioni: ${totalSenders} totale
senders, ${CHKhandlers} CHK handlers, ${SSKhandlers} SSK handlers
DarknetConnectionsToadlet.activityRequests=Richieste: ${totalSenders} totale
senders, ${CHKhandlers} CHK handlers, ${SSKhandlers} SSK handlers
-DarknetConnectionsToadlet.activityTitle=Attivit? Corrente
+DarknetConnectionsToadlet.activityTitle=Attivit? Corrente
DarknetConnectionsToadlet.add=Aggiungi
DarknetConnectionsToadlet.addPeerTitle=Aggiungi un peer
-DarknetConnectionsToadlet.alreadyInReferences=La referenza data ? gi? presente
in lista.
-DarknetConnectionsToadlet.backedOff=Connesso ma respinto: Il nodo ? connesso a
questi peer ma la la connessione viene rifiutata e quindi i peer in questione
non vengono al momento utilizzati per l'instradamento delle richieste
+DarknetConnectionsToadlet.alreadyInReferences=La referenza data ? gi? presente
in lista.
+DarknetConnectionsToadlet.backedOff=Connesso ma respinto: Il nodo ? connesso a
questi peer ma la la connessione viene rifiutata e quindi i peer in questione
non vengono al momento utilizzati per l'instradamento delle richieste
DarknetConnectionsToadlet.backedOffShort=Respinti
-DarknetConnectionsToadlet.bursting=Non connesso e bursting: per un breve
periodo, il nodo sta tentando di connettersi a questi peer perch? l'utenete ha
impostato burstOnly su di essi
+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
-DarknetConnectionsToadlet.busy=Occupati: Questi peer sono connessi ma ci
comunicano di essere troppo occupati per poter aggiungere le nostre richieste a
quelle gi? presenti quindi non vengono temporaneamente utilizzati per
l'instradamento.
+DarknetConnectionsToadlet.busy=Occupati: Questi peer sono connessi ma ci
comunicano di essere troppo occupati per poter aggiungere le nostre richieste a
quelle gi? presenti quindi non vengono temporaneamente utilizzati per
l'instradamento.
DarknetConnectionsToadlet.busyShort=Occupati
DarknetConnectionsToadlet.cancel=Cancella
-DarknetConnectionsToadlet.cantFetchNoderefURL=Non ? stato possibile richiamare
la referenza di un nodo da ${url}. Riprovare.
-DarknetConnectionsToadlet.cantParseTryAgain=Non ? stato possibile interpretare
it testo dato come refernza di un nodo: (${error}).
-DarknetConnectionsToadlet.cantParseWrongEnding=Non ? stato possibile
interpretare le referenza: L'ultimo rigo dovrebbe contenere solo la parola End,
esso contiene invece: ${end}
-DarknetConnectionsToadlet.clockProblem=L'orologio di sitema e l'orologio del
nodo differiscono di oltre 24 ore. Ci? potrebbe causare problemi con
l'aggiornamento e con i client. La connessione ? stata pertanto disabilitata,
+DarknetConnectionsToadlet.cantFetchNoderefURL=Non ? stato possibile richiamare
la referenza di un nodo da ${url}. Riprovare.
+DarknetConnectionsToadlet.cantParseTryAgain=Non ? stato possibile interpretare
it testo dato come refernza di un nodo: (${error}).
+DarknetConnectionsToadlet.cantParseWrongEnding=Non ? stato possibile
interpretare le referenza: L'ultimo rigo dovrebbe contenere solo la parola End,
esso contiene invece: ${end}
+DarknetConnectionsToadlet.clockProblem=L'orologio di sitema e l'orologio del
nodo differiscono di oltre 24 ore. Ci? potrebbe causare problemi con
l'aggiornamento e con i client. La connessione ? stata pertanto disabilitata,
DarknetConnectionsToadlet.clockProblemShort=Problema di sincronizzazione
orologio
-DarknetConnectionsToadlet.confirmRemoveNode=Conferma rimozione di "${name}" ?
Rimuovere un nodo che ? stato disconnesso per meno di una settimana non ?
consigliabile. L'azione pi? appropriata sarebbe di attendere ancora un po',
considerando che potrebbe trattarsi di un problema temporaneo, e che ci sono
utenti che non hanno la possibilit? lasciar girare il proprio nodo giorno e
notte.
+DarknetConnectionsToadlet.confirmRemoveNode=Conferma rimozione di "${name}" ?
Rimuovere un nodo che ? stato disconnesso per meno di una settimana non ?
consigliabile. L'azione pi? appropriata sarebbe di attendere ancora un po',
considerando che potrebbe trattarsi di un problema temporaneo, e che ci sono
utenti che non hanno la possibilit? lasciar girare il proprio nodo giorno e
notte.
DarknetConnectionsToadlet.confirmRemoveNodeTitle=Conferma
DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=Rimozione Nodo
DarknetConnectionsToadlet.connError=Connessione fallita (il nodo ha un 'bug'?)
DarknetConnectionsToadlet.connErrorShort=Errore di Connessione
-DarknetConnectionsToadlet.connected=Connesso: Il nodo ? connesso a questi peer:
+DarknetConnectionsToadlet.connected=Connesso: Il nodo ? connesso a questi peer:
DarknetConnectionsToadlet.connectedShort=Connessi
DarknetConnectionsToadlet.darknetFnpPort=Darknet FNP: ${port}/UDP (usata per
connessioni a peer affidabili. Forwardare se possibile)
DarknetConnectionsToadlet.disabled=Non connesso e disabilitato: L'utente ha
configurato il nodo in maniera da non connettersi a questo peer.
DarknetConnectionsToadlet.disabledShort=Disabilitato
-DarknetConnectionsToadlet.disconnecting=Disconnessione in corso (si sta
procedendo alla rimozione del nodo; ? necessario informare il nodo in questione
e ci? potrebbe richiedere un po' di tempo)
+DarknetConnectionsToadlet.disconnecting=Disconnessione in corso (si sta
procedendo alla rimozione del nodo; ? necessario informare il nodo in questione
e ci? potrebbe richiedere un po' di tempo)
DarknetConnectionsToadlet.disconnectingShort=Disconnessione in corso
DarknetConnectionsToadlet.enterDescription=Inserisci descrizione:
DarknetConnectionsToadlet.failedToAddNodeInternalError=Impossibile
interpretare il testo dato comereferenza di un nodo Freenet. Si prega di
riportare agli sviluppatori quanto segue:
DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=Aggiunta nuovo
nodo fallita: Errore interno.
DarknetConnectionsToadlet.failedToAddNodeTitle=Aggiunta Nodo Fallita
-DarknetConnectionsToadlet.fcpDisabled=FCP non ? abilitato (per applicazioni
client di Freenet come Frost e Thaw)
+DarknetConnectionsToadlet.fcpDisabled=FCP non ? abilitato (per applicazioni
client di Freenet come Frost e Thaw)
DarknetConnectionsToadlet.fcpPort=FCP: ${port}/tcp (per le applicazioni client
di Freenet, per esempio Frost e Thaw)
DarknetConnectionsToadlet.fileReference=Seleziona il file contenente la
referenza:
-DarknetConnectionsToadlet.fnpPort=FNP: ${port}/udp (Comunicazione tra nodi. Di
solito questa ? l'unica porta che si potrebbe aver bisogno di forwardare)
+DarknetConnectionsToadlet.fnpPort=FNP: ${port}/udp (Comunicazione tra nodi. Di
solito questa ? l'unica porta che si potrebbe aver bisogno di forwardare)
DarknetConnectionsToadlet.forceRemove=Rimozione Forzata
-DarknetConnectionsToadlet.fproxyDisabled=FProxy non ? abilitato (questa
interfaccia web)
+DarknetConnectionsToadlet.fproxyDisabled=FProxy non ? abilitato (questa
interfaccia web)
DarknetConnectionsToadlet.fproxyPort=FProxy: ${port}/tcp (questa interfaccia
web)
DarknetConnectionsToadlet.fullTitle=${counts} Amici (peer affidabili) di
${name}
DarknetConnectionsToadlet.go=Vai
-DarknetConnectionsToadlet.idleTime=Tempo trascorso da quando il nodo ?
connesso o da quando lo ? stato per l'ultima volta
+DarknetConnectionsToadlet.idleTime=Tempo trascorso da quando il nodo ?
connesso o da quando lo ? stato per l'ultima volta
DarknetConnectionsToadlet.idleTimeTitle=Connesso / Inattivo
-DarknetConnectionsToadlet.invalidSignature=Non ? stato possibile verificare le
firma elettronica della refernza (${error}).
+DarknetConnectionsToadlet.invalidSignature=Non ? stato possibile verificare le
firma elettronica della refernza (${error}).
DarknetConnectionsToadlet.ipAddress=Indirizzo del nodo in formato IP:porta
DarknetConnectionsToadlet.ipAddressTitle=Indirizzo
-DarknetConnectionsToadlet.listenOnly=Non connesso e solo ascolto: il nodo non
cercher? di connettersi a questo peer perch? l'utente l'ha impostato su solo
ascolto (listenOnly)
+DarknetConnectionsToadlet.listenOnly=Non connesso e solo ascolto: il nodo non
cercher? di connettersi a questo peer perch? l'utente l'ha impostato su solo
ascolto (listenOnly)
DarknetConnectionsToadlet.listenOnlyShort=Solo ascolto
-DarknetConnectionsToadlet.listening=Non connesso ma in ascolto: il nodo non
cercher? spesso di connettersi con questo peer perch? l'utente l'ha impostato
su burstOnly
+DarknetConnectionsToadlet.listening=Non connesso ma in ascolto: il nodo non
cercher? spesso di connettersi con questo peer perch? l'utente l'ha impostato
su burstOnly
DarknetConnectionsToadlet.listeningShort=Ascolto
DarknetConnectionsToadlet.myFriends=I Miei Amici (peer affidabili aggiunti da
me)
DarknetConnectionsToadlet.myReferenceHeader=${linkref}Referenza del
Nodo${/linkref} (${linktext}testo${/linktext})
DarknetConnectionsToadlet.nameClickToMessage=Nome del nodo. Clicca sul nome
per mandare un messaggio a questo peer:
DarknetConnectionsToadlet.nameTitle=Nome
-DarknetConnectionsToadlet.neverConnected=Mai Connesso. Questo peer non ? mai
stato connesso al nostro nodo.
+DarknetConnectionsToadlet.neverConnected=Mai Connesso. Questo peer non ? mai
stato connesso al nostro nodo.
DarknetConnectionsToadlet.neverConnectedShort=Mai connesso
-DarknetConnectionsToadlet.noPeersFirstHalf=Freenet non pu? funzionare perch?
non sono stati ancora aggiunti dei peer ai quali connettersi.
+DarknetConnectionsToadlet.noPeersFirstHalf=Freenet non pu? funzionare perch?
non sono stati ancora aggiunti dei peer ai quali connettersi.
DarknetConnectionsToadlet.noPeersSecondHalf=Leggi l'infobox in alto per vedere
come si fa.
-DarknetConnectionsToadlet.noPeersWithHomepageLink=Freenet non pu? funzionare
perch? non sono ancora stati aggiunti dei peer ai quali collegarsi. Alla pagina
${link}node homepage${/link}, in alto, si pu? leggere come fare.
-DarknetConnectionsToadlet.noRefOrURL=Non ? stato possibile rilevare una
referenza nodo o una URL. Si prega di riprovare.
+DarknetConnectionsToadlet.noPeersWithHomepageLink=Freenet non pu? funzionare
perch? non sono ancora stati aggiunti dei peer ai quali collegarsi. Alla pagina
${link}node homepage${/link}, in alto, si pu? leggere come fare.
+DarknetConnectionsToadlet.noRefOrURL=Non ? stato possibile rilevare una
referenza nodo o una URL. Si prega di riprovare.
DarknetConnectionsToadlet.noRequests=Al momento, il nodo non sta elaborando
alcuna richiesta.
DarknetConnectionsToadlet.nodeHomepage=homepage del nodo
DarknetConnectionsToadlet.nodePortsTitle=Porte utilizzate dal Nodo
DarknetConnectionsToadlet.notConnected=Non connesso: Finora non ci sono state
connessioni ma il nodo cerca continuamente di connettersi
DarknetConnectionsToadlet.notConnectedShort=Disconnessi
-DarknetConnectionsToadlet.opennetFnpPort=Opennet FNP: ${port}/UDP (usata per
connessioni a peer non affidabili, cio? Sconosciuti. Forwardare se possibile)
-DarknetConnectionsToadlet.pasteReference=Incolla la referenza qui (il nodo
elliminer? automaticamente le parti aggiunte da chat clients, p.es. <toad_>) :
+DarknetConnectionsToadlet.opennetFnpPort=Opennet FNP: ${port}/UDP (usata per
connessioni a peer non affidabili, cio? Sconosciuti. Forwardare se possibile)
+DarknetConnectionsToadlet.pasteReference=Incolla la referenza qui (il nodo
elliminer? automaticamente le parti aggiunte da chat clients, p.es. <toad_>) :
DarknetConnectionsToadlet.privateNote=Un commento privato relativo a questo
nodo:
DarknetConnectionsToadlet.privateNoteTitle=Nota Privata
-DarknetConnectionsToadlet.referenceCopyWarning=La referenza del nodo va
copiata ${bold}SENZA VARIAZIONI${/bold}. Qualsiasi modificazione la render?
${bold}inutilizzabile${/bold}..
+DarknetConnectionsToadlet.referenceCopyWarning=La referenza del nodo va
copiata ${bold}SENZA VARIAZIONI${/bold}. Qualsiasi modificazione la render?
${bold}inutilizzabile${/bold}..
DarknetConnectionsToadlet.remove=Elimina
DarknetConnectionsToadlet.removePeers=Elimina peer selezionati
-DarknetConnectionsToadlet.routingDisabled=Non sta instradando traffico: (la
connessione tra nodo locale e remoto ? attiva ma uno dei due rifiuta di
instradare traffico)
+DarknetConnectionsToadlet.routingDisabled=Non sta instradando traffico: (la
connessione tra nodo locale e remoto ? attiva ma uno dei due rifiuta di
instradare traffico)
DarknetConnectionsToadlet.routingDisabledShort=Non instrada traffico
DarknetConnectionsToadlet.seedClients=Nodi per i quali il nodo locale sta
facendo da seednode.
DarknetConnectionsToadlet.seedClientsShort=Seeding per
@@ -245,38 +244,38 @@
DarknetConnectionsToadlet.sendMessageToPeers=Manda messaggio ai peer
selezionati
DarknetConnectionsToadlet.separator=-- -- --
DarknetConnectionsToadlet.statusTitle=Status
-DarknetConnectionsToadlet.tmciDisabled=TMCI non ? abilitato (semplice
interfaccia a comandi testuali simile a telnet)
+DarknetConnectionsToadlet.tmciDisabled=TMCI non ? abilitato (semplice
interfaccia a comandi testuali simile a telnet)
DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/tcp (semplice interfaccia a
comandi testuali simile a telnet)
DarknetConnectionsToadlet.tooNew=Connesso ma troppo recente: La versione
obbligatoria minima di questo peer e' maggiore della versione che stiamo
utilizzando.
DarknetConnectionsToadlet.tooNewShort=Troppo recente
-DarknetConnectionsToadlet.tooOld=Connesso ma obsoleto: Questo peer sta usando
una versione obsoleta di Freenet. Esso non sar? utilizzato per l'instradamento
delle richieste.
+DarknetConnectionsToadlet.tooOld=Connesso ma obsoleto: Questo peer sta usando
una versione obsoleta di Freenet. Esso non sar? utilizzato per l'instradamento
delle richieste.
DarknetConnectionsToadlet.tooOldShort=Obsoleti
DarknetConnectionsToadlet.transferringRequests=Richieste trasferimento: invio
${senders}, ricezione ${receivers}
-DarknetConnectionsToadlet.triedToAddSelf=Non ? possibile aggiungere il proprio
stesso nodo ad una lista di peer remoti.
-DarknetConnectionsToadlet.unauthorized=L'accesso a questa pagina ? interedetto.
+DarknetConnectionsToadlet.triedToAddSelf=Non ? possibile aggiungere il proprio
stesso nodo ad una lista di peer remoti.
+DarknetConnectionsToadlet.unauthorized=L'accesso a questa pagina ? interedetto.
DarknetConnectionsToadlet.unknownAddress=(indirizzo sconosciuto)
DarknetConnectionsToadlet.updateChangedPrivnotes=Aggiorna commenti
DarknetConnectionsToadlet.urlReference=Inserire qui la URL della referenza:
DarknetConnectionsToadlet.versionTitle=Versione
ExtOldAgeUserAlert.extTooOld=Il file freenet-ext.jar sembra essere corrotto od
obsoleto: Per l'aggiornamento usare
http://downloads.freenetproject.org/alpha/freenet-ext.jar
-ExtOldAgeUserAlert.extTooOldShort=Il file freenet-ext.jar ? obsoleto. Si prega
di aggiornarlo.
+ExtOldAgeUserAlert.extTooOldShort=Il file freenet-ext.jar ? obsoleto. Si prega
di aggiornarlo.
ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext obsoleto
FProxyToadlet.abortToHomepage=Interrompi e ritorna alla homepage di FProxy
FProxyToadlet.alerts=Messaggi dettagliati sullo stato del nodo
FProxyToadlet.alertsTitle=Avvertenze
FProxyToadlet.backToFProxy=${link}Clicca qui${/link} per andare alla homepage
di FProxy
FProxyToadlet.backToReferrer=${link}Clicca qui${/link} per tornare alla pagina
referente.
-FProxyToadlet.cantBindPort=Non ? possibile abbinare FProxy a quella porta!
+FProxyToadlet.cantBindPort=Non ? possibile abbinare FProxy a quella porta!
FProxyToadlet.config=configura il nodo
FProxyToadlet.configTitle=Configurazione
FProxyToadlet.dangerousContentTitle=Contenuto Potenzialmente Pericoloso
-FProxyToadlet.dangerousRSS=Il file richiesto potrebbe essere RSS. Questo tipo
di file non pu? essere filtrato da Freenet nel modo giusto, ed inoltre
potrebbe contenere dei difetti (web-bugs) come immagini in-line ecc, che
potrebbero esporre l'indirizzo IP del computer in uso ad eventuali
siti-trappola e pertanto mettere a serio rischio l'anonimato dell'utente.
Firefox 2.0 e Internet Explorer 7.0 aprono il file come RSS anche se la
tipologia del contentuto (content type) ? "${type}".
+FProxyToadlet.dangerousRSS=Il file richiesto potrebbe essere RSS. Questo tipo
di file non pu? essere filtrato da Freenet nel modo giusto, ed inoltre
potrebbe contenere dei difetti (web-bugs) come immagini in-line ecc, che
potrebbero esporre l'indirizzo IP del computer in uso ad eventuali
siti-trappola e pertanto mettere a serio rischio l'anonimato dell'utente.
Firefox 2.0 e Internet Explorer 7.0 aprono il file come RSS anche se la
tipologia del contentuto (content type) ? "${type}".
FProxyToadlet.dangerousRSSSubtitle=I feed RSS possono costituire un pericolo
FProxyToadlet.dangerousRSSTitle=Contentuto Potenzialmente Pericoloso (RSS)
FProxyToadlet.downloadInBackgroundToDisk=Scarica in background e conserva
nella directory dei download
-FProxyToadlet.errorIsFatal=Questo ? un errore grave (fatal error). Riprovare
probabilmente non risolver? il problema.
+FProxyToadlet.errorIsFatal=Questo ? un errore grave (fatal error). Riprovare
probabilmente non risolver? il problema.
FProxyToadlet.errorWithReason=Errore: ${error}
-FProxyToadlet.expectedKeyButGot=Invece di una chiave Freenet, ? stato ricevuto:
+FProxyToadlet.expectedKeyButGot=Invece di una chiave Freenet, ? stato ricevuto:
FProxyToadlet.expectedMimeType=MIME type che ci si aspettava: ${mime}
FProxyToadlet.explanationTitle=Spiegazione
FProxyToadlet.fetchLargeFileAnywayAndDisplay=Apri comunque e mostra il file
nel browser
@@ -293,19 +292,20 @@
FProxyToadlet.invalidKeyTitle=Chiave non valida
FProxyToadlet.invalidKeyWithReason=Chiave non valida: ${reason}
FProxyToadlet.largeFile=File di grosse dimensioni
-FProxyToadlet.largeFileExplanationAndOptions=La chiave Freenet richiesta fa
riferimento a un file di grosse dimensioni.I file cos? grandi di solito non
possono essere mandati direttamente al browser perch? il nodo avrebbe bisogno
di troppo tempo per richiamarli. Le seguenti opzioni sono disponibili:
-FProxyToadlet.mayChange=(pu? cambiare)
+FProxyToadlet.largeFileExplanationAndOptions=La chiave Freenet richiesta fa
riferimento a un file di grosse dimensioni.I file cos? grandi di solito non
possono essere mandati direttamente al browser perch? il nodo avrebbe bisogno
di troppo tempo per richiamarli. Le seguenti opzioni sono disponibili:
+FProxyToadlet.mayChange=(pu? cambiare)
FProxyToadlet.mimeType=MIME type: ${mime}
FProxyToadlet.notEnoughMetaStrings=Non ci sono abbastanza meta-strings
FProxyToadlet.notFoundTitle=Non Trovato
-FProxyToadlet.openAsText=${link}Clicca qui${/link} per aprire il file come
testo 'liscio' (plain text) . Questo non dovrebbe essere pericoloso ma la
visualizzazione pu? risultare disturbata.
+FProxyToadlet.openAsText=${link}Clicca qui${/link} per aprire il file come
testo 'liscio' (plain text) . Questo non dovrebbe essere pericoloso ma la
visualizzazione pu? risultare disturbata.
+FProxyToadlet.openAsThawIndex=${link}Clicca qui${/link} per aprire un file con
il browser di indici Thaw. (leggere l'avvertenza!)
FProxyToadlet.openForce=${link}Clicca qui${/link} per aprire il file come
${mime} (leggi l'avvertenza sopra!).
-FProxyToadlet.openForceDisk=${link}Clicca qui${/link} per forzare il browser a
scaricare il file su disco.
+FProxyToadlet.openForceDisk=${link}Clicca qui${/link} per 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}Clicca 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).
+FProxyToadlet.openPossRSSAsPlainText=${link}Clicca 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).
FProxyToadlet.opennet=gestisci connessioni non affidabili
FProxyToadlet.opennetTitle=Sconosciuti
FProxyToadlet.options=Opzioni disponibili:
@@ -322,36 +322,36 @@
FProxyToadlet.statsTitle=Statistiche
FProxyToadlet.translation=helper per tradurre l'interfaccia del nodo nella tua
lingua
FProxyToadlet.translationTitle=Traduzione
-FProxyToadlet.unableToRetrieve=Non ? stato possibile richiamare questo file.
+FProxyToadlet.unableToRetrieve=Non ? stato possibile richiamare questo file.
FProxyToadlet.unknownMIMEType=MIME type: sconosciuto
FProxyToadlet.welcome=homepage
FProxyToadlet.welcomeTitle=Home
FcpServer.allowedHosts=Host abilitati (Leggere l'avvertenza)
-FcpServer.allowedHostsFullAccess=Host ai quali ? consentito accesso pieno
+FcpServer.allowedHostsFullAccess=Host ai quali ? consentito accesso pieno
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.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
+FcpServer.assumeDownloadDDAIsAllowedLong=Presumere che il download DDA sia
permesso? Se impostato su 'false' bisogner? fare una TestDDARequest prima di
ogni accesso DDA
FcpServer.assumeUploadDDAIsAllowed=Presumere che l'upload di DDA sia permesso?
-FcpServer.assumeUploadDDAIsAllowedLong=Presumere che l'upload DDA Sia
permesso? Se impostato su 'falso', bisogner? fare una TestDDARequest prima di
ogni accesso DDA.
+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 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
-FcpServer.downloadsFileExistsCannotReadOrWrite=Il file esiste ma non ?
possibile leggerlo e scriverlo
+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
+FcpServer.downloadsFileExistsCannotReadOrWrite=Il file esiste ma non ?
possibile leggerlo e scriverlo
FcpServer.downloadsFileIsDirectory=Nome non valido per una lista di download:
si tratta di una directory
FcpServer.downloadsFileParentDoesNotExist=La directory superiore non esiste
-FcpServer.downloadsFileUnreadable=Il file esiste ma non ? possibile leggerlo
+FcpServer.downloadsFileUnreadable=Il file esiste ma non ? possibile leggerlo
FcpServer.enablePersistentDownload=Abilitare download persistenti?
-FcpServer.enablePersistentDownloadLong=Abilita Persistence=forever
(persistenza illimitata) per le richieste FCP. Abilitando questa opzione si
permette alle richieste di persistere attraverso il riavvio del nodo: tali
richieste devono essere scritte sul disco rigido e questo in alcuni casi
particolari pu? costituire un problema di sicurezza
+FcpServer.enablePersistentDownloadLong=Abilita Persistence=forever
(persistenza illimitata) per le richieste FCP. Abilitando questa opzione si
permette alle richieste di persistere attraverso il riavvio del nodo: tali
richieste devono essere scritte sul disco rigido e questo in alcuni casi
particolari pu? costituire un problema di sicurezza
FcpServer.filenameToStorePData=File contenente download persistenti
FcpServer.filenameToStorePDataLong=File contenente download persistenti.
FcpServer.intervalBetweenWrites=Intervallo di scrittura dei download
persistenti su disco
FcpServer.intervalBetweenWritesLong=Intervallo tra le scritture di download
persistenti su disco. (millisecondi)
-FcpServer.isEnabled=FCP server ? abilitato?
-FcpServer.isEnabledLong=FCP server ? abilitato?
+FcpServer.isEnabled=FCP server ? abilitato?
+FcpServer.isEnabledLong=FCP server ? abilitato?
FcpServer.portNumber=Numero della porta FCP
FcpServer.portNumberLong=Numero della porta FCP.
FcpServer.ssl=Abilitare ssl?
@@ -361,31 +361,31 @@
FetchException.longError.11=Troppe componenti di percorso. Prova a eliminarne
uno
FetchException.longError.12=Errore interno relativo ai file temporanei:
potrebbe trattarsi di esaurimento dello spazio libero su disco rigido o di un
problema relativo a permessi ed autorizzazioni
FetchException.longError.13=Dati non trovati
-FetchException.longError.14=Percorso non trovato: non ? stato possobile
trovare un numero di nodi sufficiente ad essere certi che i dati non esistono
-FetchException.longError.15=Un nodo ? stato sovraccaricato o ? uscito fuori
tempo massimo
+FetchException.longError.14=Percorso non trovato: non ? stato possobile
trovare un numero di nodi sufficiente ad essere certi che i dati non esistono
+FetchException.longError.15=Un nodo ? stato sovraccaricato o ? uscito fuori
tempo massimo
FetchException.longError.16=Troppi redirects - loop?
FetchException.longError.17=Errore interno, probabilmente un bug
-FetchException.longError.18=Il file ? stato trovato ma ? andato perso durante
la ricezione
+FetchException.longError.18=Il file ? stato trovato ma ? andato perso durante
la ricezione
FetchException.longError.19=Errore splitfile
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=Volume dei metadati troppo grande
FetchException.longError.23=Troppi blocchi per segmento
-FetchException.longError.24=Sono necessarie pi? metastringhe (componenti di
percorso) nella URI
+FetchException.longError.24=Sono necessarie pi? metastringhe (componenti di
percorso) nella URI
FetchException.longError.25=Annullato
FetchException.longError.26=Archivio riavviato
FetchException.longError.27=Redirezione permanente: usare la nuova URI
-FetchException.longError.28=Non ? stato possibile raccogliere dati in quantit?
sufficiente; dati parziali sono stati richiamati ma il redirect potrebbe
puntare su localit? non valide
+FetchException.longError.28=Non ? stato possibile raccogliere dati in quantit?
sufficiente; dati parziali sono stati richiamati ma il redirect potrebbe
puntare su localit? non valide
FetchException.longError.29=MIME Type non valido: chiave non presente in lista
di MIME type permessi fornita dal client.
FetchException.longError.3=Metadati non utilizzabili
-FetchException.longError.30=La richiesta ? stata terminata da un nodo perch?
esso aveva da poco ricevuto un'altra richiesta per la stessa chiave e quella
richiesta non era andata a buon fine.
-FetchException.longError.4=Non ? stato possibile interpretare i metadati.
+FetchException.longError.30=La richiesta ? stata terminata da un nodo perch?
esso aveva da poco ricevuto un'altra richiesta per la stessa chiave e quella
richiesta non era andata a buon fine.
+FetchException.longError.4=Non ? stato possibile interpretare i metadati.
FetchException.longError.5=Fallimento durante l'estrazione di file da un
archivio
-FetchException.longError.6=Non ? stato possibile decodificare un blocco
+FetchException.longError.6=Non ? stato possibile decodificare un blocco
FetchException.longError.7=Metadati divisi in troppi livelli
-FetchException.longError.8=La richiesta ? stata riavviata troppe volte a causa
di cambiamenti negli archivii
-FetchException.longError.9=Troppe redirezioni (troppa ricorsivit?)
+FetchException.longError.8=La richiesta ? stata riavviata troppe volte a causa
di cambiamenti negli archivii
+FetchException.longError.9=Troppe redirezioni (troppa ricorsivit?)
FetchException.shortError.1=Recursione archivio troppo profonda
FetchException.shortError.10=Non in archivio
FetchException.shortError.11=Troppe componenti nel percorso
@@ -402,14 +402,14 @@
FetchException.shortError.21=Troppo grande
FetchException.shortError.22=Volume metadati eccessivo
FetchException.shortError.23=Troppi blocchi per segmento
-FetchException.shortError.24=Quantit? meta-strings insufficiente
+FetchException.shortError.24=Quantit? meta-strings insufficiente
FetchException.shortError.25=Annullato da caller
FetchException.shortError.26=Archivio riavviato
FetchException.shortError.27=Nuova URI
FetchException.shortError.28=Non sono stati trovati tutti i dati
FetchException.shortError.29=Errore: MIME type sbagliato
FetchException.shortError.3=Metadati sconosciuti
-FetchException.shortError.30=Non ? stato possibile trovare i dati richiesti
(fallimento recente)
+FetchException.shortError.30=Non ? stato possibile trovare i dati richiesti
(fallimento recente)
FetchException.shortError.4=Metadati non validi
FetchException.shortError.5=Fallimento archivio
FetchException.shortError.6=Errore decodifica block
@@ -419,7 +419,7 @@
FileOffer.acceptTransferButton=Accetta Trasferimento
FileOffer.askUserTitle=Trasferimento file diretto.
FileOffer.commentLabel=Commenti:
-FileOffer.failedReceiveHeader=Non ? stato possibile completare il
trasferimento del file ${filename} da ${node}.
+FileOffer.failedReceiveHeader=Non ? stato possibile completare il
trasferimento del file ${filename} da ${node}.
FileOffer.failedReceiveShort=Trasferimento di ${filename} da ${node} fallito.
FileOffer.failedReceiveTitle=Trasferimento fallito
FileOffer.fileLabel=File:
@@ -429,36 +429,36 @@
FileOffer.rejectTransferButton=Rifiuta trasferimento
FileOffer.senderLabel=Mittente:
FileOffer.sizeLabel=Dimensioni:
-FileOffer.succeededReceiveHeader=Il trasferimento del file ${filename} da
${node} ? stato completato.
-FileOffer.succeededReceiveShort=${filename} ? stato ricevuto da ${node}.
+FileOffer.succeededReceiveHeader=Il trasferimento del file ${filename} da
${node} ? stato completato.
+FileOffer.succeededReceiveShort=${filename} ? stato ricevuto da ${node}.
FileOffer.succeededReceiveTitle=Trasferimento file completato
FirstTimeWizardToadlet.bandwidthLimit=Limitazione banda
-FirstTimeWizardToadlet.bandwidthLimitLong=Scegliere il tipo di connessione e
la velocit? dal drop-down menu.
-FirstTimeWizardToadlet.bwlimitHigherSpeed=Velocit? maggiore
-FirstTimeWizardToadlet.bwlimitLowerSpeed=Velocit? minore
-FirstTimeWizardToadlet.chooseNodeName=Il nome del nodo ? obbligatorio!
-FirstTimeWizardToadlet.chooseNodeNameLong=Inserire un nome per il nodo. Il
nome sar? visibile ai peer darknet, quelli manualmente aggiunti dall'utente, e
non sar? visibile dai peer opeennet (aggiunti automaticamente) . Si consiglia
di usare il proprio nickname IRC possibilmente con un'informazione per il
conctatto in modo da essere reperibili in caso di problemi ("Mario Rossi marior
at sitodimario.com").
+FirstTimeWizardToadlet.bandwidthLimitLong=Scegliere il tipo di connessione e
la velocit? dal drop-down menu.
+FirstTimeWizardToadlet.bwlimitHigherSpeed=Velocit? maggiore
+FirstTimeWizardToadlet.bwlimitLowerSpeed=Velocit? minore
+FirstTimeWizardToadlet.chooseNodeName=Il nome del nodo ? obbligatorio!
+FirstTimeWizardToadlet.chooseNodeNameLong=Inserire un nome per il nodo. Il
nome sar? visibile ai peer darknet, quelli manualmente aggiunti dall'utente, e
non sar? visibile dai peer opeennet (aggiunti automaticamente) . Si consiglia
di usare il proprio nickname IRC possibilmente con un'informazione per il
conctatto in modo da essere reperibili in caso di problemi ("Mario Rossi marior
at sitodimario.com").
FirstTimeWizardToadlet.clickContinue=Clicca qui per continuare.
FirstTimeWizardToadlet.congratz=Benvenuto a bordo!
-FirstTimeWizardToadlet.congratzLong=Congratulazioni, la configurazione di base
del nodo Freenet ? completa. E' possibile cambiare e modificare ognuno dei
parametri appena impostati usando la pagina "configurazione" che ?
raggiungibile attraverso il menu sulla sinistra dell'interfaccia. Vi auguriamo
una piacevole esperienza con Freenet.
+FirstTimeWizardToadlet.congratzLong=Congratulazioni, la configurazione di base
del nodo Freenet ? completa. E' possibile cambiare e modificare ognuno dei
parametri appena impostati usando la pagina "configurazione" che ?
raggiungibile attraverso il menu sulla sinistra dell'interfaccia. Vi auguriamo
una piacevole esperienza con Freenet.
FirstTimeWizardToadlet.connectToStrangers=Connetti a sconosciuti?
-FirstTimeWizardToadlet.connectToStrangersLong=In un mondo ideale, ogni utente
Freenet si connetterebbe esclusivamente con nodi gestiti da persone fid?te.
Qesto ? di gran lunga il sistema pi? sicuro, che rende molto difficile per un
osservatore esterno determinare se un nodo stia o meno girando sul computer
osservato. D'altra parte, non avendo a disposizione almeno cinque amici,
parenti o conoscenti fid?ti che gi? usano Freenet, ai quali connettersi, come
soluzione alternativa ? possibile lasciare che il nodo si connetta
automaticamente a nodi gestiti da sconosciuti. Questa opzione pu? essere
disattivata in qualsiasi momento.
+FirstTimeWizardToadlet.connectToStrangersLong=In un mondo ideale, ogni utente
Freenet si connetterebbe esclusivamente con nodi gestiti da persone fid?te.
Qesto ? di gran lunga il sistema pi? sicuro, che rende molto difficile per un
osservatore esterno determinare se un nodo stia o meno girando sul computer
osservato. D'altra parte, non avendo a disposizione almeno cinque amici,
parenti o conoscenti fid?ti che gi? usano Freenet, ai quali connettersi, come
soluzione alternativa ? possibile lasciare che il nodo si connetta
automaticamente a nodi gestiti da sconosciuti. Questa opzione pu? essere
disattivata in qualsiasi momento.
FirstTimeWizardToadlet.continue=Continua
FirstTimeWizardToadlet.continueEnd=Clicca qui per cominciare ad usare Freenet!
FirstTimeWizardToadlet.datastoreSize=Dimensioni magazzino dati (datastore)
-FirstTimeWizardToadlet.datastoreSizeLong=Selezionare le dimensione desiderata
per il file di immagazzinaggio dati (datastore). Il datastore funziona come una
cache. Immagazzinare dati per il network aumenta il volume di scambio quando i
file sono molto richiesti. Pi? spazio ci si pu? permettere di dedicare a
Freenet e meglio ? per la comunit?. Un datastore di grosse dimensioni aumenta
notevolmente la velocit? del nodo.
+FirstTimeWizardToadlet.datastoreSizeLong=Selezionare le dimensione desiderata
per il file di immagazzinaggio dati (datastore). Il datastore funziona come una
cache. Immagazzinare dati per il network aumenta il volume di scambio quando i
file sono molto richiesti. Pi? spazio ci si pu? permettere di dedicare a
Freenet e meglio ? per la comunit?. Un datastore di grosse dimensioni aumenta
notevolmente la velocit? del nodo.
FirstTimeWizardToadlet.enableOpennet=Connettersi automaticamente a nodi non
affidabili gestiti da sconosciuti?
FirstTimeWizardToadlet.fivePercentDisk=(= 5% di spazio libero su disco)
FirstTimeWizardToadlet.homepageTitle=Configurazione Automatica Freenet
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.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=Utilizzo memoria
-FirstTimeWizardToadlet.memoryLimitLong=Specifica il valore massimo della
memoria utilizzabile da Freenet. Il nodo ha bisogno di pi? memoria se ci sono
molti file in coda per il download/upload. Si raccomanda di non impostare
questa opzione per un valore inferiore a 128MB tranne nel caso in cui la
memoria totale a disposizione sia veramente poca. Se il computer ha 1GB di
memoria RAM o pi?, si consiglia di usare almeno 256MB. Il cambiamento avr?
effetto dopo aver riavviato Freenet.
-FirstTimeWizardToadlet.noNetworkIF=Non ? stata trovata nessuna interfaccia di
rete addizionale
-FirstTimeWizardToadlet.noNetworkIFLong=Freenet non ha trovato altre interfacce
di rete, quindi dar? per scontato che l'utente si connetter? dal computer
locale e solo da quello.
-FirstTimeWizardToadlet.opennetNo=Si, ho almeno 5 amici che usano Freenet e
aggiunger? i loro dati alla pagina degli Amici.
-FirstTimeWizardToadlet.opennetWarning=In Paesi dove networking anonimo ?
illegale e/o se usa Freenet per accedere a materiale che potrebbe mettere nei
guai chi ne fosse trovato in possesso, un serio pericolo pu? risultare dal
configurare il nodo in modo da connettersi automaticamente a nodi gestiti da
sconosciuti, facilitando il il compito ad un avversario determinato. Freenet ?
ancora in fase sperimentale, gli autori non sono in grado di garatire sicurezza
assoluta.
+FirstTimeWizardToadlet.memoryLimitLong=Specifica il valore massimo della
memoria utilizzabile da Freenet. Il nodo ha bisogno di pi? memoria se ci sono
molti file in coda per il download/upload. Si raccomanda di non impostare
questa opzione per un valore inferiore a 128MB tranne nel caso in cui la
memoria totale a disposizione sia veramente poca. Se il computer ha 1GB di
memoria RAM o pi?, si consiglia di usare almeno 256MB. Il cambiamento avr?
effetto dopo aver riavviato Freenet.
+FirstTimeWizardToadlet.noNetworkIF=Non ? stata trovata nessuna interfaccia di
rete addizionale
+FirstTimeWizardToadlet.noNetworkIFLong=Freenet non ha trovato altre interfacce
di rete, quindi dar? per scontato che l'utente si connetter? dal computer
locale e solo da quello.
+FirstTimeWizardToadlet.opennetNo=Si, ho almeno 5 amici che usano Freenet e
aggiunger? i loro dati alla pagina degli Amici.
+FirstTimeWizardToadlet.opennetWarning=In Paesi dove networking anonimo ?
illegale e/o se usa Freenet per accedere a materiale che potrebbe mettere nei
guai chi ne fosse trovato in possesso, un serio pericolo pu? risultare dal
configurare il nodo in modo da connettersi automaticamente a nodi gestiti da
sconosciuti, facilitando il il compito ad un avversario determinato. Freenet ?
ancora in fase sperimentale, gli autori non sono in grado di garatire sicurezza
assoluta.
FirstTimeWizardToadlet.opennetYes=No, voglio che il nodo trovi automaticamente
degli sconosciuti ai quali connettersi.
FirstTimeWizardToadlet.selectLanguage=Lingua
FirstTimeWizardToadlet.selectLanguageLong=Selezionare una lingua dalla lista
qui sotto:
@@ -468,93 +468,93 @@
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 Automatica Freenet -
Congratulazioni, il nodo ? ora configurato.
-FirstTimeWizardToadlet.step7Title=Configurazione Automatica Freenet -
Congratulazioni, il nodo ? ora configurato.
+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 nella 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 - 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 molta memoria RAM
-FirstTimeWizardToadlet.memory.64M=64MB - Usare solo in caso di estrema
necessit?
+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
-GIFFilter.notGif=Il file che si sta cercando di richiamare non ? una GIF.
Potrebbe trattarsi di un file in un altro formato, ed il browser potrebbe fare
qualcosa di pericoloso a cause della confusione generata dalla mancata
corrispondenza; il file ? stato pertanto bloccato.
-GIFFilter.tooShort=Il file ? troppo piccolo per essere una GIF.
+GIFFilter.notGif=Il file che si sta cercando di richiamare non ? una GIF.
Potrebbe trattarsi di un file in un altro formato, ed il browser potrebbe fare
qualcosa di pericoloso a cause della confusione generata dalla mancata
corrispondenza; il file ? stato pertanto bloccato.
+GIFFilter.tooShort=Il file ? troppo piccolo per essere una GIF.
GIFFilter.tooShortTitle=Troppo corto
-GenericReadFilterCallback.couldNotParseAbsoluteFreenetURI=Non ? stato
possibile interpretare come URI Freenet assoluta.
-GenericReadFilterCallback.couldNotParseFormURIWithError=Il filtro non ?
riuscito ad interpretare ${error} dalla URI.
-GenericReadFilterCallback.couldNotParseRelativeFreenetURI=Non ? stato
possibile interpretare come Freenet URI relativa.
+GenericReadFilterCallback.couldNotParseAbsoluteFreenetURI=Non ? stato
possibile interpretare come URI Freenet assoluta.
+GenericReadFilterCallback.couldNotParseFormURIWithError=Il filtro non ?
riuscito ad interpretare ${error} dalla URI.
+GenericReadFilterCallback.couldNotParseRelativeFreenetURI=Non ? stato
possibile interpretare come Freenet URI relativa.
GenericReadFilterCallback.couldNotParseURIWithError=Il filtro ha fallito
nell'analisi della URI: ${error}
GenericReadFilterCallback.invalidFormURI=URI form non valida: punta a risorsa
esterna
GenericReadFilterCallback.invalidFormURIAttemptToEscape=Tentativo di evasione
dalla struttura delle directory
GenericReadFilterCallback.malformedAbsoluteURL=URL malformata (assoluto):
${error}
-GenericReadFilterCallback.malformedRelativeURL=URL malformata (relativo):
${error}
-GenericReadFilterCallback.protocolNotEscaped=Non si tratta di un protocollo
fuggitivo: ${protocol}
-HTMLFilter.couldNotParseStyle=Non ? stato possibile abbinare lo stile
dell'input
+GenericReadFilterCallback.malformedRelativeURL=URL malformata (relativa):
${error}
+GenericReadFilterCallback.protocolNotEscaped=Non ? un protocollo fuggitivo:
${protocol}
+HTMLFilter.couldNotParseStyle=Non ? stato possibile abbinare lo stile
dell'input
HTMLFilter.deletedUnknownStyle=stile sconosciuto eliminato
-HTMLFilter.failedToParseLabel=Il filtro HTML non ? riuscito a interpretare la
pagina
+HTMLFilter.failedToParseLabel=Il filtro HTML non ? riuscito a interpretare la
pagina
HTMLFilter.tooManyNestedStyleOrScriptTags=Troppi tag 'style' annidati e/o
troppi tag di scripting: analisi ambigua o non valida
-HTMLFilter.tooManyNestedStyleOrScriptTagsLong=Troppi tag </style> annidati -
analisi ambigua o non valida. Non ? possibile filtrare in modo affidabile
quindi i tag interni sono stai rimossi: questo pu? causare al browser qualche
inconveniente nella visuallizzazione
+HTMLFilter.tooManyNestedStyleOrScriptTagsLong=Troppi tag </style> annidati -
analisi ambigua o non valida. Non ? possibile filtrare in modo affidabile
quindi i tag interni sono stai rimossi: questo pu? causare al browser qualche
inconveniente nella visuallizzazione
HTMLFilter.unknownTag=tag sconosciuto ${tag}
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 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.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.forwardPortShortMaybeForwarded=Si prega di configurare
il forward della porta ${port} UDP (questo potrebbe essere gi? stato fatto, ma
non ancora rilevato)
+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.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 per porte ${port1} e ${port2} UDP (potrebbe essere gi? stato fatto).
+IPDetectorPluginManager.forwardTwoPortsShortMaybeForwarded=Configurare il
forward per porte ${port1} e ${port2} UDP (potrebbe essere gi? stato fatto).
IPDetectorPluginManager.forwardTwoPortsShortNotForwarded=Si prega di
configurare il forward per le porte ${port1} e ${port2} UDP.
IPDetectorPluginManager.fullCone=La connessione a Internet sembra avvenire
attraverso una "full cone" NAT. Il nodo dovrebbe riuscire connettersi con
qualunque altro nodo Freenet.
IPDetectorPluginManager.fullConeTitle=Rilevata full cone NAT
-IPDetectorPluginManager.maybeAlreadyForwarded=Potrebbe essere gi? stato fatto
(? difficile per Freenet determinarlo).
-IPDetectorPluginManager.noConnectivity=La connessione a Internet non sembra
essere provvista di supporto UDP. A meno che non si tratti di un rilevamento
erroneo, non ? probabile che Freenet possa funzionare al momento.
-IPDetectorPluginManager.noConnectivityTitle=Mancanza di connettivit? UDP
-IPDetectorPluginManager.noConnectivityshort=Gravi problemi di connessione:
Nessuna connettivit? UDP, Freenet non pu? funzionare!
+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
-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.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 una "restricted cone" NAT (router). Dovrebbe essere comunque
possibile connettersi alla maggior parte dei nodi Freenet.
IPDetectorPluginManager.restrictedTitle=E' stata rilevata una restricted cone
NAT
IPDetectorPluginManager.seriousConnectionProblems=Gravi problemi di
connessione:
IPDetectorPluginManager.suggestForwardPort=Potrebbe essere necessario
configurare manualmente il 'port forwarding' per la porta UDP numero ${port}.
Vedi: http://wiki.freenetproject.org/FirewallAndRouterIssues (disponibile solo
in inglese, per ora).
-IPDetectorPluginManager.suggestForwardPortWithLink=Potrebbe essere necessario
${link}configurare il port forwarding${/link} (porta UDP numero ${port})
manualmente (oppure ci? ? gi? stato fatto: Freenet pu? avere delle difficolt?
in questo tipo di rilevazione).
+IPDetectorPluginManager.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=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.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=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.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=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.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=Non ? stato possibile rilevare
l'indirizzo IP. Potrebbero verificarsi problemi di connessione.
+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=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"
+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"
InsertException.longError.10=Annullato dall'utente
InsertException.longError.11=Meta string (probabilmente '/') usata nella URI
InsertException.longError.12=Errore di formattazione nel blob binario
InsertException.longError.2=Errore bucket interno: potrebbe trattarsi di
mancanza di spazio sufficiente su disco rigido o di mancanza di autorizzazione.
InsertException.longError.3=Errore interno
-InsertException.longError.4=Un nodo 'a valle' (downstream) ? andato in time
out o ? stato gravemente sovraccaricato
-InsertException.longError.5=Non ? stato possibile propagare questa inserzione
su un numero sufficiente di nodi (questo e' normale su network di piccole
dimensioni: si pu? provare a richiamare il file comunque)
+InsertException.longError.4=Un nodo 'a valle' (downstream) ? andato in time
out o ? stato gravemente sovraccaricato
+InsertException.longError.5=Non ? stato possibile propagare questa inserzione
su un numero sufficiente di nodi (questo e' normale su network di piccole
dimensioni: si pu? provare a richiamare il file comunque)
InsertException.longError.6=Errori fatali in un'inserzione di splitfiles
-InsertException.longError.7=Non ? stato possibile inserire splitfile: numero
di tentativi esaurito (errori nonfatali)
-InsertException.longError.8=Non ? stato possibile far partire l'inserzione dal
nodo locale.
-InsertException.longError.9=L' inserzione ? in conflitto con dati
pre-esistenti e differenti alla stessa chiave
+InsertException.longError.7=Non ? stato possibile inserire splitfile: numero
di tentativi esaurito (errori nonfatali)
+InsertException.longError.8=Non ? stato possibile far partire l'inserzione dal
nodo locale.
+InsertException.longError.9=L' inserzione ? in conflitto con dati
pre-esistenti e differenti alla stessa chiave
InsertException.shortError.1=URI non valida
InsertException.shortError.10=Annullato
InsertException.shortError.11=Meta string usata nella chiave
@@ -565,39 +565,39 @@
InsertException.shortError.5=Percorso non trovato
InsertException.shortError.6=Alcuni block sono falliti in modo fatale
InsertException.shortError.7=Alcuni block hanno esaurito il numero di
tentativi a disposizione
-InsertException.shortError.8=Non ? stato possibile inoltrare la richiesta
+InsertException.shortError.8=Non ? stato possibile inoltrare la richiesta
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)
+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=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 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.
+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 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.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. Cliccando su
tali link (e possono essere camuffati) si espone il proprio indirizzo IP,
compromettendo l'anonimato.
+KnownUnsafeContentTypeException.dangerousLinks=Contenuto di questo tipo pu?
includere dei link a pagine pubblicate al di fuori di Freenet. Cliccando 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 o con
l'aiuto di altri programmi: i 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.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:
KnownUnsafeContentTypeException.knownUnsafe=Questo e' un MIME type
potenzialmente pericoloso. Se il nodo lo lascia passare, il browser potrebbe
fare qualcosa capace di compromettere l'anonimato dell'utente, esponendone
l'indirizzo IP in relazione a questa pagina. In particolare:
-KnownUnsafeContentTypeException.noFilter=Non ? disponibile alcun filtro per
questo tipo di dati; ? necessario quindi prendere tutte le possibili
precauzioni.
+KnownUnsafeContentTypeException.noFilter=Non ? disponibile alcun filtro per
questo tipo di dati; ? necessario quindi prendere tutte le possibili
precauzioni.
KnownUnsafeContentTypeException.title=Conosciuto come pericoloso: Tipo ${type}
LocalFileInsertToadlet.checkPathExist=Accerta l'esistenza del percorso
specificato.
LocalFileInsertToadlet.checkPathIsDir=Controlla che il percorso specificato
sia una directory
LocalFileInsertToadlet.checkPathReadable=Controlla che il percorso specificato
sia leggibile dall'utente che sta utilizzando il nodo.
-LocalFileInsertToadlet.dirAccessDenied=L'accesso a questa directory ?
interdetto
-LocalFileInsertToadlet.dirCannotBeRead=Non ? stato possibile leggere dalla
directory "${path}".
+LocalFileInsertToadlet.dirAccessDenied=L'accesso a questa directory ?
interdetto
+LocalFileInsertToadlet.dirCannotBeRead=Non ? stato possibile leggere dalla
directory "${path}".
LocalFileInsertToadlet.fileHeader=File
LocalFileInsertToadlet.insert=Inserisci
LocalFileInsertToadlet.listing=Elenco directory ${path}
LocalFileInsertToadlet.listingTitle=Listing di ${path}
LocalFileInsertToadlet.sizeHeader=Dimensioni
-LogConfigHandler.detaildPriorityThreshold=Soglie di priorit? dettagliate
-LogConfigHandler.detaildPriorityThresholdLong=Soglie di priorit? dettagliate.
Esempio: freenet:normal,freenet.node:minor
+LogConfigHandler.detaildPriorityThreshold=Soglie di priorit? dettagliate
+LogConfigHandler.detaildPriorityThresholdLong=Soglie di priorit? dettagliate.
Esempio: freenet:normal,freenet.node:minor
LogConfigHandler.dirName=Directory dei log
LogConfigHandler.dirNameLong=Directory contenente i log files
LogConfigHandler.enabled=Abilita Log
@@ -606,30 +606,30 @@
LogConfigHandler.maxCachedBytesLong=Numero massimo di bytes nella RAM cache
LogConfigHandler.maxCachedLines=Numero massimo di righe nella RAM cache
LogConfigHandler.maxCachedLinesLong=Numero massimo di righe nella RAM cache
-LogConfigHandler.maxZippedLogsSize=Spazio massimo utilizzabile da vecchi log
file su disco rigido.
-LogConfigHandler.maxZippedLogsSizeLong=Spazio massimo utilizzabile da vecchi
log
-LogConfigHandler.minLoggingPriority=Priorit? minima dei messaggi da iscrivere
nei log.
-LogConfigHandler.minLoggingPriorityLong=Minima priorit? dei messaggi che
vengono iscritti nel log file. Le opzioni sono: minor, normal, error,
nell'ordine dalla meno alla pi? verbosa.
+LogConfigHandler.maxZippedLogsSize=Spazio massimo per vecchi log
+LogConfigHandler.maxZippedLogsSizeLong=Spazio massimo su disco utilizzabile da
vecchi log.
+LogConfigHandler.minLoggingPriority=Priorit? minima dei messaggi da iscrivere
nei log.
+LogConfigHandler.minLoggingPriorityLong=Minima priorit? dei messaggi che
vengono iscritti nel log file. Le opzioni sono: minor, normal, error,
nell'ordine dalla meno alla pi? verbosa.
LogConfigHandler.rotationInterval=Intervallo di rotazione dei log
LogConfigHandler.rotationIntervalLong=Intervallo di rotazione dei log -
Periodo di tempo allo scadere del quale i log vengono ruotati. Gli ultimi due
log files vengono conservati (current.log e prev.log) insieme a diversi log
file compressi fino al massimo impostato in maxZippedLogsSize
-LoggerHook.unrecognizedPriority=Nome di priorit? non riconosciuto: ${name}.
-LongOption.parseError=Il valore specificato non pu? essere interpretato come
64-bit integer : ${val}
-MeaningfulNodeNameUserAlert.noNodeNick=Non ? stato possibile trovare il
nickname da utilizzare. Usare qui un indirizzo e-mail o un nickname IRC ?
generalmente una buona idea in quanto consente ai peer di identificare il nodo.
(nota che soltanto i peer darknet elencati alla pagina Amici potranno vedere il
nome del nodo, che resta invece invisibile ai peer Opennet)
+LoggerHook.unrecognizedPriority=Nome di priorit? non riconosciuto: ${name}.
+LongOption.parseError=Il valore specificato non pu? essere interpretato come
64-bit integer : ${val}
+MeaningfulNodeNameUserAlert.noNodeNick=Non ? stato possibile trovare il
nickname da utilizzare. Usare qui un indirizzo e-mail o un nickname IRC ?
generalmente una buona idea in quanto consente ai peer di identificare il nodo.
(nota che soltanto i peer darknet elencati alla pagina Amici potranno vedere il
nome del nodo, che resta invece invisibile ai peer Opennet)
MeaningfulNodeNameUserAlert.noNodeNickShort=Nome nodo non definito.
MeaningfulNodeNameUserAlert.noNodeNickTitle=Nome nodo non definito.
N2NTMToadlet.composingMessageLabel=Messaggio N2NTM da inviare ai seguenti
nodi:
N2NTMToadlet.delayed=Il nodo interressato sta temporaneamente respingendo
richieste; il messaggio potrebbe giungere in lieve ritardo.
N2NTMToadlet.delayedTitle=Differito
-N2NTMToadlet.failed=Il peer interessato non ? connesso in questo momento: non
? stato possibile inviare il messaggio
+N2NTMToadlet.failed=Il peer interessato non ? connesso in questo momento: non
? stato possibile inviare il messaggio
N2NTMToadlet.failedTitle=Fallito
N2NTMToadlet.friends=Amici
N2NTMToadlet.homepage=Homepage
N2NTMToadlet.noSuchFileOrCannotRead=Trasferimento fallito:File inesistente o
illegibile.
N2NTMToadlet.peerName=Nome del Peer
N2NTMToadlet.peerNotFoundTitle=Peer non trovato
-N2NTMToadlet.peerNotFoundWithHash=Non ? stato possibile trovare il peer con
hash code \u201c${hash}\u201d
+N2NTMToadlet.peerNotFoundWithHash=Non ? stato possibile trovare il peer con
hash code \u201c${hash}\u201d
N2NTMToadlet.processingSend=Invio messaggio in corso
-N2NTMToadlet.queued=In attesa: Il peer interessato non ? connesso in questo
momento. Il messaggio ? stato posto in attesa e verr? spedito al pi? presto
possibile
+N2NTMToadlet.queued=In attesa: Il peer interessato non ? connesso in questo
momento. Il messaggio ? stato posto in attesa e verr? spedito al pi? presto
possibile
N2NTMToadlet.queuedTitle=Aggiunto alla Coda
N2NTMToadlet.returnToFriends=Torna alla lista degli Amici
N2NTMToadlet.returnToNodeHomepage=Torna alla homepage del nodo
@@ -640,30 +640,30 @@
N2NTMToadlet.sentTitle=Inviato
N2NTMToadlet.tooLong=I messaggi N2NTM possono contenere fino a un massimo di
1024 caratteri
N2NTMToadlet.tooLongTitle=Troppo Lungo
-N2NTMToadlet.unauthorized=L'accesso a questa pagina ? interdetto
+N2NTMToadlet.unauthorized=L'accesso a questa pagina ? interdetto
N2NTMUserAlert.delete=Elimina
N2NTMUserAlert.header=Da: ${from} (scritto ${composed} | inviato ${sent} |
ricevuto ${received})
N2NTMUserAlert.headerShort=Messaggio da ${from}
N2NTMUserAlert.reply=Rispondi
N2NTMUserAlert.title=Messaggio di testo da nodo a nodo (N2NTM) ${number} da:
${peername} (${peer})
-Node.acceptSeedConnections=Selezionando "vero" il nodo accetter? connessioni
da nodi che intendono usare la modalit? insicura (opennet) e li aiuter? a
connettersi alla rete Freenet. Ci? rende possibile la connessione a qualsiasi
nodo in possesso della referenza ma limitata dall'annuncio: le richieste di
connessione sono indirizzate solo ai nodi aggiunti tramite annuncio. Il nodo
locale potrebbe essere incluso a meno che non abbia gi? molti peer opennet
(visibili alla pagina "Sconosciuti")
+Node.acceptSeedConnections=Selezionando "vero" il nodo accetter? connessioni
da nodi che intendono usare la modalit? insicura (opennet) e li aiuter? a
connettersi alla rete Freenet. Ci? rende possibile la connessione a qualsiasi
nodo in possesso della referenza ma limitata dall'annuncio: le richieste di
connessione sono indirizzate solo ai nodi aggiunti tramite annuncio. Il nodo
locale potrebbe essere incluso a meno che non abbia gi? molti peer opennet
(visibili alla pagina "Sconosciuti")
Node.acceptSeedConnectionsShort=Abilita seednode
Node.alwaysAllowLocalAddresses=Permettere sempre la connessione a nodi via
indirizzi locali?
-Node.alwaysAllowLocalAddressesLong=Se impostato su "vero" il nodo cercher? di
connettersi ad altri nodi usando il loro indirizzo locale (localhost, LAN)
oltre al loro indirizzo IP pubblico. Se questa opzione non e' impostata, si pu?
comunque abilitarla separatamente per singoli peer darknet (ma non per i peer
opennet). Impostare questa opzione se ci si vuole connettere ad altri nodi
sulla stessa rete locale (LAN) o che girano sullo stesso computer, e non far
caso alle referenze "bogus" ("scr?use") che possono far mandare al nodo
pacchetti UDP alle macchine sulla rete locale.
+Node.alwaysAllowLocalAddressesLong=Se impostato su "vero" il nodo cercher? di
connettersi ad altri nodi usando il loro indirizzo locale (localhost, LAN)
oltre al loro indirizzo IP pubblico. Se questa opzione non e' impostata, si pu?
comunque abilitarla separatamente per singoli peer darknet (ma non per i peer
opennet). Impostare questa opzione se ci si vuole connettere ad altri nodi
sulla stessa rete locale (LAN) o che girano sullo stesso computer, e non far
caso alle referenze "bogus" ("scr?use") che possono far mandare al nodo
pacchetti UDP alle macchine sulla rete locale.
Node.assumeNATed=Presumere che la porta non sia forwardata.
-Node.assumeNATedLong=Dare per scontato che la porta sia dietro NAT e non
forwardata? In questo caso il nodo mander? handshake ogni 10-30 secondi.
+Node.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
Node.bindToLong=Indirizzo IP
-Node.buggyJVM=La JVM attualmente in uso (${version}) ? una versione
notoriamente afflitta da 'bug' che pu? produrre OutOfMemoryError anche con
molta memoria ancora a disposizione. Si raccomanda di aggiornare Java. La
versione consigliata ? Sun Java 1.6, ma ? possibile usare anche 1.4.2 o 1.5.
-Node.buggyJVMShort=Freenet sta attualmente utilizzando Java versione
${version}, che ? notoriamente afflitta da p'bug' pericolosi. Si prega di
aggiornare Java al pi? presto possibile.
+Node.buggyJVM=La JVM attualmente in uso (${version}) ? una versione
notoriamente afflitta da 'bug' che pu? produrre OutOfMemoryError anche con
molta memoria ancora a disposizione. Si raccomanda di aggiornare Java. La
versione consigliata ? Sun Java 1.6, ma ? possibile usare anche 1.4.2 o 1.5.
+Node.buggyJVMShort=Freenet sta attualmente utilizzando Java versione
${version}, che ? notoriamente afflitta da p'bug' pericolosi. Si prega di
aggiornare Java al pi? presto possibile.
Node.buggyJVMTitle=Avvertennza JVM soggetta a 'bug'
-Node.buggyJVMWithLink=La JVM in uso (${version}) ? notoriamente
${link}difettosa${/link}. Pu? produrre errori tipo OutOfMemoryError anche con
molta memoria ancora disponibile. Sarebbe auspicabile aggiornare almeno a Sun
Java 1.4.2_13, 1.5.0_10 o 1.6 (quest'ultima ? la versione consigliata).
+Node.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 datastore
Node.databaseMemoryLong=Uso massimo della memoria del database contenente
indici del magazzino dati (datastore). 0 significa nessun limite (non supera
comunque il 30% circa della memoria massima)
Node.deadlockTitle=Deadlocking probabilmente dovuto ad una combinazione di JVM
e kernel che da luogo a "bug".
-Node.deadlockWarning=ATTENZIONE: E' stato rilevato l'uso di Sun JVM con NPTL.
Ci? pu? produrre il "congelamento" del nodo a causa della JVM che perde un
lock. Per ovviare a tale inconveniente ? necessatio disabilitare NPTL
impostando la variabile ambientale LD_ASSUME_KERNEL=2.4.1. Le versioni pi?
recenti di Freenet installer dovrebbero gi? esserne provviste; reinstallare, o
modificare il file run.sh
(https://emu.freenetproject.org/svn/trunk/apps/installer/installclasspath/run.sh).
Su alcuni sistemi pu? essere necessario installare le pthreads libraries
perch? questo funzioni. Nota che il nodo cercherebbe di riavviarsi
automaticamente se un tale deadlock occorresse, ma questa funzione non ? ancora
pienamente affidabile, e richiede tempo.
+Node.deadlockWarning=ATTENZIONE: E' stato rilevato l'uso di Sun JVM con NPTL.
Ci? pu? produrre il "congelamento" del nodo a causa della JVM che perde un
lock. Per ovviare a tale inconveniente ? necessatio disabilitare NPTL
impostando la variabile ambientale LD_ASSUME_KERNEL=2.4.1. Le versioni pi?
recenti di Freenet installer dovrebbero gi? esserne provviste; reinstallare, o
modificare il file run.sh
(https://emu.freenetproject.org/svn/trunk/apps/installer/installclasspath/run.sh).
Su alcuni sistemi pu? essere necessario installare le pthreads libraries
perch? questo funzioni. Nota che il nodo cercherebbe di riavviarsi
automaticamente se un tale deadlock occorresse, ma questa funzione non ? ancora
pienamente affidabile, e richiede tempo.
Node.disableHangCheckers=Disabilita tutti gli hang checker
Node.disableHangCheckersLong=Disabilita tutte le funzioni hang
checkers/watchdog. Impostare per fare il profiling di Fred.
Node.disablePHTLS=Disabilita HTL probabilistico
@@ -675,24 +675,24 @@
Node.enablePacketCoalescing=Abilita coalescenza pacchetti?
Node.enablePacketCoalescingLong=Ablilita coalescenza pacchetti? La coalescenza
dei pacchetti aumenta l'efficienza della banda, ruduce l'uso di CPU e aumenta
leggermente la resistenza all'analisi di traffico, al costo di una leggera
latenza dei messaggi. Si consiglia di non disabilitare questa opzione.
Node.enablePerNodeFailureTables=Abilita tabelle operazioni fallite per nodi?
-Node.enablePerNodeFailureTablesLong=Abilita reinstradamento automatico intorno
ai nodi che hanno fallito una richiesta entro gli ultimi 10 minuti?
+Node.enablePerNodeFailureTablesLong=Abilita il reinstradamento automatico
intorno a nodi che abbiano fallito richieste negli gli ultimi 10 minuti
Node.enableSwapQueueing=Abilita messa in coda di richieste di scambio? (NON
DISABILITARE!)
Node.enableSwapQueueingLong=Abilita lista d'attesa per richieste di swap? (NON
DISABILITARE!)
Node.enableSwapping=Abilita scambio di locazione (NON DISABILITARE)
Node.enableSwappingLong=Abilita scambio di locazione? (NON DISABILITARE! Utile
solo in alcune simulazioni).
Node.enableULPRDataPropagation=Abilita propagazione dati ULPR?
Node.enableULPRDataPropagationLong=Abilita propagazione rapida di chiavi
richieste recentemente ai nodi che le hanno richieste quando i dati sono stati
finalmente trovati? (Richieste Persistenti Ultra-Leggere)
-Node.errorApplyingConfig=Si ? verificato un errore durante l'applicazione
della nuova configurazione : ${error}
+Node.errorApplyingConfig=Si ? verificato un errore durante l'applicazione
della nuova configurazione : ${error}
Node.extraPeerDir=Directory dei dati extra peer
Node.extraPeerDirLong=Directory dove conservare dati extra
Node.forceBigShrink=Esegui immediatamente grosse riduzioni di dimensione dello
store
-Node.forceBigShrinkLong=Determina se eseguire immediatamente le riduzioni di
dimensione in misura superiore al 10% del magazzino (store), piuttosto che
aspettare il prossimo riavvio del nodo. Le riduzioni on-line non preservano i
dati utilizzati per ultimi quindi l'uso di questa opzione non ? raccomandato;
da usarsi solo nel caso in cui sia desiderabile un risultato immediato.
+Node.forceBigShrinkLong=Determina se eseguire immediatamente le riduzioni di
dimensione in misura superiore al 10% del magazzino (store), piuttosto che
aspettare il prossimo riavvio del nodo. Le riduzioni on-line non preservano i
dati utilizzati per ultimi quindi l'uso di questa opzione non ? raccomandato;
da usarsi solo nel caso in cui sia desiderabile un risultato immediato.
Node.inBWLimit=Limite ampiezza di banda in entrata (bytes per secondo)
Node.inBWLimitLong=Limite dell'ampiezza di banda in entrata (bytes/sec); il
nodo cerca di non eccedere tale limite; -1 siglifica quattro volte il limite
impostato per l'ampiezza di banda in uscita (outputBandwidthLimit)
Node.invalidStoreSize=Il datastore (magazzino dati) deve essere di dimensioni
uguali o superiori a 32MB
-Node.java14ShortText=Entro breve tempo non sar? pi? possibile far girare
Freenet su Java 1.4. Si prega di aggiornare.
-Node.java14Text=Freenet sta girando su Java 1.4. Si prega di aggiornare a Java
1.5 o superiore. Gli Aggiornamenti automatici sono stati temporaneamente
disabilitati per evitare problemi con le prossime versioni di Freenet, che non
potranno funzionare con Java 1.4.
-Node.java14Title=Java 1.4. non ? pi? supportata
+Node.java14ShortText=Tra breve non sara pi? possibile operare un nodo Freenet
su Java 1.4. Si prega di aggiornare a 1.5 o 1.6
+Node.java14Text=Freenet sta girando su una versione 1.4 di Java. Si prega di
aggiornare almeno a Java 1.5. Gli aggiornamenti automatici di Freenet sono
stati temporaneamente disabilitati in quanto versioni future potrebbero non non
girare del tutto.
+Node.java14Title=Freenet non ? pi? compatibile con Java 1.4
Node.l10nLanguage=Lingua dell' interfaccia grafica
Node.l10nLanguageLong=Cambia la lingua in cui messaggi sono visualizzati.
Alcune frasi e messaggi saranno visibili in versione tradotta solo dopo il
prossimo riavvio del nodo.
Node.maxHTL=HTL massimo
@@ -706,64 +706,70 @@
Node.nodeName=Nome del nodo
Node.nodeNameLong=Nome del nodo. E' visibile solo agli Amici (darknet peer),
mentre gli Sconosciuti (opennet peer) non potranno vederlo.
Node.notUsingSunVM=E' stata rilevata una JVM ${vendor} ${version} che potrebbe
influire sul corretto funzionamento del nodo. Se possibile, installare Sun java
disponibile presso http://www.java.com/getjava
-Node.notUsingSunVMShort=Freenet sta attualmente utilizzando JVM (Java Virtual
Machine) diversa da Sun, che ? quella raccomandata. Si prega di scaricare ed
installare la versione corrente di Sun Java JRE (Java Runtime Environment)
+Node.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. Questo non ?
raccomandato.
+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. 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? Ci? rende leggermente pi? difficile un attacco eseguito
connettendosi al nodo pi? volte con diverse identit? in modo da dominarne il
routing (instradamento) e rendere pi? facile raccogliere dati con lo
"harvesting" (lett: "il raccolto", in agricoltura). Questa opzione impedisce
che un peer sia connesso al nodo sia su darknet che su opennet.
-Node.opennetEnabled=Abilita Modalit? Insicura (connette automaticamente a nodi
gestiti da Sconosciuti)
-Node.opennetEnabledLong=Abilita Modalit? Insicura? (detta anche Opennet)
Abilitando questa opzione il nodo scambier? automaticamente referenze on altri
nodi. Ci? rende facilmente osservabile dall'esterno il fatto che su questo
computer sta girando un nodo Freenet, facilitando attacchi di diversi tipi.
Avendone la possibilit?, l'opzione migiore ? quella di connettersi soltanto ad
utenti conosciuti ed addifabili (Darknet peer, vedi pagina Amici)
+Node.oneConnectionPerIPLong=Non permettere pi? di una connessione per
indirizzo? Ci? rende leggermente pi? difficile un attacco eseguito
connettendosi al nodo pi? volte con diverse identit? in modo da dominarne il
routing (instradamento) e rendere pi? facile raccogliere dati con lo
"harvesting" (lett: "il raccolto", in agricoltura). Questa opzione impedisce
che un peer sia connesso al nodo sia su darknet che su opennet.
+Node.opennetEnabled=Abilita Modalit? Insicura (connette automaticamente a nodi
gestiti da Sconosciuti)
+Node.opennetEnabledLong=Abilita Modalit? Insicura? (detta anche Opennet)
Abilitando questa opzione il nodo scambier? automaticamente referenze on altri
nodi. Ci? rende facilmente osservabile dall'esterno il fatto che su questo
computer sta girando un nodo Freenet, facilitando attacchi di diversi tipi.
Avendone la possibilit?, l'opzione migiore ? quella di connettersi soltanto ad
utenti conosciuti ed addifabili (Darknet peer, vedi pagina Amici)
Node.outBWLimit=Limite dell'ampiezza di banda in uscita (bytes per secondo)
Node.outBWLimitLong=Limite "duro" dell' ampiezza di banda in uscita
(bytes/sec); di solito il nodo non eccede questo limite
Node.passOpennetPeersThroughDarknet=Trasmetti referenze opennet attraverso
darknet peer
-Node.passOpennetPeersThroughDarknetLong=Se impostata su "vero" referenze
opennet verranno trasmesse attraverso peer darknet (ma MAI la referenza del
nodo locale). In questo modo un nodo (nodo locale, o i suoi peer) pu? ottenere
peer opennet dai suoi peer darknet. Questo ? utile perch? permette di
riconnettersi in caso di perdita dei peer, per esempio dopo una lunga
disconnessione, ma rende l'analisi del traffico leggermente pi? facile, quindi
chi ? paranoico dovrebbe disabilitare questa opzione.
+Node.passOpennetPeersThroughDarknetLong=Se impostata su "vero" referenze
opennet verranno trasmesse attraverso peer darknet (ma MAI la referenza del
nodo locale). In questo modo un nodo (nodo locale, o i suoi peer) pu? ottenere
peer opennet dai suoi peer darknet. Questo ? utile perch? permette di
riconnettersi in caso di perdita dei peer, per esempio dopo una lunga
disconnessione, ma rende l'analisi del traffico leggermente pi? facile, quindi
chi ? paranoico dovrebbe disabilitare questa opzione.
Node.port=Numero della porta FNP (UDP)
Node.portLong=Porta UDP per le comunicazioni da nodo a nodo (Freenet Node
Protocol)
+Node.publishOurPeersLocation=Trasmettere ai peer la locazione dei nostri peer?
+Node.publishOurPeersLocationLong=Trasmettere ai peer la locazione dei nostri
peer? Ci? facilita il routing ma fornisce informazioni ad un potenziale
avversario.
+Node.routeAccordingToOurPeersLocation=Tenere conto nel routing della locazione
dei peer dei nostri peer?
+Node.routeAccordingToOurPeersLocationLong=Usare per il routing la locazione
dei peer dei nostri peer? Ci? facilita il routing ma potrebbe essere utile ad
un potenziale avversario.
Node.storeDirectory=Directory magazzino dati (store)
Node.storeDirectoryLong=Directory contenente gli store file
-Node.storeMaxMemTooHigh=Impostare un valore superiore ad 80% della memoria RAM
da destinare a BDB ? generalmente una pessima idea.
+Node.storeMaxMemTooHigh=Impostare un valore superiore ad 80% della memoria RAM
da destinare a BDB ? generalmente una pessima idea.
Node.storeSize=Dimensioni in bytes del magazzino dati (store)
Node.storeSizeLong=Dimensioni del magazzino (store) in bytes
Node.storeType=Tipo di magazzino dati (store). NON TOCCARE!!
-Node.storeTypeLong=Tipo di datastore. Attualmente pu? essere un indice bdb
(usa un BerkeleyDBFreenetStore per l'indice, e mette i dati in dei file su
disco), o ram (indice e dati in RAM). L'uso di ram ? riservato a persone
competenti, e solo se c'e' memoria sufficiente a disposizione per tutti i dati
(NOTA: in questo caso i dati NON verranno salvati all'arresto del nodo)
+Node.storeTypeLong=Tipo di datastore. Attualmente pu? essere un indice bdb
(usa un BerkeleyDBFreenetStore per l'indice, e mette i dati in dei file su
disco), o ram (indice e dati in RAM). L'uso di ram ? riservato a persone
competenti, e solo se c'e' memoria sufficiente a disposizione per tutti i dati
(NOTA: in questo caso i dati NON verranno salvati all'arresto del nodo)
Node.swapRInterval=Intervallo tra le richieste di scambio (swap) in
millisecondi
Node.swapRIntervalLong=Intervallo tra richieste di scambio (swap) in
millisecondi. Non toccare!
Node.throttleLocalTraffic=Limitazione di banda su traffico locale
-Node.throttleLocalTrafficLong=Abilita limitazione di banda su traffico locale?
Abilitando questa opzione, la limitazione di banda avr? effetto anche sulla
rete locale (LAN) e su localhost.
+Node.throttleLocalTrafficLong=Abilita limitazione di banda su traffico locale?
Abilitando questa opzione, la limitazione di banda avr? effetto anche sulla
rete locale (LAN) e su localhost.
Node.tooSmallMTU=MTU insufficiente
-Node.tooSmallMTULong=L' MTU della connessione sembra essere ${mtu} bytes.
Freenet non pu? funzionare bene con un MTU minore di ${minMTU} bytes: le
connessioni saranno inaffidabili e forse rallentate. Se possibile, si dovrebbe
provvedere a risolvere il problema.
+Node.tooSmallMTULong=L' MTU della connessione sembra essere ${mtu} bytes.
Freenet non pu? funzionare bene con un MTU minore di ${minMTU} bytes: le
connessioni saranno inaffidabili e forse rallentate. Se possibile, si dovrebbe
provvedere a risolvere il problema.
Node.tooSmallMTUShort=Problema di connessione: MTU di connessione troppo basso
per consentire a Freenet di funzionare correttamente. Potranno verificarsi dei
problemi.
-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.
+Node.withAnnouncement=Permettere l'inserimento nella rete usando seednodes?
+Node.withAnnouncementLong=Permettere che il nodo si auto-inserisca nella rete
Freenet usando seednodes? Questa opzione ? abilitata di default per motivi
tecnici ma ? intrinsecamente insicura
+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.
NodeClientCore.downloadDir=Directory predefinita per i download
NodeClientCore.downloadDirLong=Directory predefinita dove salvare i file
scaricati
NodeClientCore.fileForClientStats=File contenente statistiche del client
NodeClientCore.fileForClientStatsLong=File dove conservare le statistiche
relative al client throttling (utilizzato per stabilire l'intervallo tra le
richieste)
-NodeClientCore.lazyResume=Caricare completamente le richieste persistenti dopo
aver completato l'avvio del nodo? (Fa maggiore uso di memoria ma avvia il nodo
pi? velocemente)
-NodeClientCore.lazyResumeLong=Le richieste persistenti possono essere caricate
durante l'avvio del nodo, oppure si possono scrivere i dati in memoria e
caricarli completamente solo dopo che il processo di avvio ? terminato. Ci?
riduce tempo di avviamento ma fa maggior uso di memoria.
+NodeClientCore.lazyResume=Caricare completamente le richieste persistenti dopo
aver completato l'avvio del nodo? (Fa maggiore uso di memoria ma avvia il nodo
pi? velocemente)
+NodeClientCore.lazyResumeLong=Le richieste persistenti possono essere caricate
durante l'avvio del nodo, oppure si possono scrivere i dati in memoria e
caricarli completamente solo dopo che il processo di avvio ? terminato. Ci?
riduce tempo di avviamento ma fa maggior uso di memoria.
NodeClientCore.maxUSKFetchers=Numero massimo di USK fetchers ammessi
NodeClientCore.maxUSKFetchersLong=Numero massimo di USK fetchers ammessi
NodeClientCore.maxUSKFetchersMustBeGreaterThanZero=Deve essere maggiore di zero
-NodeClientCore.movingTempDirOnTheFlyNotSupported=Non ? possible cambiare la
directory dei file temporanei mentre il nodo ? in funzione
+NodeClientCore.movingTempDirOnTheFlyNotSupported=Non ? possible cambiare la
directory dei file temporanei mentre il nodo ? in funzione
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=L'avviamento di Freenet ? ancora in corso:
alcune funzioni potrebbero non essere ancora disponibili e il nodo potrebbe
operare ad una velocit? inferiore al normale.
+NodeClientCore.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=L'avviamento di Freenet ? ancora in corso:
alcune funzioni potrebbero non essere ancora disponibili e il nodo potrebbe
operare ad una velocit? inferiore al normale.
NodeClientCore.startingUpTitle=Avviamento di Freenet in corso
NodeClientCore.tempDir=Directory file temporanei
NodeClientCore.tempDirLong=Nome della directory dei file temporanei
NodeClientCore.uploadAllowedDirs=Directory dalle quali l'upload e' consentito
-NodeClientCore.uploadAllowedDirsLong=Si pu? usare una lista di directory dove
l'upload e' consentito, separate da 'punto e virgola' (;). Vuoto (nessuna
directory specificata) significa che l'upload non e' permesso, "all" significa
upload permesso da tutte le directory AVVERTENZA; Se impostato su "all"
("tutte"), ogni utente potr? inserire qualunque file da qualsiasi directory.
-NodeIPDectector.inclLocalAddress=Noderef include indirizzi locali
-NodeIPDectector.inclLocalAddressLong=Specifica se includere l'indirizzo locale
(LAN e localhost) nella referenza del nodo. Ci? non ? necessario a meno che
entrambi i nodi che si vogliono collegare abbiano impostato
allowLocalAddresses=true per le rispettive referenze (per impostare questa
opzione, abilitare la modalit? avanzata e usare le opzioni disponibili alla
pagina Amici).
+NodeClientCore.uploadAllowedDirsLong=Si pu? usare una lista di directory dove
l'upload e' consentito, separate da 'punto e virgola' (;). Vuoto (nessuna
directory specificata) significa che l'upload non e' permesso, "all" significa
upload permesso da tutte le directory AVVERTENZA; Se impostato su "all"
("tutte"), ogni utente potr? inserire qualunque file da qualsiasi directory.
+NodeIPDectector.inclLocalAddress=Includi indirizzi locali nella referenza del
nodo
+NodeIPDectector.inclLocalAddressLong=Specifica se includere l'indirizzo locale
(LAN e localhost) nella referenza del nodo. Ci? non ? necessario a meno che
entrambi i nodi che si vogliono collegare abbiano impostato
allowLocalAddresses=true per le rispettive referenze (per impostare questa
opzione, abilitare la modalit? avanzata e usare le opzioni disponibili alla
pagina Amici).
NodeIPDectector.ipOverride=Impostazione manuale indirizzo IP
-NodeIPDectector.ipOverrideLong=Impostazione manuale dell'indirizzo IP (di
solito non ? necessario) - Utilizzare questa opzione se si ha un indirizzo IP
statico o un domain name (es. dyndns), e ci si trova dietro un firewall.
+NodeIPDectector.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 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.maybeSymmetric=Sembra che il nodo sia dietro una NAT
simmetrica. Potrebbe trattarsi di problemi di connessione: se ci si trova
dietro una NAT simmetrica ci si potr? probabilmente connettere soltanto con i
nodi che sono raggiungibili da interenet.
NodeIPDetector.maybeSymmetricShort=Problema di connessione: il nodo potrebbe
trovarsi dietro una NAT simmetrica.
NodeIPDetector.maybeSymmetricTitle=Problemi di connessione
NodeIPDetector.unknownHostErrorInIPOverride=Host sconosciuto: ${error}
@@ -773,8 +779,8 @@
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 la percentuale di di free heap (in rapporto a max heap bytes ammessi)
al di sopra della soglia
-NodeStat.ignoreLocalVsRemoteBandwidthLiability=Gestisi richieste locali allo
come quelle remote per limitazioni della disponibilit? di banda
-NodeStat.ignoreLocalVsRemoteBandwidthLiabilityLong=Abilitando questa opzione
si riduce notevolmente la banda utilizzata e si aumenta leggermente la
sicurezza nei confronti di attacchi di timing. Generalmente non c'? di che
preoccuparsi per questo tipo di attacchi in quanto gli attacchi di correlazione
sono pi? facili da eseguire.
+NodeStat.ignoreLocalVsRemoteBandwidthLiability=Gestisi richieste locali allo
come quelle remote per limitazioni della disponibilit? di banda
+NodeStat.ignoreLocalVsRemoteBandwidthLiabilityLong=Abilitando questa opzione
si riduce notevolmente la banda utilizzata e si aumenta leggermente la
sicurezza nei confronti di attacchi di timing. Generalmente non c'? di che
preoccuparsi per questo tipo di attacchi in quanto gli attacchi di correlazione
sono pi? facili da eseguire.
NodeStat.memCheck=Abilita Verifica di Memoria
NodeStat.memCheckLong=Abilita verifica della memoria (scrive un messaggio nel
log file. La verifica della memoria deve essere abilitata perche'
aggressiveGCModificator abbia effetto)
NodeStat.statsPersister=File contenente le statistiche del nodo
@@ -782,8 +788,8 @@
NodeStat.threadLimit=Limite thread
NodeStat.threadLimitLong=Il nodo respinge richieste per limitare l'uso di
thread al valore specificato.
NodeStats.mustBePercentValueNotFull=Questo valore deve essere espresso in
precentuale, compresa tra 0 e 99.
-NodeStats.valueTooLow=Valore troppo basso per questa impostazione: ?
necessario aumentarlo.
-NodeUpdateManager.enabled=Verifica disponibilit? e scarica nuove versioni
+NodeStats.valueTooLow=Valore troppo basso per questa impostazione: ?
necessario aumentarlo.
+NodeUpdateManager.enabled=Verifica disponibilit? e scarica nuove versioni
NodeUpdateManager.enabledLong=Verifica e scarica automaticamente nuove
versioni di Freenet. Se impostatos su 'vero', le nuove versioni verranno
scaricate ma non necessariamente installate. L'impostazione torna sempre su
'falso' se il nodo non gira all'interno del wrapper.
NodeUpdateManager.extURI=Dove cercare versioni aggiornate di freenet-ext.jar?
NodeUpdateManager.extURILong=Dove cercare aggiornamenti per freenet-ext.jar?
@@ -792,7 +798,7 @@
NodeUpdateManager.invalidExtURI=Ext URI non valida: ${error}
NodeUpdateManager.invalidRevocationURI=URI di revoca non valida: ${error}
NodeUpdateManager.invalidUpdateURI=URI di aggiornamento non valida: ${error}
-NodeUpdateManager.noUpdateWithoutWrapper=Non ? stato possibile completare
l'aggiornamento perch? il nodo non sta girando nel wrapper
+NodeUpdateManager.noUpdateWithoutWrapper=Non ? stato possibile completare
l'aggiornamento perch? il nodo non sta girando nel wrapper
NodeUpdateManager.revocationURI=Dove cercare la chiave di revoca?
NodeUpdateManager.revocationURILong=URI per la chiave di revoca. Se viene
trovata il nodo ne mostra il contenuto e disabilita l'aggiornamento automatico.
NodeUpdateManager.updateCatastropheTitle=Fallimento Catastrofico dell'
Aggiornamento!
@@ -801,32 +807,32 @@
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 Nice level alto. In mancanza di un numero sufficiente di livelli di nice, il
nodo non potr? operare a pieno regime. Si prega di ridurre il livello di nice.
(cercare PRIORITY nel file run.sh e ridurne il valore). Attualmente il nodo ha
${available} livelli a disposizione mentre avrebbe bisogno di ${required}
livelli.
+NotEnoughNiceLevelsUserAlert.content=Il nodo ha rilevato di stare operando ad
un Nice level alto. In mancanza di un numero sufficiente di livelli di nice, il
nodo non potr? operare a pieno regime. Si prega di ridurre il livello di nice.
(cercare PRIORITY nel file run.sh e ridurne il valore). Attualmente il nodo ha
${available} livelli a disposizione mentre avrebbe bisogno di ${required}
livelli.
NotEnoughNiceLevelsUserAlert.short=Non ci sono abbastanza Nice level
disponibili. si prega di assegnare a Freenet un Nice level inferiore.
NotEnoughNiceLevelsUserAlert.title=Numero di Nice level insufficiente!
-OpennetConnectionsToadlet.fullTitle=${counts} Sconosciuti (Peer non fid?ti)
del nodo: ${name}
-OpennetConnectionsToadlet.peersListTitle=Peer Opennet (peer non fid?ti
aggiunti automaticamente dal nodo)
-OpennetConnectionsToadlet.successTime=L'ultima volta che si ? riusciti a
richiamare una CHK dal nodo.
+OpennetConnectionsToadlet.fullTitle=${counts} Sconosciuti (Peer non fid?ti)
del nodo: ${name}
+OpennetConnectionsToadlet.peersListTitle=Peer Opennet (peer non fid?ti
aggiunti automaticamente dal nodo)
+OpennetConnectionsToadlet.successTime=L'ultima volta che si ? riusciti a
richiamare una CHK dal nodo.
OpennetConnectionsToadlet.successTimeTitle=Ultimo successo
-OpennetUserAlert.warning=Il nodo sta funzionando in Modalit? Insicura. Ci?
significa che il nodo si connetter? con nodi operati da sconosiuti, e quindi
chiunque potr? facilmente determinare che l'utente Tal dei Tali sta usando
Freenet. Molti attacchi vengono facilitati da questa modalit?, bloccare il nodo
(per esempio con un firewall nazionale) diventa molto pi? facile, ed intoltre
l'utente non ha controllo su chi si connette al suo nodo. Si raccomanda
vivamente di procurarsi qualche connessione ad Amici (nodi operati da persone
conosciute); il modo promiscuo va considerato una misura temporanea da
utilizzarsi temporaneamente, in attesa di connessioni ad amici. Connettendosi
esclusivamente a nodi gestiti da persone conosciute, pur non essendo impossibli
degli attacchi da parte loro, risulter? comunque meno probabile l'esposizione
ad agenzie governative (tipo servizi segreti o che so io) o altri "cattivi".
Nota che aggiungere un peer alla sezione Amici non cambia molto la situazione,
a meno che tale nodo non sia gestito da qualcuno di consciuto e di cui ci si
fida (per ragioni sia di routing [instradamento] che di sicurezza)!
-OpennetUserAlert.warningShort=Modalit? insicura abilitata.
-OpennetUserAlert.warningTitle=Avvertenza: Modalit? Insicura Abilitata: Il nodo
si connetter? a degli sconosciuti
-PNGFilter.invalidHeader=Il file che si sta cercando di richiamare non e' un
PNG: esso non include un header PNG valido. Potrebbe trattarsi di un file in
altro formato e il browser potrebbe fare qualcosa di pericoloso a causa della
confusione creata dalla mancata corrispondenza; il file ? stato pertanto
bloccato.
+OpennetUserAlert.warning=Il nodo sta funzionando in modo "promiscuo". Ci?
significa che il nodo si connetter? con nodi operati da sconosiuti, e quindi
chiunque potr? facilmente determinare che l'utente Tal dei Tali sta usando
Freenet. Molti attacchi vengono facilitati da questa modalit?, bloccare il nodo
(per esempio con un firewall nazionale) diventa molto pi? facile, ed intoltre
l'utente non ha controllo su chi si connette al suo nodo. Si raccomanda
vivamente di procurarsi qualche connessione ad Amici (nodi operati da persone
conosciute); il modo promiscuo va considerato una misura temporanea da
utilizzarsi temporaneamente, in attesa di connessioni ad amici. Connettendosi
esclusivamente a nodi gestiti da persone conosciute, pur non essendo impossibli
degli attacchi da parte loro, risulter? comunque meno probabile l'esposizione
ad agenzie governative (tipo servizi segreti o che so io) o altri "cattivi".
Nota che aggiungere un peer alla sezione Amici non cambia molto la situazione,
a meno che tale nodo non sia gestito da qualcuno di consciuto e di cui ci si
fida (per ragioni sia di routing [instradamento] che di sicurezza)!
+OpennetUserAlert.warningShort=Modalit? insicura abilitata.
+OpennetUserAlert.warningTitle=Avvertenza: Modo Promiscuo Attivato: Il nodo si
connetter? a degli sconosciuti
+PNGFilter.invalidHeader=Il file che si sta cercando di richiamare non e' un
PNG: esso non include un header PNG valido. Potrebbe trattarsi di un file in
altro formato e il browser potrebbe fare qualcosa di pericoloso a causa della
confusione creata dalla mancata corrispondenza; il file ? stato pertanto
bloccato.
PNGFilter.invalidHeaderTitle=Header PNG non valido
PageMaker.modeAdvanced=Interfaccia avanzata
-PageMaker.modeAdvancedTooltip=Interfaccia pi? complessa, utile soltanto ad
utenti esperti
+PageMaker.modeAdvancedTooltip=Un'interfaccia pi? complessa, utile soltanto
agli utenti esperti
PageMaker.modeSimple=Interfaccia semplice
-PageMaker.modeSimpleTooltip=Interfaccia semplice utilizzabile da ogni utente
-PeerManagerUserAlert.clockProblem=${count} peer non riescono a connettersi
perch? il loro orologio di sistema differisce di oltre 24 ore da quello locale.
Si prega di verificare che l'orologio di sistema del computer sia regolato
sull'ora esatta. Regolazioni inaccurate dell'orologio causano molti problemi
nel funzionamento dei meccanismi tra nodo e client.
+PageMaker.modeSimpleTooltip=Un'interfaccia semplice che pu? essere usata da
ogni utente
+PeerManagerUserAlert.clockProblem=${count} peer non riescono a connettersi
perch? il loro orologio di sistema differisce di oltre 24 ore da quello locale.
Si prega di verificare che l'orologio di sistema del computer sia regolato
sull'ora esatta. Regolazioni inaccurate dell'orologio causano molti problemi
nel funzionamento dei meccanismi tra nodo e client.
PeerManagerUserAlert.clockProblemTitle=Problema di sincronizzazione.
PeerManagerUserAlert.connError=${count} peer non riescono a connettersi per
motivi sconosciuti, forse per causa di 'bug' nel nodo o di una referenza di un
nodo che e' corrotta.
PeerManagerUserAlert.connErrorTitle=Alcuni peer non riescono a connettersi
-PeerManagerUserAlert.noConns=Non ? stato finora possibile connettersi ad alcun
nodo. Forse qualcuno dei peer si connettera entro breve. in caso contrario sar?
necessario aggiungere altri peer; c'e' bisogno di almeno tre peer connessi in
ogni momento, meglio 5-10.
+PeerManagerUserAlert.noConns=Non ? stato finora possibile connettersi ad alcun
nodo. Forse qualcuno dei peer si connettera entro breve. in caso contrario sar?
necessario aggiungere altri peer; c'e' bisogno di almeno tre peer connessi in
ogni momento, meglio 5-10.
PeerManagerUserAlert.noConnsTitle=Nessuna connessione aperta
-PeerManagerUserAlert.noPeersDarknet=Questo nodo non ha peers ai quale
connettersi e non pu? quindi funzionare normalmente. In teoria ci si dovrebbe
connettere esclusivamente a persone che si conosce (per i paranoici: persone di
cui ci si fida, per i non paranoici: persone con le quali si ha parlato). Per
un corretto funzionamento c'e' bisogno di almeno tre peer connessi in ogni
momento, idealmente 5-10. Ci si pu? connettere a irc.freenode.net canale
#freenet-refs e chiedere chi vuole connettersi, ma ? bene tenere presente che
si ? vulnerabili ad attacchi da parte dei peer (Speciamente in queste prime
versioni alfa di Freenet 0.7...) VERIFICARE CHE L'ATRA PARTE AGGIUNGA LA
REFERENZA ALLA SUA LISTA: LE CONNESSIONI "A SENSO UNICO" NON FUNZIONANO!
-PeerManagerUserAlert.noPeersTestnet=Questo nodo non ha peer ai quale
connettersi e non pu? quindi funzionare normalmente. In teoria ci si dovrebbe
connettere esclusivamente a persone che si conosce (per i paranoici: persone di
cui ci si fida, per i non paranoici: persone con le quali si ha parlato). Per
un corretto funzionamento c'e' bisogno di almeno tre peer connessi in ogni
momento, idealmente 5-10. Trattandosi di un nodo testnet, ci si pu? connettere
a irc.freenode.net canale #freenet-refs e chiedere chi vuole connettersi.
+PeerManagerUserAlert.noPeersDarknet=Questo nodo non ha peers ai quale
connettersi e non pu? quindi funzionare normalmente. In teoria ci si dovrebbe
connettere esclusivamente a persone che si conosce (per i paranoici: persone di
cui ci si fida, per i non paranoici: persone con le quali si ha parlato). Per
un corretto funzionamento c'e' bisogno di almeno tre peer connessi in ogni
momento, idealmente 5-10. Ci si pu? connettere a irc.freenode.net canale
#freenet-refs e chiedere chi vuole connettersi, ma ? bene tenere presente che
si ? vulnerabili ad attacchi da parte dei peer (Speciamente in queste prime
versioni alfa di Freenet 0.7...) VERIFICARE CHE L'ATRA PARTE AGGIUNGA LA
REFERENZA ALLA SUA LISTA: LE CONNESSIONI "A SENSO UNICO" NON FUNZIONANO!
+PeerManagerUserAlert.noPeersTestnet=Questo nodo non ha peer ai quale
connettersi e non pu? quindi funzionare normalmente. In teoria ci si dovrebbe
connettere esclusivamente a persone che si conosce (per i paranoici: persone di
cui ci si fida, per i non paranoici: persone con le quali si ha parlato). Per
un corretto funzionamento c'e' bisogno di almeno tre peer connessi in ogni
momento, idealmente 5-10. Trattandosi di un nodo testnet, ci si pu? connettere
a irc.freenode.net canale #freenet-refs e chiedere chi vuole connettersi.
PeerManagerUserAlert.noPeersTitle=Nessun peer trovato
-PeerManagerUserAlert.oneConn=Questo nodo ha una sola connessione. Il
rendimento ne risentir? in modo notevole, e l'utente non disporr? di anonimato
e "negabilit? plausibile" se quell' unico nodo al quale si ? conessi dovesse
essere operato da un avversario. Il nodo risulter? attaccato al network come
una "foglia all' albero" e non contribuir? alla salute generale del network
stesso. Per un corretto funzionamento del nodo ? necessario che almeno tre peer
e (idealmente 5-10) siano connessi in qualsiasi momento.
+PeerManagerUserAlert.oneConn=Questo nodo ha una sola connessione. Il
rendimento ne risentir? in modo notevole, e l'utente non disporr? di anonimato
e "negabilit? plausibile" se quell' unico nodo al quale si ? conessi dovesse
essere operato da un avversario. Il nodo risulter? attaccato al network come
una "foglia all' albero" e non contribuir? alla salute generale del network
stesso. Per un corretto funzionamento del nodo ? necessario che almeno tre peer
e (idealmente 5-10) siano connessi in qualsiasi momento.
PeerManagerUserAlert.onlyFewConnsTitle=Soltanto ${count} connessione/i aperta/e
PeerManagerUserAlert.tooHighBwlimitDelayTime=Questo nodo deve aspettare troppo
a lungo la banda disponibile (${delay}ms > ${max}ms). Aumentare l'ampiezza di
banda in uscita e/o rimuovere alcuni peer migliorerebbe la situazione.
PeerManagerUserAlert.tooHighBwlimitDelayTimeTitle=bwlimitDelayTime troppo alto
@@ -834,47 +840,51 @@
PeerManagerUserAlert.tooHighPingTimeTitle=nodeAveragePingTime troppo alto
PeerManagerUserAlert.tooManyConns=Questo nodo ha troppe connessioni (${count}
> ${max}). Aggiungere troppi peer non produce un topologia mondo-piccolo,
danneggia l'instradamento, e rischia di produrre punti di fallimento singoli.
PeerManagerUserAlert.tooManyConnsTitle=Troppe connessioni aperte
-PeerManagerUserAlert.tooManyDisconnected=Questo nodo ha troppi peer
disconnessi (${count} > ${max}). Questo pu? avere un leggero impatto sul
rendimento perch? anche i peer disconnessi usano una piccola quantit? di banda
e CPU. Potrebbe essere necessario "ripulire" la lista dei peer. Nota che almeno
in teoria, bisognerebbe connettersi esclusivamente ad utenti che si conosce.
Anche in caso contrario, aggiungere troppi nodi automaticamente produce un
risultato negativo in quanto la topologia risultante non ? ottimale.
+PeerManagerUserAlert.tooManyDisconnected=Questo nodo ha troppi peer
disconnessi (${count} > ${max}). Questo pu? avere un leggero impatto sul
rendimento perch? anche i peer disconnessi usano una piccola quantit? di banda
e CPU. Potrebbe essere necessario "ripulire" la lista dei peer. Nota che almeno
in teoria, bisognerebbe connettersi esclusivamente ad utenti che si conosce.
Anche in caso contrario, aggiungere troppi nodi automaticamente produce un
risultato negativo in quanto la topologia risultante non ? ottimale.
PeerManagerUserAlert.tooManyDisconnectedTitle=Troppi peer disconnessi
-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.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 perch? anche i peer disconnessi usano un po' di banda e di CPU.
Potrebbe essere necessario "ripulire" la lista dei peer.
+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 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.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
-PeerManagerUserAlert.twoConns=Il nodo ha solo due connessioni. Rendimento e
sicurezza risulteranno di qualit? inferiore, e non sara possibile provvedere
instradamento (routing) per altri nodi. Il nodo ? collegato al network come un
"anello di catena" e non contribuisce (molto) alla salute generale del network
stesso. Per un corretto funzionamento del nodo, ? necessario che almeno tre
peers (e idealmente 5-10) siano connessi in ogni momento.
+PeerManagerUserAlert.twoConns=Il nodo ha solo due connessioni. Rendimento e
sicurezza risulteranno di qualit? inferiore, e non sara possibile provvedere
instradamento (routing) per altri nodi. Il nodo ? collegato al network come un
"anello di catena" e non contribuisce (molto) alla salute generale del network
stesso. Per un corretto funzionamento del nodo, ? necessario che almeno tre
peers (e idealmente 5-10) siano connessi in ogni momento.
PeersSayKeyBlownAlert.connectedSayBlownLabel=I seguenti nodi hanno rilevato un
problema con la chiave (si cerca attualmente di ottenere il certificato di
revoca da loro):
-PeersSayKeyBlownAlert.disconnectedSayBlownLabel=I seguenti nodi si sono
disconnessi dopo aver comunicato che la chiave ? saltata, quindi non ? stato
possibile richiamare il certificato di revoca:
-PeersSayKeyBlownAlert.failedFetch=Non ? stato possibile scaricare il
certificato di revoca. Le possibili cause di tale evento includono la
possibilit? di un attacco sul nodo locale volto a fargli scaricare ed
installare un aggiornamento nonostante la chiave sia saltata, o la possibilit?
che dei nodi stiano "mentendo" circa la chiave di revoca. Si prega di
contattare gli sviluppatori di Freenet per cercare di mettere ordine in questo
casino.
-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 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
+PeersSayKeyBlownAlert.disconnectedSayBlownLabel=I seguenti nodi si sono
disconnessi dopo aver comunicato che la chiave ? saltata, quindi non ? stato
possibile richiamare il certificato di revoca:
+PeersSayKeyBlownAlert.failedFetch=Non ? stato possibile scaricare il
certificato di revoca. Le possibili cause di tale evento includono la
possibilit? di un attacco sul nodo locale volto a fargli scaricare ed
installare un aggiornamento nonostante la chiave sia saltata, o la possibilit?
che dei nodi stiano "mentendo" circa la chiave di revoca. Si prega di
contattare gli sviluppatori di Freenet per cercare di mettere ordine in questo
casino.
+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 peer avvertono che la chiave di auto
aggiornamento ? saltata!
+PeersSayKeyBlownAlert.titleWithCount=La chiave di Auto-aggiornamento ?
saltata! L' evento ? stato confermato da ${count} peer!
+PluginConfig.configFile=File di configurazione dei plugin
+PluginConfig.configFileLong=Percorso/Nome del file che contiene la
configurazione del plugin
+PluginConfig.installDir=Directory di installazione dei plugin
+PluginConfig.installDirLong=Directory dove installare i plugin
+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
PluginManager.loadedPlugins=Plugin da caricare all'avvio
PluginManager.loadedPluginsLong=Lista dei plugin da caricare all'avvio del nodo
-PluginManager.pluginLoadingFailed=Non ? stato possibile caricare il plugin
specificato ${name}.
+PluginManager.pluginLoadingFailed=Non ? stato possibile caricare il plugin
specificato ${name}.
PluginManager.pluginLoadingFailedShort=Impossibile caricare il plugin ${name}!
-PluginManager.pluginLoadingFailedTitle=Non ? stato possibile caricare il
plugin!
-PluginManager.pluginLoadingFailedWithMessage=Non ? stato possibile caricare il
plugin specificato ${name}: ${message}
-PluginManager.pluginReqNewerJVM=Per usare il plugin ${name} ? necessario
installare una JVM pi? recente di quella attualmente in uso. Installare Sun
Java 1.5 o superiore, o rimuovere il plugin.
-PluginManager.pluginReqNewerJVMTitle=Il plugin ${name} richiede l'uso di una
JVM pi? aggiornata
+PluginManager.pluginLoadingFailedTitle=Non ? stato possibile caricare il plugin
+PluginManager.pluginLoadingFailedWithMessage=Non ? stato possibile caricare il
plugin specificato ${name}: ${message}
+PluginManager.pluginReqNewerJVM=Per usare il plugin ${name} ? necessario
installare una JVM pi? recente di quella attualmente in uso. Installare Sun
Java 1.5 o superiore, o rimuovere il plugin.
+PluginManager.pluginReqNewerJVMTitle=Il plugin ${name} richiede l'uso di una
JVM pi? aggiornata
PluginToadlet.addPluginTitle=Aggiungi plugin
PluginToadlet.failedToLoadPlugin=Caricamento plugin fallito.
-PluginToadlet.failedToLoadPluginCheckClass=Non ? stato possibile caricare il
plugin richiesto. Verificare il nome del plugin, class, e URL se se ne ? usata
una.
+PluginToadlet.failedToLoadPluginCheckClass=Non ? stato possibile caricare il
plugin richiesto. Verificare il nome del plugin, class, e URL se se ne ? usata
una.
PluginToadlet.failedToLoadPluginTitle=Caricamento plugin fallito
PluginToadlet.internalNameTitle=Nome Interno
PluginToadlet.loadPluginCommand=Carica Plugin
-PluginToadlet.noWebInterface=Questo plugin non ha interfaccia web e pertanto
non c'? nulla da mostrare
+PluginToadlet.noWebInterface=Questo plugin non ha interfaccia web e pertanto
non c'? nulla da mostrare
PluginToadlet.noWebInterfaceTitle=Plugin non provvisto di interfaccia web
PluginToadlet.pluginList=Lista plugin
PluginToadlet.pluginListTitle=Lista Plugin
PluginToadlet.pluginNameTitle=Nome Plugin
-PluginToadlet.pluginNotFound=Non ? stato possibile trovare il plugin richiesto
+PluginToadlet.pluginNotFound=Non ? stato possibile trovare il plugin richiesto
PluginToadlet.pluginNotFoundTitle=Plugin non trovato
PluginToadlet.returnToPluginsWithLinks=${link}return${/link} alla lista di
plugins.
PluginToadlet.unsupportedMethod=Metodo non supportato
@@ -885,33 +895,37 @@
PproxyToadlet.cancel=Cancella
PproxyToadlet.changeReloadOnStartup=Cambia
PproxyToadlet.classNameTitle=Class Name
-PproxyToadlet.downloadNotAllowedFromRemoteServer=Donload dei plugins ? ammesso
solo dal server di Freenet.
+PproxyToadlet.downloadNotAllowedFromRemoteServer=Donload dei plugins ? ammesso
solo dal server di Freenet.
+PproxyToadlet.fileonly=accetta solo file locali
PproxyToadlet.internalIDTitle=ID interna
+PproxyToadlet.loadFreenetPlugin=Carica un Plugin non ufficiale da freenet
+PproxyToadlet.loadFreenetPluginText=Inserire la URI del plugin che si vuole
caricare. I plugin disponibili si Freenet non godono di alcun supporto
ufficiale e non vengono controllati dagli sviluppatori di Freenet. Non ? quindi
possibile quindi garantire la privacy e la sicurezza di chi decidesse di
utilizzarli.
+PproxyToadlet.loadFreenetURLLabel=Chiave del plugin
PproxyToadlet.loadOfficialPlugin=Aggiungi un Plugin Ufficiale
PproxyToadlet.loadOfficialPluginLabel=Carica Plugin Ufficiale
-PproxyToadlet.loadOfficialPluginText=Questi plugin sono immagazinati nei
server del Progetto Freenet. L'opinione degli sviluppatori ? che i plugins
ufficiali siano esenti da difetti che possano compromettere la privacy ma non ?
possibile garantire al 100% che ci? corrisponda a realt?.
-PproxyToadlet.loadOfficialPluginWarning=AVVERTENZA: Caricando un plugin
ufficiale lo si scarica da internet (non da Freenet). Un avversario potrebbe
vedere il download e forse interferire con esso. Se ci? pu? effettivamente
rappresentare un un problema, si consiglia di non caricare plugins.
+PproxyToadlet.loadOfficialPluginText=Plugin ufficialy disponibili per download
dai server del Progetto Freenet. I programmatori di Freenet hanno esaminato i
plugin ufficiali e trovato che essi appaiono esenti da difetti che possano
compromettere la privacy; non ? tuttavia possibile garantire con il 100% di
sicurezza che ci? corrisponda a realt?.
+PproxyToadlet.loadOfficialPluginWarning=AVVERTENZA: Caricando un plugin
ufficiale lo si scarica da internet (non da Freenet). Se ci? pu? effettivamente
rappresentare un un problema, si consiglia di non caricare plugins.
PproxyToadlet.loadOtherPlugin=Aggiungi Plugin Non Ufficiale
-PproxyToadlet.loadOtherPluginText=Inserire qui la URL del plugin che si vuole
caricare. Plugin diversi da quelli ufficiali di Freenet NON RICEVONO ALCUNA
ASSISTENZA O VERIFICA per difetti di privacy da parte sviluppatori di Freenet!
+PproxyToadlet.loadOtherPluginText=Inserire qui la URL del plugin che si vuole
caricare. ATTENZIONE! I Plugin non ufficiali non ricevono alcuna assistenza e
non vengono controllati dai programmatory di Freenet, pertanto chi volesse
utilizzarli lo far? A PROPRIO RISCHIO.
PproxyToadlet.loadOtherURLLabel=URL del plugin
PproxyToadlet.loadPluginLabel=Carica Plugin:
PproxyToadlet.noPlugins=Nessun plugin caricato
PproxyToadlet.noVersion=N/A
-PproxyToadlet.pluginDirectoryNotCreated=Non ? stato possibile creare una
directory per i plugin.
-PproxyToadlet.pluginNotDownloaded=Non ? stato possibile scaricare il plugin
-PproxyToadlet.pluginNotFoundReload=Non ? stato possibile localizzare il plugin
specificato per poterlo ricaricare.
+PproxyToadlet.pluginDirectoryNotCreated=Non ? stato possibile creare una
directory per i plugin.
+PproxyToadlet.pluginNotDownloaded=Non ? stato possibile scaricare il plugin
+PproxyToadlet.pluginNotFoundReload=Non ? stato possibile localizzare il plugin
specificato per poterlo ricaricare.
PproxyToadlet.pluginNotFoundReloadTitle=Plugin non trovato (ricaricamento in
corso)
PproxyToadlet.pluginStopping=Disconnessione plugin in corso
PproxyToadlet.pluginUnloaded=Plugin terminato
-PproxyToadlet.pluginUnloadedWithName=Il plugin ${name} ? stato terminato.
+PproxyToadlet.pluginUnloadedWithName=Il plugin ${name} ? stato terminato.
PproxyToadlet.plugins=Plugin
PproxyToadlet.pluginsWithNodeName=Plugin di ${name}
PproxyToadlet.refreshOnStartup=Ricarica da server all'avvio
PproxyToadlet.reload=Ricarica
-PproxyToadlet.reloadExplanation=Ricaricare un plugin ? come scaricarlo e
ricaricarlo.
+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 di
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:
@@ -919,7 +933,7 @@
PproxyToadlet.startingPluginStatus=Stato attuale
PproxyToadlet.startingPluginTime=tempo trascorso
PproxyToadlet.startingPluginsTitle=Avvio plugins in corso
-PproxyToadlet.unauthorized=L'accesso a questa pagina non ? autorizzato.
+PproxyToadlet.unauthorized=L'accesso a questa pagina non ? autorizzato.
PproxyToadlet.unauthorizedTitle=Accesso Non Autorizzato
PproxyToadlet.unload=Termina
PproxyToadlet.unloadPluginTitle=Termina plugin?
@@ -942,40 +956,40 @@
QueueToadlet.delete=Elimina
QueueToadlet.download=Scarica
QueueToadlet.downloadFiles=Download multipli
-QueueToadlet.downloadFilesInstructions=Incollare una lista di chiavi da
scaricare (una per rigo)
-QueueToadlet.downloadSucceeded=Il file ${origlink}${filename}${/origlink} ?
stato scaricato. ${link}Click qui${/link} per aprile il file (${size}).
-QueueToadlet.downloadSucceededTitle=Download effettuato: ${filename}
+QueueToadlet.downloadFilesInstructions=E' possibile incollare una serie di
chiavi da scaricare nello spazio sottostante (una per rigo)
+QueueToadlet.downloadSucceeded=Il file ${origlink}${filename}${/origlink} ?
stato scaricato. ${link}Click qui${/link} per aprile il file (${size}).
+QueueToadlet.downloadSucceededTitle=Download completato: ${filename}
QueueToadlet.emergency=urgenza estrema
-QueueToadlet.enqueuedFailure=Non ? stato possibile aggiungere alla coda le
seguenti ${number} chiavi:
-QueueToadlet.enqueuedSuccessfully=Le ${number} chiavi riportate di seguito
sono state aggiunte alla coda:
+QueueToadlet.enqueuedFailure=Non ? stato possibile agguingere alla coda le
${number} chiavi qui elencate:
+QueueToadlet.enqueuedSuccessfully=Le ${number} chiavi elencate di seguito sono
state aggiunte alla coda con successo:
QueueToadlet.errorAccessDenied=Errore: Accesso Negato
QueueToadlet.errorAccessDeniedFile=L'attuale configurazione del nodo non
consente l'upload del file "${file}".
-QueueToadlet.errorDToDisk=Non ? stato possibile scaricare su disco
+QueueToadlet.errorDToDisk=Non ? stato possibile scaricare su disco
QueueToadlet.errorDToDiskConfig=L'attuale configurazione del nodo non consente
di scaricare file nella directory dei download
QueueToadlet.errorDownloadNotCompleted=Download Non Completato
-QueueToadlet.errorDownloadNotFound=Non ? stato possibile localizzare il
download richiesto
-QueueToadlet.errorDownloadNotFoundExplanation=Non ? stato possibile trovare il
download specificato. Potrebbe essere stato eliminato in precedenza.
+QueueToadlet.errorDownloadNotFound=Non ? stato possibile localizzare il
download richiesto
+QueueToadlet.errorDownloadNotFoundExplanation=Non ? stato possibile trovare il
download specificato. Potrebbe essere stato eliminato in precedenza.
QueueToadlet.errorInvalidURI=URI non valida
-QueueToadlet.errorInvalidURIToD=La URI non ? valida e pertanto non pu? essere
scaricata.
-QueueToadlet.errorInvalidURIToU=Non ? stata specificata alcuna URI valida dove
inserire il file
+QueueToadlet.errorInvalidURIToD=La URI non ? valida e pertanto non pu? essere
scaricata.
+QueueToadlet.errorInvalidURIToU=Non ? stata specificata alcuna URI valida dove
inserire il file
QueueToadlet.errorNoFileOrCannotRead=File inesistente o illegibile
QueueToadlet.errorNoFileSelected=Nessun file selezionato
QueueToadlet.errorNoFileSelectedU=Non e' stato selezionato alcun file per
l'upload
-QueueToadlet.errorNoKey=Non ? stata specificata alcuna chiave per il download
-QueueToadlet.errorNoKeyToD=Non ? stata specificata una chiave per il download
+QueueToadlet.errorNoKey=Non ? stata specificata alcuna chiave per il download
+QueueToadlet.errorNoKeyToD=Non ? stata specificata una chiave per il download
QueueToadlet.failedD=Download falliti
QueueToadlet.failedDU=Upload di directory falliti
-QueueToadlet.failedToRemove=Non ? stato possibile rimuovere ${id}: ${message}
-QueueToadlet.failedToRemoveId=Non ? stato possibile eliminare: ${id}
-QueueToadlet.failedToRemoveRequest=Non ? stato possibile eliminare la richiesta
-QueueToadlet.failedToRestart=Non ? stato possibile riavviare: ${id}
+QueueToadlet.failedToRemove=Non ? stato possibile rimuovere ${id}: ${message}
+QueueToadlet.failedToRemoveId=Non ? stato possibile eliminare: ${id}
+QueueToadlet.failedToRemoveRequest=Non ? stato possibile eliminare la richiesta
+QueueToadlet.failedToRestart=Non ? stato possibile riavviare: ${id}
QueueToadlet.failedToRestartRequest=Non e' stato possibile riavviare la
richiesta
QueueToadlet.failedU=Upload falliti
QueueToadlet.fcpIsMissing=Server FCP non trovato
QueueToadlet.fileName=File
QueueToadlet.files=File
QueueToadlet.follow=Segui Redirect
-QueueToadlet.globalQueueIsEmpty=La coda globale ? vuota
+QueueToadlet.globalQueueIsEmpty=La coda globale ? vuota
QueueToadlet.high=alta
QueueToadlet.identifier=Identificazione
QueueToadlet.insertAs=Inserisci come:
@@ -986,22 +1000,22 @@
QueueToadlet.insertFileLabel=File
QueueToadlet.insertFileResetForm=Annulla
QueueToadlet.key=Chiave
-QueueToadlet.legend=Legenda
+QueueToadlet.legend=Significato dei colori: Priorit?...
QueueToadlet.low=bassa
QueueToadlet.medium=media
QueueToadlet.mimeType=MIME type
QueueToadlet.noTaskOnGlobalQueue=Nessuna operazione in attesa nella coda
globale in questo momento.
QueueToadlet.none=nessuna
QueueToadlet.notLoadedYet=Il nodo sta ancora caricando la lista delle
richieste persistenti. Si prega di pazientare.
-QueueToadlet.notLoadedYetTitle=La Coda non ? stata ancora caricata.
+QueueToadlet.notLoadedYetTitle=La Coda non ? stata ancora caricata.
QueueToadlet.panicButton=Bottone Emergenza
QueueToadlet.panicButtonConfirmation=Elimina tutte le richieste senza chiedere
conferma
QueueToadlet.persistence=Persistenza
QueueToadlet.persistenceForever=illimitata
QueueToadlet.persistenceNone=nessuna
QueueToadlet.persistenceReboot=reboot
-QueueToadlet.pleaseEnableFCP=Per accedere a questa pagina ? necessario
abilitare il server FCP
-QueueToadlet.priority=Priorit?
+QueueToadlet.pleaseEnableFCP=Per accedere a questa pagina ? necessario
abilitare il server FCP
+QueueToadlet.priority=Priorit?
QueueToadlet.priority0=emergenza
QueueToadlet.priority1=molto alta
QueueToadlet.priority2=alta
@@ -1011,7 +1025,7 @@
QueueToadlet.priority6=campa cavallo
QueueToadlet.progress=Completato
QueueToadlet.progressbarAccurate=Questo valore e' accurato
-QueueToadlet.progressbarNotAccurate=I valori possono essere imprecisi perch?
il processo di download del file non e' stato finalizzato
+QueueToadlet.progressbarNotAccurate=I valori possono essere imprecisi perch?
il processo di download del file non e' stato finalizzato
QueueToadlet.reason=Motivo
QueueToadlet.remove=Elimina
QueueToadlet.requestNavigation=Esplora Richieste
@@ -1023,25 +1037,25 @@
QueueToadlet.title=Coda globale del nodo: ${nodeName}
QueueToadlet.totalSize=Dimensioni Totali
QueueToadlet.unknown=Non Disp.
-QueueToadlet.uploadProgressbarNotAccurate=Il valore di questo indicatore di
progresso pu? essere falsato quando l'upload codifica ulteriori blocchi.
-QueueToadlet.uploadSucceeded=Il file ${filename} (size ${size}) ? stato
correttamente caricato su Freenet. ${link}Click qui${/link} per aprire il file.
+QueueToadlet.uploadProgressbarNotAccurate=Il valore di questo indicatore di
progresso pu? essere falsato quando l'upload codifica ulteriori blocchi.
+QueueToadlet.uploadSucceeded=Il file ${filename} (size ${size}) ? stato
correttamente caricato su Freenet. ${link}Click qui${/link} per aprire il file.
QueueToadlet.uploadSucceededTitle=Inserzione completata: ${filename}
QueueToadlet.veryhigh=molto alta
QueueToadlet.verylow=bassissima
QueueToadlet.warningUnsafeContent=Contenuto Potenzialmente Pericoloso
-QueueToadlet.warningUnsafeContentExplanation=Il file richiesto ? di un tipo
non ancora supportato dal filtro contenuti di Freenet e pertanto non sar?
possibile filtrarlo. Ci? significa che aprire tale file potrebbe compromettere
l'anonimato dell'utente
+QueueToadlet.warningUnsafeContentExplanation=Il file richiesto ? di un tipo
non ancora supportato dal filtro contenuti di Freenet e pertanto non sar?
possibile filtrarlo. Ci? significa che aprire tale file potrebbe compromettere
l'anonimato dell'utente
QueueToadlet.willneverfinish=campa cavallo
QueueToadlet.wipD=Download in corso (${size})
QueueToadlet.wipDU=Upload directory in corso (${size})
QueueToadlet.wipU=Upload in corso: (${size})
-RequestStarterGroup.scheduler=Policy di priorit? dello schedulatore
-RequestStarterGroup.schedulerCHKInserts=Policy di priorit? dello scheduler
(inserzioni CHK)
-RequestStarterGroup.schedulerCHKRequests=Policy di priorit? dello scheduler
(richieste CHK)
-RequestStarterGroup.schedulerLong=Imposta lo schema delle policy di priorit?
usate dallo schedulatore.
-RequestStarterGroup.schedulerSSKInserts=Policy di priorit? dello scheduler
(inserzioni SSK)
-RequestStarterGroup.schedulerSSKRequests=Policy di priorit? dello scheduler
(richieste SSK)
-RevocationKeyFoundUserAlert.text=E' stata rilevata la presenza sul network
della chiave di revoca dell' aggiornamento automatico. Questo significa che il
nostro sistema di aggiornamento automatico ? stato probabilmente COMPROMESSO.
L'aggiornamento automatico ? stato conseguentemente disabilitato onde prevenire
l'intallazione automatica di "robaccia". Si raccomanda di controllare la
disponibilit? di nuovi aggiornamenti al sito del progetto. Controllare che il
sito non sia stato falsificato!. Il messaggio di revoca ? il seguente:
${message}.
-RevocationKeyFoundUserAlert.title=La chiave privata del progetto ? stata
compromessa!
+RequestStarterGroup.scheduler=Policy di priorit? dello schedulatore
+RequestStarterGroup.schedulerCHKInserts=Policy di priorit? dello scheduler
(inserzioni CHK)
+RequestStarterGroup.schedulerCHKRequests=Policy di priorit? dello scheduler
(richieste CHK)
+RequestStarterGroup.schedulerLong=Imposta lo schema delle policy di priorit?
usate dallo schedulatore.
+RequestStarterGroup.schedulerSSKInserts=Policy di priorit? dello scheduler
(inserzioni SSK)
+RequestStarterGroup.schedulerSSKRequests=Policy di priorit? dello scheduler
(richieste SSK)
+RevocationKeyFoundUserAlert.text=E' stata rilevata la presenza sul network
della chiave di revoca dell' aggiornamento automatico. Questo significa che il
nostro sistema di aggiornamento automatico ? stato probabilmente COMPROMESSO.
L'aggiornamento automatico ? stato conseguentemente disabilitato onde prevenire
l'intallazione automatica di "robaccia". Si raccomanda di controllare la
disponibilit? di nuovi aggiornamenti al sito del progetto. Controllare che il
sito non sia stato falsificato!. Il messaggio di revoca ? il seguente:
${message}.
+RevocationKeyFoundUserAlert.title=La chiave privata del progetto ? stata
compromessa!
SSL.enable=Attiva supporto SSL?
SSL.enableLong=Attiva supporto SSL?
SSL.keyPass=Password di private key access
@@ -1052,44 +1066,44 @@
SSL.keyStorePassLong=Password per l'accesso di key store file
SSL.version=Versione di SSL
SSL.versionLong=Versione di SSL, SSLv3 o TLSv1 (default SSLv3)
-ShortOption.parseError=Il valore specificato non pu? essere interpretato come
16-bit integer : ${val}
-SimpleToadletServer.advancedMode=Abilita modalit? avanzata
+ShortOption.parseError=Il valore specificato non pu? essere interpretato come
16-bit integer : ${val}
+SimpleToadletServer.advancedMode=Abilita modalit? avanzata
SimpleToadletServer.advancedModeLong=Mostra informazioni cho possono
interessare solo utenti avanzati o sviluppatori. Nella maggioranza dei casi
dovrebbe essere impostata su 'falso'
-SimpleToadletServer.allowedFullAccess=Host ai quali ? consentito pieno accesso
a FProxy (leggere l'avvertenza)
-SimpleToadletServer.allowedFullAccessLong=Host ai quali ? consentito accesso
pieno al nodo (cambiare impostazioni di configurazione, riavviare, ecc).
AVVERTENZA: Usare cautela nel decidere a chi consentire accesso pieno!
+SimpleToadletServer.allowedFullAccess=Host ai quali ? consentito pieno accesso
a FProxy (leggere l'avvertenza)
+SimpleToadletServer.allowedFullAccessLong=Host ai quali ? consentito accesso
pieno al nodo (cambiare impostazioni di configurazione, riavviare, ecc).
AVVERTENZA: Usare cautela nel decidere a chi consentire accesso pieno!
SimpleToadletServer.allowedHosts=Nomi host o indirizzi IP ai quali e'
consentito connettersi a FProxy
-SimpleToadletServer.allowedHostsLong=Pu? essere una lista di IP separati da
virgole e IP in formato CIDR come 192.168.0.0/24. Tutti possono accedere al
disco rigido nei limiti definiti dalle altre opzioni di configurazione.
+SimpleToadletServer.allowedHostsLong=Pu? essere una lista di IP separati da
virgole e IP in formato CIDR come 192.168.0.0/24. Tutti possono accedere al
disco rigido nei limiti definiti dalle altre opzioni di configurazione.
SimpleToadletServer.bindTo=Indirizzo IP collegato
SimpleToadletServer.bindToLong=Indirizzo IP collegato
-SimpleToadletServer.cannotChangePortOnTheFly=Non ? possibile cambiare il
numero della porta FProxy "al volo"
-SimpleToadletServer.couldNotChangeBindTo=Non ? stato possibile cambiare
l'indirizzo abbinato a FProxy: ${error}.
+SimpleToadletServer.cannotChangePortOnTheFly=Non ? possibile cambiare il
numero della porta FProxy "al volo"
+SimpleToadletServer.couldNotChangeBindTo=Non ? stato possibile cambiare
l'indirizzo abbinato a FProxy: ${error}.
SimpleToadletServer.cssName=Nome del CSS
SimpleToadletServer.cssNameLong=Nome del CSS utilizzato da FProxy
SimpleToadletServer.cssOverride=Usa un CSS personalizzato al posto di quello
regolare (ATTENZIONE!)
-SimpleToadletServer.cssOverrideCantRead=Non ? stato possibile leggere il file
di sovrascrittura CSS fornito: ${filename}
+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.cssOverrideNotInUploads=Non ? possibile usare questa
impostazione: "${filename} non ? una directory dalla quale sono permessi gli
upload.
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.doRobotsLong=Pubblica un file /robots.txt allo scopo di
tenere lontano Google, spiders, Wget, etc.
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.
SimpleToadletServer.enableJS=Permetti a FProxy di usare Javascript
-SimpleToadletServer.enableJSLong=Determina se FProxy pu? o meno fare uso di
Javascript. Questa impostazione di solito va tenuta su 'falso'. Nota che i
freesite non fanno uso di javascript nemmeno se qui abilitata.
+SimpleToadletServer.enableJSLong=Determina se FProxy pu? o meno fare uso di
Javascript. Questa impostazione di solito va tenuta su 'falso'. Nota che i
freesite non fanno uso di javascript nemmeno se qui abilitata.
SimpleToadletServer.enablePersistentConnections=Abilita connessioni
persistenti HTTP? (Leggere la descrizione)
SimpleToadletServer.enablePersistentConnectionsLong=Non abilitare questa
opzione tranne nel caso in cui il browser sia configurato per usare molte
connessioni anche se sono persistenti.
SimpleToadletServer.enabled=Abilita FProxy
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.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. 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?
SimpleToadletServer.sslLong=Abilitare ssl?
-StartupToadlet.entropyErrorContent=Non c'e' abbastanza entropia disponibile
nel sistema... Freenet non si avvier? finch? non potr? metterne insieme
abbastanza.
-StartupToadlet.entropyErrorTitle=Entropia disponibile insufficiente
-StartupToadlet.isStartingUp=Procedura di avviamento del nodo Freenet in corso,
si prega di attendere.
-StartupToadlet.title=Avviamento di Freenet in corso
+StartupToadlet.entropyErrorContent=Non c'? abbastanza entropia disponibile nel
sistema... Freenet non si avvier? finch? non ne avr? racimolata abbastanza.
+StartupToadlet.entropyErrorTitle=Entropia insufficiente!
+StartupToadlet.isStartingUp=Avviamento del nodo Freenet in corso, si prega di
attendere.
+StartupToadlet.title=Avvio di Freenet in corso
StaticToadlet.pathInvalidChars=La URI specificata contiene caratteri non
permessi.
StaticToadlet.pathNotFound=Il percorso specificato non esiste.
StaticToadlet.pathNotFoundTitle=Percorso non trovato
@@ -1106,7 +1120,7 @@
StatisticsToadlet.fullTitle=Statistiche del nodo: ${name}
StatisticsToadlet.getLogs=Scarica l'ultimo logfile del nodo
StatisticsToadlet.inputRate=Input: ${rate}/second (of ${max}/second)
-StatisticsToadlet.insertOutput=Output inserzione (carico utile escluso): CHK
${chk} SSK ${ssk}.
+StatisticsToadlet.insertOutput=Output inserzioni (carico utile escluso): CHK
${chk} SSK ${ssk}.
StatisticsToadlet.javaVersion=Versione Java: ${version}
StatisticsToadlet.jeDumpButton=Genera JE Dump
StatisticsToadlet.jvmInfoTitle=JVM
@@ -1123,17 +1137,17 @@
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?
-StatisticsToadlet.requestOutput=Output richiesta (escluso carico utile): CHK
${chk} SSK ${ssk}.
+StatisticsToadlet.priority=Priorit?
+StatisticsToadlet.requestOutput=Output richieste (carico utile escluso): CHK
${chk} SSK ${ssk}.
StatisticsToadlet.resendBytes=Bytes rispediti: ${total}
-StatisticsToadlet.routingDisabled=Indirizzamento traffico sospeso (il nodo ?
attualmente connesso ma una delle due parti non accetta indirizzamento di
traffico)
+StatisticsToadlet.routingDisabled=Indirizzamento traffico sospeso (il nodo ?
attualmente connesso ma una delle due parti non accetta indirizzamento di
traffico)
StatisticsToadlet.routingDisabledShort=Indirizzamento Traffico Sospeso
StatisticsToadlet.running=In funzione
StatisticsToadlet.statisticGatheringTitle=Raccolta Statistiche
StatisticsToadlet.swapOutput=Output Scambio: ${total}.
StatisticsToadlet.threadDumpButton=Genera Thread Dump
StatisticsToadlet.threads=Threads correnti: ${running}/${max}
-StatisticsToadlet.threadsByPriority=Thread in ordine di prorit?
+StatisticsToadlet.threadsByPriority=Thread in ordine di prorit?
StatisticsToadlet.totalInput=Input Totale: ${total} (${rate}/second)
StatisticsToadlet.totalOutput=Output Totale: ${total} (${rate}/second)
StatisticsToadlet.totalOverhead=Totale overhead di non-richieste: ${rate}/sec
(${percent}%).
@@ -1145,13 +1159,13 @@
StatisticsToadlet.waiting=In attesa
SymlinkerToadlet.symlinks=Link simbolici in ToadletServer
SymlinkerToadlet.symlinksLong=Lista di "alias#target" che va a formare un
gruppo di link simbolici
-TestnetHandler.cannotEnableDisableOnTheFly=Non ? possibile abilitare o
disabilitare la modalit? testnet "al volo"; ? necessario riavviare il nodo ed
ottenere nuove connessioni.
-TestnetHandler.enable=Abilita modalit? testnet (PERICOLO)
-TestnetHandler.enableLong=Abilita la modalit? testnet (PERICOLO). La modalit?
testnet elimina l'anonimato per poter permettere agli sviluppatori di fare il
debugging del nodo
+TestnetHandler.cannotEnableDisableOnTheFly=Non ? possibile abilitare o
disabilitare la modalit? testnet "al volo"; ? necessario riavviare il nodo ed
ottenere nuove connessioni.
+TestnetHandler.enable=Abilita modalit? testnet (PERICOLO)
+TestnetHandler.enableLong=Abilita la modalit? testnet (PERICOLO). La modalit?
testnet elimina l'anonimato per poter permettere agli sviluppatori di fare il
debugging del nodo
TestnetHandler.port=Porta testnet
TestnetHandler.portLong=Numero della porta testnet (-1 = listenPort+1000)
TextModeClientInterfaceServer.allowedHosts=Host consentiti
-TextModeClientInterfaceServer.allowedHostsLong=Nomi host o indirizzi IP ai
quali ? consentito connettersi a TMCI. Pu? essere una lista di nomi host e
indirizzi IP separati da virgole, o anche IP in formato CIDR come 192.168.0.0/24
+TextModeClientInterfaceServer.allowedHostsLong=Nomi host o indirizzi IP ai
quali ? consentito connettersi a TMCI. Pu? essere una lista di nomi host e
indirizzi IP separati da virgole, o anche IP in formato CIDR come 192.168.0.0/24
TextModeClientInterfaceServer.bindTo=Indirizzo IP collegato
TextModeClientInterfaceServer.bindToLong=Indirizzo IP collegato
TextModeClientInterfaceServer.enableInputOutput=Abilita stdout/stdin
@@ -1163,7 +1177,7 @@
TextModeClientInterfaceServer.telnetPortNumber=Porta telnet
TextModeClientInterfaceServer.telnetPortNumberLong=Porta TCP utlizzata dal
server TMCI
TimeSkewDetectedUserAlert.shortText=Il nodo ha rilevato una discrepanza
temporale. Freenet potrebbe bloccarsi in strani modi!
-TimeSkewDetectedUserAlert.text=Una discrepanza temporale ? stata rilevata dal
nodo. Questo ? un inconveniente grave; il nodo non potr? funzionare
correttamente finch? non vi si sar? ovviato. Tra le cause pi? comuni, la
modalit? powersafe mal configurata, cattiva sincronizzazione tra i client in
rete, problemi di hardware.
+TimeSkewDetectedUserAlert.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=Clicca qui
@@ -1181,9 +1195,9 @@
Toadlet.returnToPrevPage=Torna alla pagina precedente
Toadlet.returnToQueuepage=Torna alla pagina della coda
Toadlet.tempRedirectWithReason=Redirect temporaneo: ${reason}
-Toadlet.unauthorized=L'accesso a questa pagina ? interdetto.
+Toadlet.unauthorized=L'accesso a questa pagina ? interdetto.
Toadlet.unauthorizedTitle=Non Autorizzato
-Toadlet.yes=S?
+Toadlet.yes=S?
ToadletContextImpl.cannotParseContentLength=errore nell' analisi
contenuto-lunghezza: ${error}
ToadletContextImpl.cannotParseContentLengthWithError=Impossibile interpretare
contenuto-lunghezza: ${error}
ToadletContextImpl.headersLineTooLong=Rigo troppo lungo dalla ricostruzione di
headers
@@ -1205,23 +1219,23 @@
TranslationToadlet.reEdit=Ri-modifica la traduzione
TranslationToadlet.remove=Elimina
TranslationToadlet.removeOverrideTitle=Elimina una chiave di traduzione
-TranslationToadlet.removeOverrideWarningTitle=Attenzione: la chiave di
traduzione verr? eliminata!
+TranslationToadlet.removeOverrideWarningTitle=Attenzione: la chiave di
traduzione verr? eliminata!
TranslationToadlet.returnToTranslations=Torna alla pagina della traduzione
-TranslationToadlet.showEverything=Mostra tutto, incluse stringhe gi? tradotte
+TranslationToadlet.showEverything=Mostra tutto, incluse stringhe gi? tradotte
TranslationToadlet.translationKeyLabel=Chiave di traduzione
TranslationToadlet.translationUpdateTitle=Aggiornamento traduzione
TranslationToadlet.translationUpdatedTitle=Traduzione aggiornata!
TranslationToadlet.updateTranslationCommand=Aggiorna traduzione
-UnknownContentTypeException.explanation=Il nodo non ha informazioni su questo
MIME type. Ci? potrebbe comportare una reazione pericolosa da parte del browser
in risposta al download di questo file. Per esempio, molti formati possono
contenere immagini o video inclusi (embedded) che vengono scaricati dal web:
ci? espone l'utente al rischio di rivelare il proprio indirizzo IP ad un
eventuale avversario (per esempio un avversario che gestisca il il sito web dal
quale le immagini o video ecc. vengono scaricati, o uno che abbia in qualche
modo ottenuto accesso ai log del sito stesso). Hyperlinks e scripting sono
entrambi ugualmente pericolosi, per lo stesso motivo, ed anche per alcuni altri.
+UnknownContentTypeException.explanation=Il nodo non ha informazioni su questo
MIME type. Ci? potrebbe comportare una reazione pericolosa da parte del browser
in risposta al download di questo file. Per esempio, molti formati possono
contenere immagini o video inclusi (embedded) che vengono scaricati dal web:
ci? espone l'utente al rischio di rivelare il proprio indirizzo IP ad un
eventuale avversario (per esempio un avversario che gestisca il il sito web dal
quale le immagini o video ecc. vengono scaricati, o uno che abbia in qualche
modo ottenuto accesso ai log del sito stesso). Hyperlinks e scripting sono
entrambi ugualmente pericolosi, per lo stesso motivo, ed anche per alcuni altri.
UnknownContentTypeException.title=Tipo di contenuto (content type) sconosciuto
e pertanto potenzialmente pericoloso: ${type}
UpdateDeployContext.cannotUpdateNoExtJar=Freenet-ext.jar non trovata in
wrapper.conf: (freenet.jar trovata: ${mainFilename})
-UpdateDeployContext.cannotUpdateNoJars=Non ? stato possibile trovare i file
jar di Freenet in wrapper.conf
-UpdateDeployContext.cannotUpdateNoMainJar=Non ? stato possibile trovare
freenet.jar in wrapper.conf (freenet-ext.jar non trovata: ${extFilename})
+UpdateDeployContext.cannotUpdateNoJars=Non ? stato possibile trovare i file
jar di Freenet in wrapper.conf
+UpdateDeployContext.cannotUpdateNoMainJar=Non ? stato possibile trovare
freenet.jar in wrapper.conf (freenet-ext.jar non trovata: ${extFilename})
UpdateDeployContext.updateCatastrophe=ERRORE CATASTROFICO: Eliminato ${old} ma
impossibile rinominare ${new} in ${old} quindi IL NODO NON SI AVVIERA'! La
soluzione consiste nel rinominare ${new} in ${old} manualmente
-UpdateDeployContext.updateFailedCannotDeleteOldConfig=Non ? stato possibile
eliminare ${old} quindi non ? possibile sovrascrivere. Aggiornamento fallito.
-UpdateDeployContext.updateFailedNonStandardConfig=Non ? stato possibile
completare l'aggiornamento a causa della configurazione non-standard: written
main=${main} ext=${ext} - Questo non dovrebbe accadere! Si prega di riportare
l'accaduto agli sviluppatori includendo il file wrapper.conf
+UpdateDeployContext.updateFailedCannotDeleteOldConfig=Non ? stato possibile
eliminare ${old} quindi non ? possibile sovrascrivere. Aggiornamento fallito.
+UpdateDeployContext.updateFailedNonStandardConfig=Non ? stato possibile
completare l'aggiornamento a causa della configurazione non-standard: written
main=${main} ext=${ext} - Questo non dovrebbe accadere! Si prega di riportare
l'accaduto agli sviluppatori includendo il file wrapper.conf
UpdatedVersionAvailableUserAlert.alsoDownloadedNewExtJar=Il nodo ha anche
scaricato una nuova versione della extra jar di Freenet, versione ${version}
-UpdatedVersionAvailableUserAlert.armed=Il nodo verr? riavviato automaticamente
dopo aver completato il download e verificato la nuova versione di Freenet.
+UpdatedVersionAvailableUserAlert.armed=Il nodo verr? riavviato automaticamente
dopo aver completato il download e verificato la nuova versione di Freenet.
UpdatedVersionAvailableUserAlert.clickToUpdateASAP=Clicca qui sotto per
aggiornare il nodo dopo la verifica dell'aggiornamento.
UpdatedVersionAvailableUserAlert.clickToUpdateNow=Clicca qui sotto per
aggiornare il nodo immediatamente.
UpdatedVersionAvailableUserAlert.downloadedNewExtJar=Il nodo ha scaricato una
nuova versione della extra jar di Freenet, versione ${version}.
@@ -1231,17 +1245,17 @@
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=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 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.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 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=Si prega di aggiornare al
pi? presto possibile
-UpdatedVersionAvailableUserAlert.updateASAPQuestion=Riavviare il nodo dopo che
l'aggiornamento ? stato completato?
+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
UserAlert.hide=Nascondi
UserAlert.reset=Cancella
-UserAlertManager.alertsOnAlertsPage=| Controllali nella ${link}pagina delle
avvertenze${/link}.
+UserAlertManager.alertsOnAlertsPage=| Vedi dettagli alla ${link}pagina delle
avvertenze${/link}.
UserAlertManager.alertsOnHomepage=| Sono visibili alla ${link}Homepage di
Freenet${/link}.
UserAlertManager.alertsTitle=Notificazioni particolari
UserAlertManager.clickForMore=Click su un oggetto per maggiori informazioni o
per sbarazzarsene.
@@ -1252,7 +1266,7 @@
UserAlertManager.totalLabel=Totale:
UserAlertManager.warningCountLabel=Avvertenze:
UserAlertsToadlet.titleWithName=Avvertenze per ${name}
-WelcomeToadlet.activityTitle=Attivit? in corso
+WelcomeToadlet.activityTitle=Attivit? in corso
WelcomeToadlet.alertsSummary=Sommario avvertenze
WelcomeToadlet.arkFetchCount=ARK Fetchers: ${total}
WelcomeToadlet.confirmAddBookmarkSubTitle=Conferma Aggiunta Sgnalibro
@@ -1269,20 +1283,20 @@
WelcomeToadlet.extVersionWithRecommended=Freenet-ext Build #${build} (si
raccomanda ${recbuild}) r${rev}
WelcomeToadlet.fetch=Richiama
WelcomeToadlet.fetchKeyLabel=Richiama una chiave
-WelcomeToadlet.finInsertSuccessWithKey=Il messaggio ? stato inserito in ${key}.
+WelcomeToadlet.finInsertSuccessWithKey=Il messaggio ? stato inserito in ${key}.
WelcomeToadlet.finInsertedTitle=Inserzione
WelcomeToadlet.finTitle=Inserzione Nota Istantanea di Frost
WelcomeToadlet.fromHeader=Da
WelcomeToadlet.goToExternalLink=Vai al link specificato
WelcomeToadlet.homepageFullTitleWithName=Homepage FProxy di ${name}
-WelcomeToadlet.ieWarning=E' stato rilevato l'uso di Microsoft Internet
Explorer. Ci? potrebbe costituire un pericolo perch? alcuni siti interni a
Freenet potrebbero compromettere l'anonimato dell'utente.
+WelcomeToadlet.ieWarning=E' stato rilevato l'uso di Microsoft Internet
Explorer. Ci? potrebbe costituire un pericolo per l'anonimato dell'utente.
WelcomeToadlet.ieWarningTitle=Rischio Sicurezza!
WelcomeToadlet.insertCount=Inserzioni: ${total}
WelcomeToadlet.insertFailedTitle=Inserzione fallita
-WelcomeToadlet.insertFailedWithMessage=L'inserzione ? fallita con il
messaggio: ${message}
+WelcomeToadlet.insertFailedWithMessage=L'inserzione ? fallita con il
messaggio: ${message}
WelcomeToadlet.insertSucceededTitle=Inserzione Completata
WelcomeToadlet.insertedTitle=Inserzione
-WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=La chiave
${link}${name}${/link} ? stata inserita.
+WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=La chiave
${link}${name}${/link} ? stata inserita.
WelcomeToadlet.keyRequestLabel=Chiave:
WelcomeToadlet.messageHeader=Messaggio
WelcomeToadlet.nodeUpdateConfirm=Conferma: aggiornare il nodo Freenet?
@@ -1295,7 +1309,7 @@
WelcomeToadlet.restartConfirm=Conferma: Riavvia nodo Freenet?
WelcomeToadlet.restartConfirmTitle=Riavvia Nodo
WelcomeToadlet.restartNode=Riavvia nodo
-WelcomeToadlet.restarting=Si prega di attendere durante il riavvio del nodo.
Questa schermata si aggiorner? automaticamente, fino a mostrare la pagina
iniziale fi Freenet. Grazie di aver scelto Freenet.
+WelcomeToadlet.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?
@@ -1306,23 +1320,24 @@
WelcomeToadlet.startIndexHeader=Indice dal quale iniziare
WelcomeToadlet.subjectHeader=Oggetto
WelcomeToadlet.targetBoardHeader=Target Board
-WelcomeToadlet.testnetWarning=gira in modalit? testnet. DISTRUGGE l'anonimato!
-WelcomeToadlet.testnetWarningTitle=Modalit? Testnet
+WelcomeToadlet.testnetWarning=gira in modalit? testnet. DISTRUGGE l'anonimato!
+WelcomeToadlet.testnetWarningTitle=Modalit? Testnet
WelcomeToadlet.thanks=Grazie di aver scelto Freenet.
-WelcomeToadlet.threadDumpNotUsingWrapper=Non ? possibile generare un thread
dump se il nodo non sta girando nel wrapper
+WelcomeToadlet.threadDumpNotUsingWrapper=Non ? possibile generare un thread
dump se il nodo non sta girando nel wrapper
WelcomeToadlet.threadDumpSubTitle=Generazione di Thread Dump
WelcomeToadlet.threadDumpTitle=Genera Thread Dump
-WelcomeToadlet.threadDumpWithFilename=E' stato generato un thread dump, esso ?
disponibile in ${filename}.
+WelcomeToadlet.threadDumpWithFilename=E' stato generato un thread dump, esso ?
disponibile in ${filename}.
WelcomeToadlet.transferringRequestCount=Richieste in corso di trasferimento:
${total}
WelcomeToadlet.update=Aggiorna
-WelcomeToadlet.updating=Il nodo Freenet ? stato aggiornato e sar? ora
riavviato automaticamente. Il processo di riavvio pu? durare fino a dieci
minuti perch? il nodo prima di aggiornare deve controllare se sia presente una
chiave di revoca.
+WelcomeToadlet.updating=Il nodo Freenet ? stato aggiornato e sar? ora
riavviato automaticamente. Il processo di riavvio pu? durare fino a dieci
minuti perch? il nodo prima di aggiornare deve controllare se sia presente una
chiave di revoca.
WelcomeToadlet.updatingThanks=Grazie per usare Freenet
WelcomeToadlet.updatingTitle=Aggiornamento del nodo in corso
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 di runtime del database
sono state scritte nel file di log del wrapper
-WrapperConfig.wrapper.java.maxmemory.long=Limita la quantit? massima di
memoria utilizzabile da Freenet. Freenet ha bisogno di molta pi? memoria se si
hanno molti e/o grossi file in coda di dowload/upload, ed in misura minore se
il nodo ? dotato di un datastore di dimensioni abbondanti. I cambiamenti
saranno effettivi dopo il riavvio del nodo.
+WrapperConfig.wrapper.java.maxmemory.long=Limita la quantit? massima di
memoria utilizzabile da Freenet. Freenet ha bisogno di molta pi? memoria se si
hanno molti e/o grossi file in coda di dowload/upload, ed in misura minore se
il nodo ? dotato di un datastore di dimensioni abbondanti. I cambiamenti
saranno effettivi dopo il riavvio del nodo.
WrapperConfig.wrapper.java.maxmemory.short=Memoria massima (in megabytes)
testing.test=test${test1}test${test2}test
+?BookmarkEditorToadlet.pasteOrCancel=Click su un'icona incolla o cancella.
End
Modified:
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
2008-08-10 09:16:13 UTC (rev 21698)
@@ -205,7 +205,7 @@
DarknetConnectionsToadlet.idleTime=??????????????????
DarknetConnectionsToadlet.idleTimeTitle=???????
DarknetConnectionsToadlet.invalidSignature=??????????????(${error}).
-DarknetConnectionsToadlet.ipAddress=??????, ? <??>:<??> ??
+DarknetConnectionsToadlet.ipAddress=??????, ? <??>:<????> ??
DarknetConnectionsToadlet.ipAddressTitle=??
DarknetConnectionsToadlet.listenOnly=???????: ?????????????, ???????????????.
DarknetConnectionsToadlet.listenOnlyShort=????
@@ -221,7 +221,7 @@
DarknetConnectionsToadlet.noPeersSecondHalf=??,???????????????.
DarknetConnectionsToadlet.noPeersWithHomepageLink=Freenet ???????????????????.
??${link}????${/link}??????????, ?????????.
DarknetConnectionsToadlet.noRefOrURL=???????????????URL. ?????.
-DarknetConnectionsToadlet.nodePortsTitle=???????
+DarknetConnectionsToadlet.nodePortsTitle=?????????
DarknetConnectionsToadlet.notConnected=???: ?????, ??????????????
DarknetConnectionsToadlet.notConnectedShort=???
DarknetConnectionsToadlet.opennetFnpPort=????(Opennet) FNP: ${port}/UDP
(??????????, ???"???", ????; ??????????????)
@@ -262,6 +262,7 @@
FProxyToadlet.alertsTitle=??
FProxyToadlet.backToFProxy=${link}???${/link}?? FProxy ??.
FProxyToadlet.backToReferrer=${link}???${/link}??????.
+FProxyToadlet.cantBindPort=Fproxy ????????????!
FProxyToadlet.config=??/??????
FProxyToadlet.configTitle=??
FProxyToadlet.dangerousContentTitle=????????
@@ -288,8 +289,10 @@
FProxyToadlet.largeFileExplanationAndOptions=??? Freenet ???????.
????????????????????, ?? Freenet ?????????????. ???????:
FProxyToadlet.mayChange=(???)
FProxyToadlet.mimeType=MIME ???${mime}
+FProxyToadlet.notEnoughMetaStrings=???????
FProxyToadlet.notFoundTitle=???
FProxyToadlet.openAsText=${link}???${/link}??????????? (???????, ??????????).
+FProxyToadlet.openAsThawIndex=${link}???${/link}?? thaw ?????????(????????!).
FProxyToadlet.openForce=${link}???${/link}????? ${mime} ????????????????.
FProxyToadlet.openForceDisk=${link}???${/link}????????????????.
FProxyToadlet.openPossRSSAsPlainText=${link}???${/link}???????????(? IE7 ??
FF2 ?${bold}??????s${/bold}).
@@ -317,15 +320,20 @@
FProxyToadlet.welcomeTitle=??
FcpServer.allowedHosts=??????(????????)
FcpServer.allowedHostsFullAccess=???????????
+FcpServer.allowedHostsFullAccessLong=???????????????. ??????????????????,
??????. ??, ?????????????????!
FcpServer.allowedHostsLong=??????????IP??????????????????????IP?????CIDR???IP????(?
192.168.0.0/24)?
FcpServer.assumeDownloadDDAIsAllowed=??????? DDA?
FcpServer.assumeDownloadDDAIsAllowedLong=???????????????(DDA)? ???, ?????? DDA
??????? TestDDARequest ??.
FcpServer.assumeUploadDDAIsAllowed=??????? DDA?
FcpServer.assumeUploadDDAIsAllowedLong=???????????????(DDA)? ???, ?????? DDA
??????? TestDDARequest ??.
+FcpServer.bindTo=??????
+FcpServer.bindToLong=FCP ?????????????.
FcpServer.cannotStartOrStopOnTheFly=??????????? FCP ???
+FcpServer.couldNotChangeBindTo=???? FCP ???????: ${error}.
FcpServer.downloadsFileCanCreateCannotReadOrWrite=???????????
FcpServer.downloadsFileDoesNotExistCannotCreate=???????????
FcpServer.downloadsFileExistsCannotReadOrWrite=???????????
+FcpServer.downloadsFileIsDirectory=?????????????: ??????
FcpServer.downloadsFileParentDoesNotExist=???????
FcpServer.downloadsFileUnreadable=???????????
FcpServer.enablePersistentDownload=????????
@@ -337,8 +345,69 @@
FcpServer.isEnabled=??FCP???
FcpServer.isEnabledLong=???? Freenet ?????(FCP)???
FcpServer.portNumber=FCP?
+FcpServer.portNumberLong=FCP ???????? TCP ????
FcpServer.ssl=?? SSL?
FcpServer.sslLong=??? FCP ?????? SSL
+FetchException.longError.1=???????????
+FetchException.longError.10=????????
+FetchException.longError.11=??????? - ???????? ???????
+FetchException.longError.12=???????, ??????????????
+FetchException.longError.13=?????
+FetchException.longError.14=????? - ?????????????????
+FetchException.longError.15=????????????
+FetchException.longError.16=?????? - ???????
+FetchException.longError.17=????, ??????
+FetchException.longError.18=??????, ??????????
+FetchException.longError.19=?????
+FetchException.longError.2=???????????
+FetchException.longError.20=URI ????
+FetchException.longError.21=????
+FetchException.longError.22=??????
+FetchException.longError.23=??????????
+FetchException.longError.24=?? URI ??????????(????)
+FetchException.longError.25=???
+FetchException.longError.26=??????
+FetchException.longError.27=?????: ???? URI
+FetchException.longError.28=????????; ??????????, ???????????
+FetchException.longError.29=??? MIME ??: ??????????????????
+FetchException.longError.3=????????????
+FetchException.longError.30=??????????, ??????????????????, ???????.
+FetchException.longError.4=????????
+FetchException.longError.5=???????????
+FetchException.longError.6=???????
+FetchException.longError.7=??????????????
+FetchException.longError.8=???????????????????
+FetchException.longError.9=??(??)????
+FetchException.shortError.1=???????
+FetchException.shortError.10=??????
+FetchException.shortError.11=???????
+FetchException.shortError.12=?????
+FetchException.shortError.13=?????
+FetchException.shortError.14=?????
+FetchException.shortError.15=?????
+FetchException.shortError.16=??????
+FetchException.shortError.17=????
+FetchException.shortError.18=????
+FetchException.shortError.19=?????
+FetchException.shortError.2=???????????
+FetchException.shortError.20=URI ????
+FetchException.shortError.21=????
+FetchException.shortError.22=??????
+FetchException.shortError.23=??????????
+FetchException.shortError.24=???????
+FetchException.shortError.25=??????
+FetchException.shortError.26=??????
+FetchException.shortError.27=?? URI
+FetchException.shortError.28=???????
+FetchException.shortError.29=??? MIME ??
+FetchException.shortError.3=???????
+FetchException.shortError.30=?????(??????)
+FetchException.shortError.4=????????
+FetchException.shortError.5=?????
+FetchException.shortError.6=??????
+FetchException.shortError.7=??????????
+FetchException.shortError.8=?????????
+FetchException.shortError.9=?????
FileOffer.acceptTransferButton=????
FileOffer.askUserTitle=??????
FileOffer.commentLabel=??:
@@ -421,10 +490,35 @@
HTMLFilter.tooManyNestedStyleOrScriptTagsLong=?? </style> ????? -
?????????????, ?????????, ???????????? - ????????????????
HTMLFilter.unknownTag=????? ${tag}
IPDetectorPluginManager.connectionProblems=????:
+IPDetectorPluginManager.direct=???????????????. ??, ????????????? Freenet ??.
+IPDetectorPluginManager.directTitle=??????????
+IPDetectorPluginManager.forwardPortMaybeForwarded=?????????????????(NAT,
????????)??. ??????, ???????? UDP (?? TCP) ???? ${port}, ???????. ??????????;
Freenet ??????????????. ????????${link}??${/link}.
+IPDetectorPluginManager.forwardPortNotForwarded=?????????????????(NAT,
????????)??. ??????, ???????? UDP (?? TCP) ???? ${port}, ???????.
?????????????, ?? Freenet ????. ????????${link}??${/link}.
IPDetectorPluginManager.forwardPortShortMaybeForwarded=?? UDP ? ${port} ????
(?????????).
IPDetectorPluginManager.forwardPortShortNotForwarded=?? UDP ? ${port} ????
(???????).
+IPDetectorPluginManager.forwardTwoPortsMaybeForwarded=?????????????????(NAT,
????????)??. ??????, ???????? UDP (?? TCP) ???? ${port1} ? ${port2}, ???????.
??????????; Freenet ??????????????. ????????${link}??${/link}.
+IPDetectorPluginManager.forwardTwoPortsNotForwarded=?????????????????(NAT,
????????)??. ??????, ???????? UDP (?? TCP) ???? ${port1} ? ${port2}, ???????.
?????????????, ?? Freenet ????. ????????${link}??${/link}.
IPDetectorPluginManager.forwardTwoPortsShortMaybeForwarded=?? UDP ? ${port1} ?
${port2} ???? (?????????).
IPDetectorPluginManager.forwardTwoPortsShortNotForwarded=?? UDP ? ${port1} and
${port2} ???? (???????).
+IPDetectorPluginManager.fullCone=??????????????"??????"??????(NAT). ??,
????????????? Freenet ??.
+IPDetectorPluginManager.fullConeTitle=??????????????
+IPDetectorPluginManager.maybeAlreadyForwarded=?????????(Freenet ???????).
+IPDetectorPluginManager.noConnectivity=?????????????? UDP. ??????, ?? Freenet
?????????????.
+IPDetectorPluginManager.noConnectivityTitle=?? UDP ????
+IPDetectorPluginManager.noConnectivityshort=???????: ?? UDP ????, Freenet ????!
+IPDetectorPluginManager.portForwardHelpURL=http://wiki.freenetproject.org/FirewallAndRouterIssues
+IPDetectorPluginManager.portRestricted=??????????????????????????????(NAT)?????.
?????????????, ?????????????????????.
+IPDetectorPluginManager.portRestrictedTitle=??????????????????
+IPDetectorPluginManager.restricted=????????????"??????"??????(NAT).
???????????????.
+IPDetectorPluginManager.restrictedTitle=??????????????
+IPDetectorPluginManager.seriousConnectionProblems=???????:
+IPDetectorPluginManager.suggestForwardPort=???????????????(UDP ?? ${port}).
(?? http://wiki.freenetproject.org/FirewallAndRouterIssues ).
+IPDetectorPluginManager.suggestForwardPortWithLink=?????????${link}??????${/link}(UDP
?? ${port}) (??????????, Freenet ???????).
+IPDetectorPluginManager.suggestForwardTwoPorts=Y???????????????(UDP ??
${port1} ? ${port2}). (??
http://wiki.freenetproject.org/FirewallAndRouterIssues ).
+IPDetectorPluginManager.suggestForwardTwoPortsWithLink=?????????${link}??????${/link}(UDP
?? ${port1} ? ${port2}) (??????????, Freenet ???????).
+IPDetectorPluginManager.symmetric=????????????????????????(NAT)?????.
????????????????????, ?????????????????????.
+IPDetectorPluginManager.symmetricPS=????????????????(NAT)??, ?????????,
???????????????, ????????????????!
+IPDetectorPluginManager.symmetricTitle=?????????
IPUndetectedUserAlert.detecting=Freenet ??????????. ????????????, ???????...
IPUndetectedUserAlert.detectingShort=Freenet ??????????.
IPUndetectedUserAlert.detectingWithConfigLink=Freenet ??????????.
????????????, ???????, ???????${link}??${/link}???????.
@@ -434,8 +528,30 @@
IPUndetectedUserAlert.unknownAddressShort=Freenet ???????????. ?????????.
IPUndetectedUserAlert.unknownAddressTitle=??????
IPUndetectedUserAlert.unknownAddressWithConfigLink=Freenet
?????????????(??????(NAT)???????????). ???????????????,
??????????????????????????????. ????????????, Freenet ??????????????.
??????????, ?'???????????'${link}????${/link}???????.
+InsertException.longError.1=?????? URI ????
+InsertException.longError.10=???????
+InsertException.longError.11=? URI ?????????(???? '/' ??)
+InsertException.longError.12=?????????
+InsertException.longError.2=???????: ?????????????
+InsertException.longError.3=????
+InsertException.longError.4=?????????????
+InsertException.longError.5=????????????????(????????, ????????)
+InsertException.longError.6=???????????????
+InsertException.longError.7=???????: ??????(?????????)
+InsertException.longError.8=????????????
+InsertException.longError.9=??????????????????????
+InsertException.shortError.1=URI ????
InsertException.shortError.10=???
+InsertException.shortError.11=?????????
+InsertException.shortError.12=?????????
+InsertException.shortError.2=?????
InsertException.shortError.3=????
+InsertException.shortError.4=?????
+InsertException.shortError.5=?????
+InsertException.shortError.6=????????????
+InsertException.shortError.7=??????????
+InsertException.shortError.8=????????
+InsertException.shortError.9=???????
IntOption.parseError=??????????? 32 ??? : ${val}
InvalidAddressOverrideUserAlert.unknownAddress=Freenet ??????
ipAddressOverride ??????, ????????????????, IPv4 ??, ?? IPv6 ?????(IPv6
??????????????????).
InvalidAddressOverrideUserAlert.unknownAddressShort=???? ipAddressOverride
???. ???????.
@@ -516,7 +632,11 @@
Node.acceptSeedConnectionsShort=???????
Node.alwaysAllowLocalAddresses=???????????????????
Node.alwaysAllowLocalAddressesLong=???, ???????????, ???????????????,
?????????(???????)????. ????, ???????????????(??????????)??????.
???????????????, ?????????????????? UDP ???????????, ?????.
+Node.assumeNATed=???????????.
+Node.assumeNATedLong=????????????????????(NAT)????????, ???????????,
????????????(? 10 ? 30 ???)?
Node.bandwidthLimitMustBePositiveOrMinusOne=??????????? -1
+Node.bindTo=??????
+Node.bindToLong=????? IP ??
Node.buggyJVM=????? JVM ??(${version})?????. ????????, ?????? OutOfMemoryError
??. ?????? Sun ???? Java 1.4.2_13 ?, 1.5.0_10 ?, ?? 1.6 ?(????). ????
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4855795 .
Node.buggyJVMShort=Freenet ???? Java ?? ${version} ??????. ?????, ??????? Java
?????????.
Node.buggyJVMTitle=JVM ????
@@ -528,11 +648,14 @@
Node.deadlockWarning=??: ???????? NPTL ????? Sun JVM. ???????? JVM
?????????????. ????????????? LD_ASSUME_KERNEL ? 2.4.1 ??? NPTL. ????? Freenet
????????????; ???????, ?????? run.sh
(https://emu.freenetproject.org/svn/trunk/apps/installer/installclasspath/run.sh)
?????. ???????????? pthreads ?????? JVM ??. ?????, ??????????, ??????????,
????????? 100% ??, ????????????.
Node.disableHangCheckers=?????????
Node.disableHangCheckersLong=??????????????. ????? Fred ???????????????.
-Node.disablePHTLSLong=Disable probabilistic HTL (???????, ???????????)
+Node.disablePHTLS=?? probabilistic HTL
+Node.disablePHTLSLong=?? probabilistic HTL (???????, ???????????)
Node.dropPacketEvery=????????
Node.dropPacketEveryLong=???????. ???????????, ????????. 0 ??????????. ???????!
Node.enableARKs=?? ARKs? (????!)
Node.enableARKsLong=???? ARKs? (??????!).
+Node.enablePacketCoalescing=???????
+Node.enablePacketCoalescingLong=?????????? ??????????????, ?? CPU ???,
?????????????, ??????????????. ???????????, ??????.
Node.enablePerNodeFailureTables=??????????????
Node.enablePerNodeFailureTablesLong=?????? 10 ???????????????????
Node.enableSwapQueueing=??????????? (????!)
@@ -578,7 +701,8 @@
Node.outBWLimitLong=?????????(???????); ????????????????
Node.passOpennetPeersThroughDarknet=???????????????????
Node.passOpennetPeersThroughDarknetLong=????,
??????(opennet)??????(??????????)??????????(darknet)????.
?????(??????????)??????????????????. ??????, ???????????, ???????????,
?????????????????. ????????????????, ?????????????.
-Node.port=FNP ?????? (UDP)
+Node.port=FNP ??????(UDP)
+Node.portLong=???????? UDP ????(Freenet ??????)
Node.publishOurPeersLocation=???????????????
Node.publishOurPeersLocationLong=??????????????? ??????????, ?????????????????.
Node.routeAccordingToOurPeersLocation=???????????????????????????
@@ -597,6 +721,8 @@
Node.tooSmallMTU=MTU ??
Node.tooSmallMTULong=?????????????(MTU)??? ${mtu} ???. Freenet ??? MTU ??
${minMTU} ???????????: Freenet ??????, ????????. ?????????????.
Node.tooSmallMTUShort=????: ????? MTU ??, Freenet ??????. ???????.
+Node.withAnnouncement=??????????????????
+Node.withAnnouncementLong=???????????????????? ???????????, ???????????.
NodeClientCore.couldNotFindOrCreateDir=?????????
NodeClientCore.downloadAllowedDirs=?????????
NodeClientCore.downloadAllowedDirsLong=?????????????, ??????. ???? downloads
?????????, ???????????????????, ??? all ??????????????. ??! ????? all ??,
?????????????????, ??????????????!
@@ -714,6 +840,10 @@
PeersSayKeyBlownAlert.intro=????????????????????! ??????????????????????,
?????????????????(?????????)! ?????????????. ???????????????.
PeersSayKeyBlownAlert.short=?????????????????!
PeersSayKeyBlownAlert.titleWithCount=${count} ???: ????????!
+PluginConfig.configFile=??????
+PluginConfig.configFileLong=???????????????
+PluginConfig.installDir=??????
+PluginConfig.installDirLong=???????
PluginManager.cannotSetOnceLoaded=??????????????
PluginManager.loadedOnStartup=????????
PluginManager.loadedOnStartupLong=?????, ???????????, ?????.
@@ -748,7 +878,11 @@
PproxyToadlet.changeReloadOnStartup=??
PproxyToadlet.classNameTitle=????
PproxyToadlet.downloadNotAllowedFromRemoteServer=??????????????.
+PproxyToadlet.fileonly=??????
PproxyToadlet.internalIDTitle=?????
+PproxyToadlet.loadFreenetPlugin=? Freenet ????????
+PproxyToadlet.loadFreenetPluginText=????????????????? Freenet URI.
???????????, ??????????????, ??????????, ????????????.
+PproxyToadlet.loadFreenetURLLabel=????
PproxyToadlet.loadOfficialPlugin=??????
PproxyToadlet.loadOfficialPluginLabel=??????
PproxyToadlet.loadOfficialPluginText=?????? Freenet ???????. ????????????????,
????????.
@@ -875,6 +1009,7 @@
QueueToadlet.remove=??
QueueToadlet.requestNavigation=????
QueueToadlet.restart=??
+QueueToadlet.siteUploadSucceeded=?? freesite ${filename} (${files} ???, ?????
${size}) ??????? Freenet ?. ${link}???${/link}????????.
QueueToadlet.siteUploadSucceededTitle=Freesite ????: ${filename}
QueueToadlet.size=??
QueueToadlet.starting=???
@@ -910,7 +1045,14 @@
ShortOption.parseError=????????????????: ${error}
SimpleToadletServer.advancedMode=?????????
SimpleToadletServer.advancedModeLong=????????????????????. ???????????.
-SimpleToadletServer.cannotChangePortOnTheFly=???????? FProxy ???????
+SimpleToadletServer.allowedFullAccess=? FProxy ??????????(?????)
+SimpleToadletServer.allowedFullAccessLong=???????????(???????, ????)???. ??:
????? fproxy ???????????!
+SimpleToadletServer.allowedHosts=????? FProxy ????????????.
+SimpleToadletServer.allowedHostsLong=???????????? CIDR ???????(??
192.168.0.0/24)???, ?????. ??, ??????????????????????.
+SimpleToadletServer.bindTo=??????
+SimpleToadletServer.bindToLong=??????????
+SimpleToadletServer.cannotChangePortOnTheFly=???????? FProxy ???????
+SimpleToadletServer.couldNotChangeBindTo=???? FProxy ???????: ${error}.
SimpleToadletServer.cssName=??????
SimpleToadletServer.cssNameLong=?? Freenet ???????
SimpleToadletServer.cssOverride=???? CSS ?????(??!)
@@ -931,6 +1073,7 @@
SimpleToadletServer.panicButton=?????????
SimpleToadletServer.panicButtonLong=???????'????', ????????????????, ?????????.
SimpleToadletServer.port=FProxy ????
+SimpleToadletServer.portLong=FProxy ????? TCP ????
SimpleToadletServer.ssl=?? SSL?
SimpleToadletServer.sslLong=??? FProxy ??? SSL
StartupToadlet.entropyErrorContent=?????????... Freenet ???????????.
@@ -995,8 +1138,8 @@
TestnetHandler.cannotEnableDisableOnTheFly=?????????????(testnet)??;
????????????
TestnetHandler.enable=????????(testnet)???(??!)
TestnetHandler.enableLong=?????????(testnet)??(??!). ???????????????????????,
??????????????.
-TestnetHandler.port=????(Testnet)????
-TestnetHandler.portLong=????(Testnet)???? (-1 = listenPort+1000)
+TestnetHandler.port=????(Testnet)?????
+TestnetHandler.portLong=????(Testnet)???????(-1 ??????????? 1000)
TextModeClientInterfaceServer.allowedHosts=??????
TextModeClientInterfaceServer.allowedHostsLong=????????????????????.
???????????: ???, ???????, ??? CIDR ???????(?? 192.168.0.0/24).
TextModeClientInterfaceServer.bindTo=??????
@@ -1008,7 +1151,7 @@
TextModeClientInterfaceServer.ssl=?? SSL?
TextModeClientInterfaceServer.sslLong=???????????????? SSL
TextModeClientInterfaceServer.telnetPortNumber=?????
-TextModeClientInterfaceServer.telnetPortNumberLong=???????????? TCP ????
+TextModeClientInterfaceServer.telnetPortNumberLong=???????????? TCP ????
TimeSkewDetectedUserAlert.shortText=???????????????. Freenet ?????????!
TimeSkewDetectedUserAlert.text=?????????????????. ?????. ??????????, ????????.
?????????????????, ??????, ????????.
TimeSkewDetectedUserAlert.title=???????!
@@ -1046,6 +1189,7 @@
TranslationToadlet.currentTranslationLabel=????
TranslationToadlet.downloadTranslationsFile=????????
TranslationToadlet.hideAlreadyTranslated=???????????
+TranslationToadlet.noCustomTranslations=????????.
TranslationToadlet.originalVersionLabel=?????(????)
TranslationToadlet.reEdit=????????
TranslationToadlet.remove=??
@@ -1147,8 +1291,10 @@
WelcomeToadlet.shutdownDone=Freenet ???????.
WelcomeToadlet.shutdownNode=????
WelcomeToadlet.splitfileErrorLabel=??????
+WelcomeToadlet.startIndexHeader=?????
WelcomeToadlet.subjectHeader=??
WelcomeToadlet.targetBoardHeader=?????
+WelcomeToadlet.testnetWarning=?????(testnet)?????. ???????????!
WelcomeToadlet.testnetWarningTitle=??(????)??
WelcomeToadlet.thanks=???? Freenet.
WelcomeToadlet.threadDumpNotUsingWrapper=???????????, ????????????!
@@ -1165,5 +1311,5 @@
WelcomeToadlet.writtenDatabaseStats=????????????????????????
WrapperConfig.wrapper.java.maxmemory.long=Freenet ???????. ???????????,
Freenet ?????????; ??????????????, ????????. ?????????? Freenet ??????.
WrapperConfig.wrapper.java.maxmemory.short=?????(???MiB)
-?QueueToadlet.siteUploadSucceeded=?? freesite ${filename} (${files} ???, ?????
${size}) ??????? Freenet ?. ${link}???${/link}????????.
+testing.test=??$(test1)??$(test2)??
End
Modified:
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
2008-08-10 09:16:13 UTC (rev 21698)
@@ -204,7 +204,7 @@
DarknetConnectionsToadlet.idleTime=??????????????????
DarknetConnectionsToadlet.idleTimeTitle=???????
DarknetConnectionsToadlet.invalidSignature=??????????????(${error}).
-DarknetConnectionsToadlet.ipAddress=??????, ? <??>:<??> ??
+DarknetConnectionsToadlet.ipAddress=??????, ? <??>:<???> ??
DarknetConnectionsToadlet.ipAddressTitle=??
DarknetConnectionsToadlet.listenOnly=???????: ?????????????, ???????????????.
DarknetConnectionsToadlet.listenOnlyShort=????
@@ -220,7 +220,7 @@
DarknetConnectionsToadlet.noPeersSecondHalf=??,???????????????.
DarknetConnectionsToadlet.noPeersWithHomepageLink=Freenet ???????????????????.
??${link}????${/link}??????????, ?????????.
DarknetConnectionsToadlet.noRefOrURL=???????????????URL. ?????.
-DarknetConnectionsToadlet.nodePortsTitle=???????
+DarknetConnectionsToadlet.nodePortsTitle=????????
DarknetConnectionsToadlet.notConnected=???: ?????, ??????????????
DarknetConnectionsToadlet.notConnectedShort=???
DarknetConnectionsToadlet.opennetFnpPort=????(Opennet) FNP: ${port}/UDP
(??????????, ???"???", ????; ??????????????)
@@ -261,6 +261,7 @@
FProxyToadlet.alertsTitle=??
FProxyToadlet.backToFProxy=${link}???${/link}?? FProxy ??.
FProxyToadlet.backToReferrer=${link}???${/link}??????.
+FProxyToadlet.cantBindPort=Fproxy ???????????!
FProxyToadlet.config=??/??????
FProxyToadlet.configTitle=??
FProxyToadlet.dangerousContentTitle=????????
@@ -287,8 +288,10 @@
FProxyToadlet.largeFileExplanationAndOptions=??? Freenet ???????.
????????????????????, ?? Freenet ?????????????. ???????:
FProxyToadlet.mayChange=(???)
FProxyToadlet.mimeType=MIME ???${mime}
+FProxyToadlet.notEnoughMetaStrings=??????
FProxyToadlet.notFoundTitle=???
FProxyToadlet.openAsText=${link}???${/link}??????????? (???????, ??????????).
+FProxyToadlet.openAsThawIndex=${link}???${/link}?? thaw ?????????(????????!).
FProxyToadlet.openForce=${link}???${/link}????? ${mime} ????????????????.
FProxyToadlet.openForceDisk=${link}???${/link}????????????????.
FProxyToadlet.openPossRSSAsPlainText=${link}???${/link}???????????(? IE7 ??
FF2 ?${bold}??????s${/bold}).
@@ -316,15 +319,20 @@
FProxyToadlet.welcomeTitle=??
FcpServer.allowedHosts=??????(????????)
FcpServer.allowedHostsFullAccess=???????????
+FcpServer.allowedHostsFullAccessLong=???????????????. ??????????????????,
??????. ??, ?????????????????!
FcpServer.allowedHostsLong=???????????IP???????????????????????IP?????CIDR???IP????(?
192.168.0.0/24)?
FcpServer.assumeDownloadDDAIsAllowed=??????? DDA?
FcpServer.assumeDownloadDDAIsAllowedLong=???????????????(DDA)? ???, ?????? DDA
??????? TestDDARequest ??.
FcpServer.assumeUploadDDAIsAllowed=??????? DDA?
FcpServer.assumeUploadDDAIsAllowedLong=???????????????(DDA)? ???, ?????? DDA
??????? TestDDARequest ??.
+FcpServer.bindTo=??????
+FcpServer.bindToLong=FCP ??????????????.
FcpServer.cannotStartOrStopOnTheFly=??????????? FCP ???
+FcpServer.couldNotChangeBindTo=???? FCP ???????: ${error}.
FcpServer.downloadsFileCanCreateCannotReadOrWrite=???????????
FcpServer.downloadsFileDoesNotExistCannotCreate=???????????
FcpServer.downloadsFileExistsCannotReadOrWrite=???????????
+FcpServer.downloadsFileIsDirectory=??????????????: ??????
FcpServer.downloadsFileParentDoesNotExist=???????
FcpServer.downloadsFileUnreadable=???????????
FcpServer.enablePersistentDownload=????????
@@ -336,8 +344,69 @@
FcpServer.isEnabled=??FCP???
FcpServer.isEnabledLong=???? Freenet ?????(FCP)???
FcpServer.portNumber=FCP?
+FcpServer.portNumberLong=FCP ???????? TCP ???
FcpServer.ssl=?? SSL?
FcpServer.sslLong=??? FCP ?????? SSL
+FetchException.longError.1=???????????
+FetchException.longError.10=????????
+FetchException.longError.11=??????? - ???????? ???????
+FetchException.longError.12=???????, ??????????????
+FetchException.longError.13=?????
+FetchException.longError.14=????? - ?????????????????
+FetchException.longError.15=????????????
+FetchException.longError.16=?????? - ???????
+FetchException.longError.17=????, ??????
+FetchException.longError.18=??????, ??????????
+FetchException.longError.19=?????
+FetchException.longError.2=???????????
+FetchException.longError.20=URI ????
+FetchException.longError.21=????
+FetchException.longError.22=??????
+FetchException.longError.23=??????????
+FetchException.longError.24=?? URI ?????????(????)
+FetchException.longError.25=???
+FetchException.longError.26=??????
+FetchException.longError.27=?????: ???? URI
+FetchException.longError.28=????????; ??????????, ???????????
+FetchException.longError.29=??? MIME ??: ??????????????????
+FetchException.longError.3=????????????
+FetchException.longError.30=??????????, ??????????????????, ???????.
+FetchException.longError.4=????????
+FetchException.longError.5=???????????
+FetchException.longError.6=???????
+FetchException.longError.7=?????????????
+FetchException.longError.8=???????????????????
+FetchException.longError.9=??(??)????
+FetchException.shortError.1=???????
+FetchException.shortError.10=??????
+FetchException.shortError.11=???????
+FetchException.shortError.12=?????
+FetchException.shortError.13=?????
+FetchException.shortError.14=?????
+FetchException.shortError.15=?????
+FetchException.shortError.16=??????
+FetchException.shortError.17=????
+FetchException.shortError.18=????
+FetchException.shortError.19=?????
+FetchException.shortError.2=??????????
+FetchException.shortError.20=URI ????
+FetchException.shortError.21=????
+FetchException.shortError.22=??????
+FetchException.shortError.23=??????????
+FetchException.shortError.24=??????
+FetchException.shortError.25=??????
+FetchException.shortError.26=??????
+FetchException.shortError.27=?? URI
+FetchException.shortError.28=???????
+FetchException.shortError.29=??? MIME ??
+FetchException.shortError.3=???????
+FetchException.shortError.30=?????(??????)
+FetchException.shortError.4=????????
+FetchException.shortError.5=?????
+FetchException.shortError.6=??????
+FetchException.shortError.7=??????????
+FetchException.shortError.8=?????????
+FetchException.shortError.9=?????
FileOffer.acceptTransferButton=????
FileOffer.askUserTitle=??????
FileOffer.commentLabel=??:
@@ -420,10 +489,35 @@
HTMLFilter.tooManyNestedStyleOrScriptTagsLong=?? </style> ????? -
?????????????, ?????????, ???????????? - ????????????????
HTMLFilter.unknownTag=????? ${tag}
IPDetectorPluginManager.connectionProblems=????:
+IPDetectorPluginManager.direct=????????????????. ??, ????????????? Freenet ??.
+IPDetectorPluginManager.directTitle=???????????
+IPDetectorPluginManager.forwardPortMaybeForwarded=?????????????????(NAT,
????????)??. ??????, ???????? UDP (?? TCP) ??? ${port}, ???????. ??????????;
Freenet ?????????????. ????????${link}??${/link}.
+IPDetectorPluginManager.forwardPortNotForwarded=?????????????????(NAT,
????????)??. ??????, ???????? UDP (?? TCP) ??? ${port}, ???????. ????????????,
?? Freenet ????. ????????${link}??${/link}.
IPDetectorPluginManager.forwardPortShortMaybeForwarded=?? UDP ? ${port} ????
(?????????).
IPDetectorPluginManager.forwardPortShortNotForwarded=?? UDP ? ${port} ????
(???????).
+IPDetectorPluginManager.forwardTwoPortsMaybeForwarded=?????????????????(NAT,
????????)??. ??????, ???????? UDP (?? TCP) ??? ${port1} ? ${port2}, ???????.
??????????; Freenet ?????????????. ????????${link}??${/link}.
+IPDetectorPluginManager.forwardTwoPortsNotForwarded=?????????????????(NAT,
????????)??. ??????, ???????? UDP (?? TCP) ??? ${port1} ? ${port2}, ???????.
????????????, ?? Freenet ????. ????????${link}??${/link}.
IPDetectorPluginManager.forwardTwoPortsShortMaybeForwarded=?? UDP ? ${port1} ?
${port2} ???? (?????????).
IPDetectorPluginManager.forwardTwoPortsShortNotForwarded=?? UDP ? ${port1} and
${port2} ???? (???????).
+IPDetectorPluginManager.fullCone=???????????????"??????"??????(NAT). ??,
????????????? Freenet ??.
+IPDetectorPluginManager.fullConeTitle=??????????????
+IPDetectorPluginManager.maybeAlreadyForwarded=?????????(Freenet ???????).
+IPDetectorPluginManager.noConnectivity=??????????????? UDP. ??????, ?? Freenet
????????????.
+IPDetectorPluginManager.noConnectivityTitle=?? UDP ????
+IPDetectorPluginManager.noConnectivityshort=???????: ?? UDP ????, Freenet ????!
+IPDetectorPluginManager.portForwardHelpURL=http://wiki.freenetproject.org/FirewallAndRouterIssues
+IPDetectorPluginManager.portRestricted=??????????????????????????????(NAT)?????.
?????????????, ??????????????????????.
+IPDetectorPluginManager.portRestrictedTitle=?????????????????
+IPDetectorPluginManager.restricted=?????????????"??????"??????(NAT).
???????????????.
+IPDetectorPluginManager.restrictedTitle=??????????????
+IPDetectorPluginManager.seriousConnectionProblems=???????:
+IPDetectorPluginManager.suggestForwardPort=??????????????(UDP ?? ${port}). (??
http://wiki.freenetproject.org/FirewallAndRouterIssues ).
+IPDetectorPluginManager.suggestForwardPortWithLink=?????????${link}?????${/link}(UDP
?? ${port}) (??????????, Freenet ???????).
+IPDetectorPluginManager.suggestForwardTwoPorts=Y??????????????(UDP ?? ${port1}
? ${port2}). (?? http://wiki.freenetproject.org/FirewallAndRouterIssues ).
+IPDetectorPluginManager.suggestForwardTwoPortsWithLink=?????????${link}?????${/link}(UDP
?? ${port1} ? ${port2}) (??????????, Freenet ???????).
+IPDetectorPluginManager.symmetric=?????????????????????????(NAT)?????.
????????????????????, ??????????????????????.
+IPDetectorPluginManager.symmetricPS=????????????????(NAT)??, ?????????,
??????????????, ????????????????!
+IPDetectorPluginManager.symmetricTitle=?????????
IPUndetectedUserAlert.detecting=Freenet ??????????. ????????????, ???????...
IPUndetectedUserAlert.detectingShort=Freenet ??????????.
IPUndetectedUserAlert.detectingWithConfigLink=Freenet ??????????.
????????????, ???????, ???????${link}??${/link}???????.
@@ -433,8 +527,30 @@
IPUndetectedUserAlert.unknownAddressShort=Freenet ????????????. ?????????.
IPUndetectedUserAlert.unknownAddressTitle=??????
IPUndetectedUserAlert.unknownAddressWithConfigLink=Freenet
??????????????(??????(NAT)???????????). ???????????????,
??????????????????????????????. ????????????, Freenet ??????????????.
??????????, ?'????????????'${link}????${/link}???????.
+InsertException.longError.1=?????? URI ????
+InsertException.longError.10=???????
+InsertException.longError.11=? URI ????????(???? '/' ??)
+InsertException.longError.12=?????????
+InsertException.longError.2=???????: ?????????????
+InsertException.longError.3=????
+InsertException.longError.4=?????????????
+InsertException.longError.5=????????????????(????????, ????????)
+InsertException.longError.6=???????????????
+InsertException.longError.7=???????: ??????(?????????)
+InsertException.longError.8=????????????
+InsertException.longError.9=??????????????????????
+InsertException.shortError.1=URI ????
InsertException.shortError.10=???
+InsertException.shortError.11=????????
+InsertException.shortError.12=?????????
+InsertException.shortError.2=?????
InsertException.shortError.3=????
+InsertException.shortError.4=?????
+InsertException.shortError.5=?????
+InsertException.shortError.6=????????????
+InsertException.shortError.7=??????????
+InsertException.shortError.8=????????
+InsertException.shortError.9=???????
IntOption.parseError=??????????? 32 ???? : ${val}
InvalidAddressOverrideUserAlert.unknownAddress=Freenet ??????
ipAddressOverride ??????, ?????????????????, IPv4 ??, ?? IPv6 ?????(IPv6
??????????????????).
InvalidAddressOverrideUserAlert.unknownAddressShort=???? ipAddressOverride
???. ???????.
@@ -515,7 +631,11 @@
Node.acceptSeedConnectionsShort=???????
Node.alwaysAllowLocalAddresses=???????????????????
Node.alwaysAllowLocalAddressesLong=???, ???????????, ???????????????,
?????????(???????)????. ????, ???????????????(??????????)??????.
???????????????, ?????????????????? UDP ???????????, ?????.
+Node.assumeNATed=??????????.
+Node.assumeNATedLong=???????????????????(NAT)????????, ???????????,
????????????(? 10 ? 30 ???)?
Node.bandwidthLimitMustBePositiveOrMinusOne=??????????? -1
+Node.bindTo=??????
+Node.bindToLong=????? IP ??
Node.buggyJVM=????? JVM ??(${version})?????. ?????????, ??????
OutOfMemoryError ??. ?????? Sun ???? Java 1.4.2_13 ?, 1.5.0_10 ?, ?? 1.6
?(????). ???? http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4855795 .
Node.buggyJVMShort=Freenet ???? Java ?? ${version} ??????. ?????, ??????? Java
?????????.
Node.buggyJVMTitle=JVM ????
@@ -527,11 +647,14 @@
Node.deadlockWarning=??: ???????? NPTL ????? Sun JVM. ???????? JVM
?????????????. ????????????? LD_ASSUME_KERNEL ? 2.4.1 ??? NPTL. ????? Freenet
????????????; ???????, ?????? run.sh
(https://emu.freenetproject.org/svn/trunk/apps/installer/installclasspath/run.sh)
?????. ???????????? pthreads ?????? JVM ??. ?????, ??????????, ??????????,
????????? 100% ??, ????????????.
Node.disableHangCheckers=?????????
Node.disableHangCheckersLong=??????????????. ????? Fred ???????????????.
-Node.disablePHTLSLong=Disable probabilistic HTL (???????, ???????????)
+Node.disablePHTLS=?? probabilistic HTL
+Node.disablePHTLSLong=?? probabilistic HTL (???????, ???????????)
Node.dropPacketEvery=????????
Node.dropPacketEveryLong=???????. ???????????, ????????. 0 ??????????. ???????!
Node.enableARKs=?? ARKs? (????!)
Node.enableARKsLong=???? ARKs? (??????!).
+Node.enablePacketCoalescing=???????
+Node.enablePacketCoalescingLong=?????????? ??????????????, ?? CPU ???,
?????????????, ??????????????. ???????????, ??????.
Node.enablePerNodeFailureTables=??????????????
Node.enablePerNodeFailureTablesLong=?????? 10 ???????????????????
Node.enableSwapQueueing=??????????? (????!)
@@ -577,7 +700,8 @@
Node.outBWLimitLong=?????????(????????); ????????????????
Node.passOpennetPeersThroughDarknet=???????????????????
Node.passOpennetPeersThroughDarknetLong=????,
??????(opennet)??????(??????????)??????????(darknet)????.
?????(??????????)??????????????????. ??????, ???????????, ???????????,
?????????????????. ????????????????, ?????????????.
-Node.port=FNP ????? (UDP)
+Node.port=FNP ?????(UDP)
+Node.portLong=???????? UDP ???(Freenet ??????)
Node.publishOurPeersLocation=???????????????
Node.publishOurPeersLocationLong=??????????????? ??????????, ?????????????????.
Node.routeAccordingToOurPeersLocation=???????????????????????????
@@ -596,6 +720,8 @@
Node.tooSmallMTU=MTU ??
Node.tooSmallMTULong=?????????????(MTU)??? ${mtu} ????. Freenet ??? MTU ??
${minMTU} ????????????: Freenet ??????, ????????. ?????????????.
Node.tooSmallMTUShort=????: ????? MTU ??, Freenet ??????. ???????.
+Node.withAnnouncement=??????????????????
+Node.withAnnouncementLong=???????????????????? ???????????, ???????????.
NodeClientCore.couldNotFindOrCreateDir=?????????
NodeClientCore.downloadAllowedDirs=?????????
NodeClientCore.downloadAllowedDirsLong=?????????????, ??????. ???? downloads
?????????, ???????????????????, ??? all ??????????????. ??! ????? all ??,
?????????????????, ?????????????!
@@ -713,6 +839,10 @@
PeersSayKeyBlownAlert.intro=????????????????????! ??????????????????????,
?????????????????(?????????)! ?????????????. ???????????????.
PeersSayKeyBlownAlert.short=?????????????????!
PeersSayKeyBlownAlert.titleWithCount=${count} ???: ????????!
+PluginConfig.configFile=?????
+PluginConfig.configFileLong=?????????????
+PluginConfig.installDir=??????
+PluginConfig.installDirLong=???????
PluginManager.cannotSetOnceLoaded=??????????????
PluginManager.loadedOnStartup=????????
PluginManager.loadedOnStartupLong=?????, ???????????, ?????.
@@ -747,7 +877,11 @@
PproxyToadlet.changeReloadOnStartup=??
PproxyToadlet.classNameTitle=????
PproxyToadlet.downloadNotAllowedFromRemoteServer=????????????????.
+PproxyToadlet.fileonly=??????
PproxyToadlet.internalIDTitle=?????
+PproxyToadlet.loadFreenetPlugin=? Freenet ??????????
+PproxyToadlet.loadFreenetPluginText=????????????????? Freenet URI.
???????????, ??????????????, ??????????, ????????????.
+PproxyToadlet.loadFreenetURLLabel=????
PproxyToadlet.loadOfficialPlugin=??????
PproxyToadlet.loadOfficialPluginLabel=??????
PproxyToadlet.loadOfficialPluginText=???????? Freenet ???????.
????????????????, ????????.
@@ -910,7 +1044,14 @@
ShortOption.parseError=???????????????: ${error}
SimpleToadletServer.advancedMode=?????????
SimpleToadletServer.advancedModeLong=????????????????????. ???????????.
-SimpleToadletServer.cannotChangePortOnTheFly=???????? FProxy ??????
+SimpleToadletServer.allowedFullAccess=? FProxy ??????????(?????)
+SimpleToadletServer.allowedFullAccessLong=???????????(???????, ????)???. ??:
????? fproxy ???????????!
+SimpleToadletServer.allowedHosts=????? FProxy ?????????????.
+SimpleToadletServer.allowedHostsLong=????????????? CIDR ???????(??
192.168.0.0/24)???, ?????. ??, ??????????????????????.
+SimpleToadletServer.bindTo=??????
+SimpleToadletServer.bindToLong=???????????
+SimpleToadletServer.cannotChangePortOnTheFly=???????? FProxy ??????
+SimpleToadletServer.couldNotChangeBindTo=???? FProxy ???????: ${error}.
SimpleToadletServer.cssName=??????
SimpleToadletServer.cssNameLong=?? Freenet ?????????
SimpleToadletServer.cssOverride=???? CSS ?????(??!)
@@ -931,6 +1072,7 @@
SimpleToadletServer.panicButton=?????????
SimpleToadletServer.panicButtonLong=???????'????', ????????????????, ?????????.
SimpleToadletServer.port=FProxy ???
+SimpleToadletServer.portLong=FProxy ????? TCP ???
SimpleToadletServer.ssl=?? SSL?
SimpleToadletServer.sslLong=??? FProxy ??? SSL
StartupToadlet.entropyErrorContent=?????????... Freenet ???????????.
@@ -995,8 +1137,8 @@
TestnetHandler.cannotEnableDisableOnTheFly=?????????????(testnet)??;
????????????
TestnetHandler.enable=????????(testnet)???(??!)
TestnetHandler.enableLong=?????????(testnet)??(??!). ???????????????????????,
??????????????.
-TestnetHandler.port=????(Testnet)???
-TestnetHandler.portLong=????(Testnet)??? (-1 = listenPort+1000)
+TestnetHandler.port=????(Testnet)????
+TestnetHandler.portLong=????(Testnet)??????(-1 ?????????? 1000)
TextModeClientInterfaceServer.allowedHosts=??????
TextModeClientInterfaceServer.allowedHostsLong=??????????????????????.
???????????: ????, ????????, ??? CIDR ???????(?? 192.168.0.0/24).
TextModeClientInterfaceServer.bindTo=??????
@@ -1008,7 +1150,7 @@
TextModeClientInterfaceServer.ssl=?? SSL?
TextModeClientInterfaceServer.sslLong=???????????????? SSL
TextModeClientInterfaceServer.telnetPortNumber=?????
-TextModeClientInterfaceServer.telnetPortNumberLong=???????????? TCP ????
+TextModeClientInterfaceServer.telnetPortNumberLong=???????????? TCP ???
TimeSkewDetectedUserAlert.shortText=???????????????. Freenet ?????????!
TimeSkewDetectedUserAlert.text=?????????????????. ?????. ??????????, ????????.
?????????????????, ??????, ????????.
TimeSkewDetectedUserAlert.title=???????!
@@ -1046,6 +1188,7 @@
TranslationToadlet.currentTranslationLabel=????
TranslationToadlet.downloadTranslationsFile=????????
TranslationToadlet.hideAlreadyTranslated=??????????
+TranslationToadlet.noCustomTranslations=???????.
TranslationToadlet.originalVersionLabel=????(????)
TranslationToadlet.reEdit=????????
TranslationToadlet.remove=??
@@ -1147,8 +1290,10 @@
WelcomeToadlet.shutdownDone=Freenet ???????.
WelcomeToadlet.shutdownNode=????
WelcomeToadlet.splitfileErrorLabel=??????
+WelcomeToadlet.startIndexHeader=?????
WelcomeToadlet.subjectHeader=??
WelcomeToadlet.targetBoardHeader=?????
+WelcomeToadlet.testnetWarning=?????(testnet)?????. ???????????!
WelcomeToadlet.testnetWarningTitle=??(????)??
WelcomeToadlet.thanks=???? Freenet.
WelcomeToadlet.threadDumpNotUsingWrapper=???????????, ?????????????!
@@ -1165,4 +1310,5 @@
WelcomeToadlet.writtenDatabaseStats=???????????????????????
WrapperConfig.wrapper.java.maxmemory.long=Freenet ????????. ???????????,
Freenet ??????????; ??????????????, ????????. ?????????? Freenet ??????.
WrapperConfig.wrapper.java.maxmemory.short=??????(?????MiB)
+testing.test=??$(test1)??$(test2)??
End
Modified: branches/saltedhashstore/freenet/src/freenet/node/Announcer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Announcer.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/Announcer.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -110,7 +110,7 @@
boolean announceNow = false;
if(logMINOR)
Logger.minor(this, "Connecting some seednodes...");
- Vector/*<SimpleFieldSet>*/ seeds = readSeednodes();
+ Vector/*<SimpleFieldSet>*/ seeds =
Announcer.readSeednodes(node.nodeDir);
long now = System.currentTimeMillis();
synchronized(this) {
if(now - timeAddedSeeds < MIN_ADDED_SEEDS_INTERVAL)
return;
@@ -212,10 +212,8 @@
return count;
}
- private Vector readSeednodes() {
- if(logMINOR)
- Logger.minor(this, "Reading seednodes");
- File file = new File(node.nodeDir, "seednodes.fref");
+ public static Vector readSeednodes(File nodeDir) {
+ File file = new File(nodeDir, "seednodes.fref");
Vector list = new Vector();
FileInputStream fis = null;
try {
@@ -316,9 +314,7 @@
if(runningAnnouncements > 0)
return;
}
if(enoughPeers()) {
- Vector seeds =
node.peers.getConnectedSeedServerPeersVector(null);
- for(int i=0;i<seeds.size();i++)
{
- SeedServerPeerNode pn =
(SeedServerPeerNode) seeds.get(i);
+ for(SeedServerPeerNode pn :
node.peers.getConnectedSeedServerPeersVector(null)) {
node.peers.disconnect(pn, true, true);
}
// Re-check every minute.
Something bad might happen (e.g. cpu starvation), causing us to have to reseed.
@@ -375,14 +371,14 @@
return;
}
// Now find a node to announce to
- Vector seeds =
node.peers.getConnectedSeedServerPeersVector(announcedToIdentities);
+ Vector<SeedServerPeerNode> seeds =
node.peers.getConnectedSeedServerPeersVector(announcedToIdentities);
while(sentAnnouncements < WANT_ANNOUNCEMENTS) {
if(seeds.isEmpty()) {
if(logMINOR)
Logger.minor(this, "No more
seednodes, announcedTo = "+announcedToIdentities.size());
break;
}
- final SeedServerPeerNode seed =
(SeedServerPeerNode) seeds.remove(node.random.nextInt(seeds.size()));
+ final SeedServerPeerNode seed =
seeds.remove(node.random.nextInt(seeds.size()));
InetAddress[] addrs = seed.getInetAddresses();
if(!newAnnouncedIPs(addrs)) {
if(logMINOR)
@@ -424,18 +420,32 @@
announcedToIPs.add(addrs[i]);
}
+ /**
+ * Have we already announced to this node?
+ * Return true if the node has new non-local addresses we haven't
announced to.
+ * Return false if the node has non-local addresses we have announced
to.
+ * Return true if the node has no non-local addresses.
+ * @param addrs
+ * @return
+ */
private synchronized boolean newAnnouncedIPs(InetAddress[] addrs) {
+ boolean hasNonLocalAddresses = false;
for(int i=0;i<addrs.length;i++) {
if(!IPUtil.isValidAddress(addrs[i], false))
continue;
+ hasNonLocalAddresses = true;
if(!announcedToIPs.contains(addrs[i]))
return true;
}
- return false;
+ return !hasNonLocalAddresses;
}
public void sendAnnouncement(final SeedServerPeerNode seed) {
- if(!node.isOpennetEnabled()) return;
+ if(!node.isOpennetEnabled()) {
+ if(logMINOR)
+ Logger.minor(this, "Not announcing to "+seed+"
because opennet is disabled");
+ return;
+ }
System.out.println("Announcement to "+seed.userToString()+"
starting...");
if(logMINOR)
Logger.minor(this, "Announcement to
"+seed.userToString()+" starting...");
Modified:
branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/FNPPacketMangler.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -314,7 +314,7 @@
}
}
if(node.wantAnonAuth()) {
- if(tryProcessAuthAnon(buf, offset, length, peer, now))
return;
+ if(tryProcessAuthAnon(buf, offset, length, peer))
return;
}
if(LOG_UNMATCHABLE_ERROR)
System.err.println("Unmatchable packet from "+peer+" on
"+node.getDarknetPortNumber());
@@ -339,7 +339,12 @@
int ivLength = pcfb.lengthIV();
int digestLength = HASH_LENGTH;
if(length < digestLength + ivLength + 4) {
- if(logMINOR) Logger.minor(this, "Too short: "+length+"
should be at least "+(digestLength + ivLength + 4));
+ if(logMINOR) {
+ if(buf.length < length)
+ Logger.debug(this, "The packet is
smaller than the decrypted size: it's probably the wrong tracker
("+buf.length+'<'+length+')');
+ else
+ Logger.minor(this, "Too short:
"+length+" should be at least "+(digestLength + ivLength + 4));
+ }
return false;
}
// IV at the beginning
@@ -395,7 +400,7 @@
* @param now The time at which the packet was received
* @return True if we handled a negotiation packet, false otherwise.
*/
- private boolean tryProcessAuthAnon(byte[] buf, int offset, int length,
Peer peer, long now) {
+ private boolean tryProcessAuthAnon(byte[] buf, int offset, int length,
Peer peer) {
BlockCipher authKey = crypto.getAnonSetupCipher();
// Does the packet match IV E( H(data) data ) ?
PCFBMode pcfb = PCFBMode.create(authKey);
@@ -971,7 +976,7 @@
}
// At this point we know it's from the peer, so we can report a
packet received.
- pn.receivedPacket(true);
+ pn.receivedPacket(true, false);
sendJFKMessage3(1, 2, 3, nonceInitiator, nonceResponder,
hisExponential, authenticator, pn, replyTo, unknownInitiator, setupType);
@@ -1148,7 +1153,7 @@
}
// At this point we know it's from the peer, so we can report a
packet received.
- pn.receivedPacket(true);
+ pn.receivedPacket(true, false);
// Send reply
sendJFKMessage4(1, 2, 3, nonceInitiator,
nonceResponder,initiatorExponential, responderExponential,
@@ -1949,8 +1954,9 @@
tracker.destForgotPacket(realSeqNo);
}
- tracker.pn.receivedPacket(false); // Must keep the connection
open, even if it's an ack packet only and on an incompatible connection - we
may want to do a UOM transfer e.g.
-
+ tracker.pn.receivedPacket(false, true); // Must keep the
connection open, even if it's an ack packet only and on an incompatible
connection - we may want to do a UOM transfer e.g.
+// System.err.println(tracker.pn.getIdentityString()+" : received
packet");
+
// No sequence number == no messages
if((seqNumber != -1) && tracker.alreadyReceived(seqNumber)) {
@@ -2581,6 +2587,7 @@
// pn.getPeer() cannot be null
try {
sendPacket(output, kt.pn.getPeer(), kt.pn,
alreadyReportedBytes);
+// System.err.println(kt.pn.getIdentityString()+" : sent
packet length "+output.length);
} catch (LocalAddressException e) {
Logger.error(this, "Tried to send data packet to local
address: "+kt.pn.getPeer()+" for "+kt.pn.allowLocalAddresses());
}
Modified: branches/saltedhashstore/freenet/src/freenet/node/KeyTracker.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/KeyTracker.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/KeyTracker.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -567,7 +567,7 @@
* @throws UpdatableSortedLinkedListKilledException
*/
private void removeAckRequest(int seqNo) throws
UpdatableSortedLinkedListKilledException {
- QueuedAckRequest qr =
(QueuedAckRequest)ackRequestQueue.removeByKey(Integer.valueOf(seqNo));
+ QueuedAckRequest qr =
(QueuedAckRequest)ackRequestQueue.removeByKey(seqNo);
if(qr != null) qr.onAcked();
else
Logger.normal(this, "Removing ack request twice? Null on
"+seqNo+" from "+pn.getPeer()+" ("+TimeUtil.formatTime((int)
pn.averagePingTime(), 2, true)+" ping avg)");
@@ -584,7 +584,7 @@
if(resendData.length > Node.PACKET_SIZE)
pn.getThrottle().notifyOfPacketLost();
synchronized(packetsToResend) {
- packetsToResend.add(Integer.valueOf(seqNumber));
+ packetsToResend.add(seqNumber);
}
pn.node.ps.wakeUp();
} else {
Modified:
branches/saltedhashstore/freenet/src/freenet/node/LowLevelGetException.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/LowLevelGetException.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/LowLevelGetException.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -32,7 +32,7 @@
/** Ran into a failure table */
public static final int RECENTLY_FAILED = 10;
- static final String getMessage(int reason) {
+ public static final String getMessage(int reason) {
switch(reason) {
case DECODE_FAILED:
return "Decode of data failed, probably was bogus at
source";
Modified: branches/saltedhashstore/freenet/src/freenet/node/Node.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-08-10
09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-08-10
09:16:13 UTC (rev 21698)
@@ -389,6 +389,7 @@
private final NodeCryptoConfig opennetCryptoConfig;
private OpennetManager opennet;
+ private volatile boolean isAllowedToConnectToSeednodes;
private int maxOpennetPeers;
private boolean acceptSeedConnections;
private boolean passOpennetRefsThroughDarknet;
@@ -612,10 +613,12 @@
* @param random The random number generator for this node. Passed in
because we may want
* to use a non-secure RNG for e.g. one-JVM live-code simulations.
Should be a Yarrow in
* a production node. Yarrow will be used if that parameter is null
+ * @param weakRandom The fast random number generator the node will
use. If null a MT
+ * instance will be used, seeded from the secure PRNG.
* @param the loggingHandler
* @throws NodeInitException If the node initialization fails.
*/
- Node(PersistentConfig config, RandomSource r, LoggingConfigHandler lc,
NodeStarter ns, Executor executor) throws NodeInitException {
+ Node(PersistentConfig config, RandomSource r, RandomSource weakRandom,
LoggingConfigHandler lc, NodeStarter ns, Executor executor) throws
NodeInitException {
// Easy stuff
logMINOR = Logger.shouldLog(Logger.MINOR, this);
String tmp = "Initializing Node using Freenet Build
#"+Version.buildNumber()+" r"+Version.cvsRevision+" and freenet-ext Build
#"+NodeStarter.extBuildNumber+" r"+NodeStarter.extRevisionNumber+" with
"+System.getProperty("java.vendor")+" JVM version
"+System.getProperty("java.version")+" running on
"+System.getProperty("os.arch")+' '+System.getProperty("os.name")+'
'+System.getProperty("os.version");
@@ -680,8 +683,11 @@
}
});
- for(File currentDir : subDirs)
- recurse(currentDir);
+
+ // @see
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5086412
+ if(subDirs != null)
+ for(File currentDir : subDirs)
+ recurse(currentDir);
}
public void run() {
@@ -696,13 +702,17 @@
entropyGatheringThread.start();
this.random = new Yarrow();
DiffieHellman.init(random);
+
} else // if it's not null it's because we are running in the
simulator
this.random = r;
isPRNGReady = true;
toadlets.getStartupToadlet().setIsPRNGReady();
- byte buffer[] = new byte[16];
- random.nextBytes(buffer);
- this.fastWeakRandom = new MersenneTwister(buffer);
+ if(weakRandom == null) {
+ byte buffer[] = new byte[16];
+ random.nextBytes(buffer);
+ this.fastWeakRandom = new MersenneTwister(buffer);
+ }else
+ this.fastWeakRandom = weakRandom;
nodeNameUserAlert = new MeaningfulNodeNameUserAlert(this);
recentlyCompletedIDs = new LRUQueue();
@@ -1131,6 +1141,21 @@
// Opennet
final SubConfig opennetConfig = new SubConfig("node.opennet",
config);
+ opennetConfig.register("connectToSeednodes", true, 0, true,
false, "Node.withAnnouncement", "Node.withAnnouncementLong", new
BooleanCallback() {
+ public boolean get() {
+ return isAllowedToConnectToSeednodes;
+ }
+ public void set(boolean val) throws
InvalidConfigValueException {
+ if(val == get()) return;
+ synchronized(Node.this) {
+ if(opennet != null)
+ throw new
InvalidConfigValueException("Can't change that setting on the fly when opennet
is already active!");
+ else
+ isAllowedToConnectToSeednodes =
val;
+ }
+ }
+ });
+ isAllowedToConnectToSeednodes =
opennetConfig.getBoolean("connectToSeednodes");
// Can be enabled on the fly
opennetConfig.register("enabled", false, 0, false, true,
"Node.opennetEnabled", "Node.opennetEnabledLong", new BooleanCallback() {
@@ -1145,7 +1170,7 @@
if(val == (opennet != null)) return;
if(val) {
try {
- o = opennet = new
OpennetManager(Node.this, opennetCryptoConfig, System.currentTimeMillis());
+ o = opennet = new
OpennetManager(Node.this, opennetCryptoConfig, System.currentTimeMillis(),
isAllowedToConnectToSeednodes);
} catch (NodeInitException e) {
opennet = null;
throw new
InvalidConfigValueException(e.getMessage());
@@ -1159,8 +1184,7 @@
else o.stop(true);
ipDetector.ipDetectorManager.notifyPortChange(getPublicInterfacePorts());
}
- });
-
+ });
boolean opennetEnabled = opennetConfig.getBoolean("enabled");
opennetConfig.register("maxOpennetPeers", "20", 1, true, false,
"Node.maxOpennetPeers",
@@ -1185,7 +1209,7 @@
opennetCryptoConfig = new NodeCryptoConfig(opennetConfig, 2 /*
0 = enabled */, true);
if(opennetEnabled) {
- opennet = new OpennetManager(this, opennetCryptoConfig,
System.currentTimeMillis());
+ opennet = new OpennetManager(this, opennetCryptoConfig,
System.currentTimeMillis(), isAllowedToConnectToSeednodes);
// Will be started later
} else {
opennet = null;
@@ -2899,6 +2923,10 @@
return false;
}
+ public synchronized boolean isOudated() {
+ return (buildOldAgeUserAlert.lastGoodVersion > 0);
+ }
+
/**
* Handle a received node to node message
*/
@@ -3177,6 +3205,9 @@
/**
* Connect this node to another node (for purposes of testing)
*/
+ public void connectToSeednode(SeedServerTestPeerNode node) throws
OpennetDisabledException, FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
+ peers.addPeer(node,false,false);
+ }
public void connect(Node node) throws FSParseException,
PeerParseException, ReferenceSignatureVerificationException {
peers.connect(node.darknetCrypto.exportPublicFieldSet(),
darknetCrypto.packetMangler);
}
@@ -3234,6 +3265,11 @@
return new OpennetPeerNode(fs, this, opennet.crypto, opennet,
peers, false, opennet.crypto.packetMangler);
}
+ public SeedServerTestPeerNode
createNewSeedServerTestPeerNode(SimpleFieldSet fs) throws FSParseException,
OpennetDisabledException, PeerParseException,
ReferenceSignatureVerificationException {
+ if(opennet == null) throw new OpennetDisabledException("Opennet
is not currently enabled");
+ return new SeedServerTestPeerNode(fs, this, opennet.crypto,
peers, true, opennet.crypto.packetMangler);
+ }
+
public OpennetPeerNode addNewOpennetNode(SimpleFieldSet fs) throws
FSParseException, PeerParseException, ReferenceSignatureVerificationException {
// FIXME: perhaps this should throw OpennetDisabledExcemption
rather than returing false?
if(opennet == null) return null;
Modified: branches/saltedhashstore/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/NodeClientCore.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/NodeClientCore.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -76,7 +76,6 @@
private final HealingQueue healingQueue;
/** Must be included as a hidden field in order for any dangerous HTTP
operation to complete successfully. */
public final String formPassword;
-
File downloadDir;
private File[] downloadAllowedDirs;
private boolean includeDownloadDir;
@@ -88,12 +87,9 @@
public final Node node;
final NodeStats nodeStats;
public final RandomSource random;
- final File tempDir;
-
- // Persistent temporary buckets
+ final File tempDir; // Persistent temporary buckets
public final PersistentTempBucketFactory persistentTempBucketFactory;
public final PersistentEncryptedTempBucketFactory
persistentEncryptedTempBucketFactory;
-
public final UserAlertManager alerts;
final TextModeClientInterfaceServer tmci;
TextModeClientInterface directTMCI;
@@ -105,16 +101,12 @@
private boolean lazyResume;
protected final Persister persister;
private final SerialExecutor clientSlowSerialExecutor[];
-
- public static int maxBackgroundUSKFetchers;
-
- // Client stuff that needs to be configged - FIXME
+ public static int maxBackgroundUSKFetchers; // Client stuff that
needs to be configged - FIXME
static final int MAX_ARCHIVE_HANDLERS = 200; // don't take up much
RAM... FIXME
- static final long MAX_CACHED_ARCHIVE_DATA = 32*1024*1024; // make a
fixed fraction of the store by default? FIXME
- static final long MAX_ARCHIVE_SIZE = 2*1024*1024; // ??? FIXME
- static final long MAX_ARCHIVED_FILE_SIZE = 1024*1024; // arbitrary...
FIXME
- static final int MAX_CACHED_ELEMENTS = 256*1024; // equally arbitrary!
FIXME hopefully we can cache many of these though
-
+ static final long MAX_CACHED_ARCHIVE_DATA = 32 * 1024 * 1024; // make a
fixed fraction of the store by default? FIXME
+ static final long MAX_ARCHIVE_SIZE = 2 * 1024 * 1024; // ??? FIXME
+ static final long MAX_ARCHIVED_FILE_SIZE = 1024 * 1024; // arbitrary...
FIXME
+ static final int MAX_CACHED_ELEMENTS = 256 * 1024; // equally
arbitrary! FIXME hopefully we can cache many of these though
private UserAlert startingUpAlert;
NodeClientCore(Node node, Config config, SubConfig nodeConfig, File
nodeDir, int portNumber, int sortOrder, SimpleFieldSet oldConfig, SubConfig
fproxyConfig, SimpleToadletServer toadlets) throws NodeInitException {
@@ -122,81 +114,91 @@
this.nodeStats = node.nodeStats;
this.random = node.random;
this.backgroundBlockEncoder = new BackgroundBlockEncoder();
- clientSlowSerialExecutor = new
SerialExecutor[RequestStarter.MINIMUM_PRIORITY_CLASS-RequestStarter.MAXIMUM_PRIORITY_CLASS+1];
- for(int i=0;i<clientSlowSerialExecutor.length;i++) {
+ clientSlowSerialExecutor = new
SerialExecutor[RequestStarter.MINIMUM_PRIORITY_CLASS -
RequestStarter.MAXIMUM_PRIORITY_CLASS + 1];
+ for(int i = 0; i < clientSlowSerialExecutor.length; i++) {
int prio;
- if(i <=
RequestStarter.IMMEDIATE_SPLITFILE_PRIORITY_CLASS) prio =
NativeThread.NORM_PRIORITY;
- else if(i <= RequestStarter.UPDATE_PRIORITY_CLASS) prio
= NativeThread.LOW_PRIORITY;
- else prio = NativeThread.MIN_PRIORITY;
+ if(i <=
RequestStarter.IMMEDIATE_SPLITFILE_PRIORITY_CLASS)
+ prio = NativeThread.NORM_PRIORITY;
+ else if(i <= RequestStarter.UPDATE_PRIORITY_CLASS)
+ prio = NativeThread.LOW_PRIORITY;
+ else
+ prio = NativeThread.MIN_PRIORITY;
clientSlowSerialExecutor[i] = new SerialExecutor(prio);
}
- byte[] pwdBuf = new byte[16];
+ byte[] pwdBuf = new byte[16];
random.nextBytes(pwdBuf);
this.formPassword = Base64.encode(pwdBuf);
alerts = new UserAlertManager(this);
logMINOR = Logger.shouldLog(Logger.MINOR, this);
-
- persister = new ConfigurablePersister(this, nodeConfig,
"clientThrottleFile", "client-throttle.dat", sortOrder++, true, false,
- "NodeClientCore.fileForClientStats",
"NodeClientCore.fileForClientStatsLong", node.ps, nodeDir);
-
+
+ persister = new ConfigurablePersister(this, nodeConfig,
"clientThrottleFile", "client-throttle.dat", sortOrder++, true, false,
+ "NodeClientCore.fileForClientStats",
"NodeClientCore.fileForClientStatsLong", node.ps, nodeDir);
+
SimpleFieldSet throttleFS = persister.read();
- if(logMINOR) Logger.minor(this, "Read
throttleFS:\n"+throttleFS);
-
- if(logMINOR) Logger.minor(this, "Serializing
RequestStarterGroup from:\n"+throttleFS);
+ if(logMINOR)
+ Logger.minor(this, "Read throttleFS:\n" + throttleFS);
+
+ if(logMINOR)
+ Logger.minor(this, "Serializing RequestStarterGroup
from:\n" + throttleFS);
requestStarters = new RequestStarterGroup(node, this,
portNumber, random, config, throttleFS);
-
+
// Temp files
-
- nodeConfig.register("tempDir", new File(nodeDir,
"temp-"+portNumber).toString(), sortOrder++, true, true,
"NodeClientCore.tempDir", "NodeClientCore.tempDirLong",
- new StringCallback() {
- public String get() {
- return tempDir.getPath();
- }
- public void set(String val) throws
InvalidConfigValueException {
- if(tempDir.equals(new
File(val))) return;
- // FIXME
- throw new
InvalidConfigValueException(l10n("movingTempDirOnTheFlyNotSupported"));
- }
- });
-
+
+ nodeConfig.register("tempDir", new File(nodeDir, "temp-" +
portNumber).toString(), sortOrder++, true, true, "NodeClientCore.tempDir",
"NodeClientCore.tempDirLong",
+ new StringCallback() {
+
+ public String get() {
+ return tempDir.getPath();
+ }
+
+ public void set(String val) throws
InvalidConfigValueException {
+ if(tempDir.equals(new File(val)))
+ return;
+ // FIXME
+ throw new
InvalidConfigValueException(l10n("movingTempDirOnTheFlyNotSupported"));
+ }
+ });
+
tempDir = new File(nodeConfig.getString("tempDir"));
if(!((tempDir.exists() && tempDir.isDirectory()) ||
(tempDir.mkdir()))) {
String msg = "Could not find or create temporary
directory";
throw new
NodeInitException(NodeInitException.EXIT_BAD_TEMP_DIR, msg);
}
-
+
try {
tempFilenameGenerator = new FilenameGenerator(random,
true, tempDir, "temp-");
- } catch (IOException e) {
+ } catch(IOException e) {
String msg = "Could not find or create temporary
directory (filename generator)";
throw new
NodeInitException(NodeInitException.EXIT_BAD_TEMP_DIR, msg);
}
// Persistent temp files
- nodeConfig.register("persistentTempDir", new File(nodeDir,
"persistent-temp-"+portNumber).toString(), sortOrder++, true, false,
"NodeClientCore.persistentTempDir", "NodeClientCore.persistentTempDirLong",
- new StringCallback() {
- public String get() {
- return
persistentTempBucketFactory.getDir().toString();
- }
- public void set(String val) throws
InvalidConfigValueException {
- if(get().equals(val))
- return;
- // FIXME
- throw new
InvalidConfigValueException("Moving persistent temp directory on the fly not
supported at present");
- }
- });
+ nodeConfig.register("persistentTempDir", new File(nodeDir,
"persistent-temp-" + portNumber).toString(), sortOrder++, true, false,
"NodeClientCore.persistentTempDir", "NodeClientCore.persistentTempDirLong",
+ new StringCallback() {
+
+ public String get() {
+ return
persistentTempBucketFactory.getDir().toString();
+ }
+
+ public void set(String val) throws
InvalidConfigValueException {
+ if(get().equals(val))
+ return;
+ // FIXME
+ throw new
InvalidConfigValueException("Moving persistent temp directory on the fly not
supported at present");
+ }
+ });
try {
persistentTempBucketFactory = new
PersistentTempBucketFactory(new
File(nodeConfig.getString("persistentTempDir")), "freenet-temp-", random,
node.fastWeakRandom);
persistentEncryptedTempBucketFactory = new
PersistentEncryptedTempBucketFactory(persistentTempBucketFactory);
- } catch (IOException e2) {
+ } 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), random, node.fastWeakRandom, 1024);
-
+
// Downloads directory
-
+
nodeConfig.register("downloadsDir", "downloads", sortOrder++,
true, true, "NodeClientCore.downloadDir", "NodeClientCore.downloadDirLong", new
StringCallback() {
public String get() {
@@ -207,129 +209,127 @@
if(downloadDir.equals(new File(val)))
return;
File f = new File(val);
- if(!((f.exists() && f.isDirectory()) ||
(f.mkdir()))) {
+ if(!((f.exists() && f.isDirectory()) ||
(f.mkdir())))
// Relatively commonly used, despite
being advanced (i.e. not something we want to show to newbies). So translate it.
throw new
InvalidConfigValueException(l10n("couldNotFindOrCreateDir"));
- }
downloadDir = new File(val);
}
-
});
-
+
String val = nodeConfig.getString("downloadsDir");
downloadDir = new File(val);
- if(!((downloadDir.exists() && downloadDir.isDirectory()) ||
(downloadDir.mkdir()))) {
+ if(!((downloadDir.exists() && downloadDir.isDirectory()) ||
(downloadDir.mkdir())))
throw new
NodeInitException(NodeInitException.EXIT_BAD_DOWNLOADS_DIR, "Could not find or
create default downloads directory");
- }
// Downloads allowed, uploads allowed
-
- nodeConfig.register("downloadAllowedDirs", new String[]
{"all"}, sortOrder++, true, true, "NodeClientCore.downloadAllowedDirs",
- "NodeClientCore.downloadAllowedDirsLong",
- new StringArrCallback() {
- public String[] get() {
-
synchronized(NodeClientCore.this) {
-
if(downloadAllowedEverywhere) return new String[] { "all" };
- String[] dirs = new
String[downloadAllowedDirs.length + (includeDownloadDir ? 1 : 0) ];
- for(int
i=0;i<downloadAllowedDirs.length;i++)
- dirs[i] =
downloadAllowedDirs[i].getPath();
- if(includeDownloadDir)
-
dirs[downloadAllowedDirs.length] = "downloads";
- return dirs;
- }
- }
+ nodeConfig.register("downloadAllowedDirs", new String[]{"all"},
sortOrder++, true, true, "NodeClientCore.downloadAllowedDirs",
+ "NodeClientCore.downloadAllowedDirsLong",
+ new StringArrCallback() {
- public void set(String[] val) throws
InvalidConfigValueException {
- setDownloadAllowedDirs(val);
+ public String[] get() {
+ synchronized(NodeClientCore.this) {
+ if(downloadAllowedEverywhere)
+ return new
String[]{"all"};
+ String[] dirs = new
String[downloadAllowedDirs.length + (includeDownloadDir ? 1 : 0)];
+ for(int i = 0; i <
downloadAllowedDirs.length; i++)
+ dirs[i] =
downloadAllowedDirs[i].getPath();
+ if(includeDownloadDir)
+
dirs[downloadAllowedDirs.length] = "downloads";
+ return dirs;
}
-
- });
+ }
+
+ public void set(String[] val) throws
InvalidConfigValueException {
+ setDownloadAllowedDirs(val);
+ }
+ });
setDownloadAllowedDirs(nodeConfig.getStringArr("downloadAllowedDirs"));
-
- nodeConfig.register("uploadAllowedDirs", new String[] {"all"},
sortOrder++, true, true, "NodeClientCore.uploadAllowedDirs",
- "NodeClientCore.uploadAllowedDirsLong",
- new StringArrCallback() {
- public String[] get() {
-
synchronized(NodeClientCore.this) {
-
if(uploadAllowedEverywhere) return new String[] { "all" };
- String[] dirs = new
String[uploadAllowedDirs.length];
- for(int
i=0;i<uploadAllowedDirs.length;i++)
- dirs[i] =
uploadAllowedDirs[i].getPath();
- return dirs;
- }
- }
+ nodeConfig.register("uploadAllowedDirs", new String[]{"all"},
sortOrder++, true, true, "NodeClientCore.uploadAllowedDirs",
+ "NodeClientCore.uploadAllowedDirsLong",
+ new StringArrCallback() {
- public void set(String[] val) throws
InvalidConfigValueException {
- setUploadAllowedDirs(val);
+ public String[] get() {
+ synchronized(NodeClientCore.this) {
+ if(uploadAllowedEverywhere)
+ return new
String[]{"all"};
+ String[] dirs = new
String[uploadAllowedDirs.length];
+ for(int i = 0; i <
uploadAllowedDirs.length; i++)
+ dirs[i] =
uploadAllowedDirs[i].getPath();
+ return dirs;
}
-
- });
+ }
+
+ public void set(String[] val) throws
InvalidConfigValueException {
+ setUploadAllowedDirs(val);
+ }
+ });
setUploadAllowedDirs(nodeConfig.getStringArr("uploadAllowedDirs"));
-
+
archiveManager = new ArchiveManager(MAX_ARCHIVE_HANDLERS,
MAX_CACHED_ARCHIVE_DATA, MAX_ARCHIVE_SIZE, MAX_ARCHIVED_FILE_SIZE,
MAX_CACHED_ELEMENTS, random, node.fastWeakRandom, tempFilenameGenerator);
Logger.normal(this, "Initializing USK Manager");
System.out.println("Initializing USK Manager");
uskManager = new USKManager(this);
-
+
healingQueue = new
SimpleHealingQueue(requestStarters.chkPutScheduler,
- new InsertContext(tempBucketFactory,
tempBucketFactory, persistentTempBucketFactory,
- random, 0, 2, 1, 0, 0, new
SimpleEventProducer(),
-
!Node.DONT_CACHE_LOCAL_REQUESTS, uskManager, backgroundBlockEncoder,
node.executor), RequestStarter.PREFETCH_PRIORITY_CLASS, 512 /* FIXME make
configurable */);
-
+ new InsertContext(tempBucketFactory, tempBucketFactory,
persistentTempBucketFactory,
+ random, 0, 2, 1, 0, 0, new SimpleEventProducer(),
+ !Node.DONT_CACHE_LOCAL_REQUESTS, uskManager,
backgroundBlockEncoder, node.executor), RequestStarter.PREFETCH_PRIORITY_CLASS,
512 /* FIXME make configurable */);
+
nodeConfig.register("lazyResume", false, sortOrder++, true,
false, "NodeClientCore.lazyResume",
- "NodeClientCore.lazyResumeLong", new
BooleanCallback() {
+ "NodeClientCore.lazyResumeLong", new BooleanCallback() {
- public boolean get() {
- return lazyResume;
- }
+ public boolean get() {
+ return lazyResume;
+ }
- public void set(boolean val) throws
InvalidConfigValueException {
-
synchronized(NodeClientCore.this) {
- lazyResume = val;
- }
- }
-
+ public void set(boolean val) throws
InvalidConfigValueException {
+ synchronized(NodeClientCore.this) {
+ lazyResume = val;
+ }
+ }
});
-
+
lazyResume = nodeConfig.getBoolean("lazyResume");
-
+
nodeConfig.register("maxBackgroundUSKFetchers", "64",
sortOrder++, true, false, "NodeClientCore.maxUSKFetchers",
- "NodeClientCore.maxUSKFetchersLong", new
IntCallback() {
- public int get() {
- return maxBackgroundUSKFetchers;
- }
- public void set(int uskFetch) throws
InvalidConfigValueException {
- if(uskFetch <= 0) throw new
InvalidConfigValueException(l10n("maxUSKFetchersMustBeGreaterThanZero"));
-
maxBackgroundUSKFetchers = uskFetch;
- }
- }
- );
-
+ "NodeClientCore.maxUSKFetchersLong", new IntCallback() {
+
+ public int get() {
+ return maxBackgroundUSKFetchers;
+ }
+
+ public void set(int uskFetch) throws
InvalidConfigValueException {
+ if(uskFetch <= 0)
+ throw new
InvalidConfigValueException(l10n("maxUSKFetchersMustBeGreaterThanZero"));
+ maxBackgroundUSKFetchers = uskFetch;
+ }
+ });
+
maxBackgroundUSKFetchers =
nodeConfig.getInt("maxBackgroundUSKFetchers");
-
-
+
+
// This is all part of construction, not of start().
// Some plugins depend on it, so it needs to be *created*
before they are started.
-
+
// TMCI
- try{
+ try {
tmci = TextModeClientInterfaceServer.maybeCreate(node,
this, config);
- } catch (IOException e) {
+ } catch(IOException e) {
e.printStackTrace();
- throw new
NodeInitException(NodeInitException.EXIT_COULD_NOT_START_TMCI, "Could not start
TMCI: "+e);
+ throw new
NodeInitException(NodeInitException.EXIT_COULD_NOT_START_TMCI, "Could not start
TMCI: " + e);
}
-
+
// FCP (including persistent requests so needs to start before
FProxy)
try {
fcpServer = FCPServer.maybeCreate(node, this,
node.config);
- } catch (IOException e) {
- throw new
NodeInitException(NodeInitException.EXIT_COULD_NOT_START_FCP, "Could not start
FCP: "+e);
- } catch (InvalidConfigValueException e) {
- throw new
NodeInitException(NodeInitException.EXIT_COULD_NOT_START_FCP, "Could not start
FCP: "+e);
+ } catch(IOException e) {
+ throw new
NodeInitException(NodeInitException.EXIT_COULD_NOT_START_FCP, "Could not start
FCP: " + e);
+ } catch(InvalidConfigValueException e) {
+ throw new
NodeInitException(NodeInitException.EXIT_COULD_NOT_START_FCP, "Could not start
FCP: " + e);
}
-
+
// FProxy
// FIXME this is a hack, the real way to do this is plugins
this.alerts.register(startingUpAlert = new
SimpleUserAlert(true, l10n("startingUpTitle"), l10n("startingUp"),
l10n("startingUpShort"), UserAlert.MINOR));
@@ -344,7 +344,7 @@
}
private static String l10n(String key) {
- return L10n.getString("NodeClientCore."+key);
+ return L10n.getString("NodeClientCore." + key);
}
protected synchronized void setDownloadAllowedDirs(String[] val) {
@@ -353,7 +353,7 @@
includeDownloadDir = false;
int i = 0;
downloadAllowedDirs = new File[val.length];
- for(i=0;i<downloadAllowedDirs.length;i++) {
+ for(i = 0; i < downloadAllowedDirs.length; i++) {
String s = val[i];
if(s.equals("downloads"))
includeDownloadDir = true;
@@ -374,7 +374,7 @@
int i = 0;
uploadAllowedEverywhere = false;
uploadAllowedDirs = new File[val.length];
- for(i=0;i<uploadAllowedDirs.length;i++) {
+ for(i = 0; i < uploadAllowedDirs.length; i++) {
String s = val[i];
if(s.equals("all"))
uploadAllowedEverywhere = true;
@@ -395,10 +395,11 @@
fcpServer.maybeStart();
if(tmci != null)
tmci.start();
- for(int i=0;i<clientSlowSerialExecutor.length;i++)
- clientSlowSerialExecutor[i].start(node.executor, "Heavy
client jobs runner ("+i+")");
-
+ for(int i = 0; i < clientSlowSerialExecutor.length; i++)
+ clientSlowSerialExecutor[i].start(node.executor, "Heavy
client jobs runner (" + i + ")");
+
node.executor.execute(new PrioRunnable() {
+
public void run() {
Logger.normal(this, "Resuming persistent
requests");
// Call it anyway; if we are not lazy, it won't
have to start any requests
@@ -421,14 +422,13 @@
public interface SimpleRequestSenderCompletionListener {
public void completed(boolean success);
-
}
-
+
public void asyncGet(Key key, boolean cache, boolean offersOnly, final
SimpleRequestSenderCompletionListener listener) {
final long uid = random.nextLong();
final boolean isSSK = key instanceof NodeSSK;
if(!node.lockUID(uid, isSSK, false, false, true)) {
- Logger.error(this, "Could not lock UID just randomly
generated: "+uid+" - probably indicates broken PRNG");
+ Logger.error(this, "Could not lock UID just randomly
generated: " + uid + " - probably indicates broken PRNG");
return;
}
asyncGet(key, cache, offersOnly, uid, new
RequestSender.Listener() {
@@ -447,10 +447,9 @@
if(listener != null)
listener.completed(status ==
RequestSender.SUCCESS);
}
-
});
}
-
+
/**
* Start an asynchronous fetch of the key in question, which will
complete to the datastore.
* It will not decode the data because we don't provide a ClientKey. It
will not return
@@ -470,135 +469,132 @@
node.unlockUID(uid, false, false, false, false,
true);
// Else it has started a request.
if(logMINOR)
- Logger.minor(this, "Started "+o+" for "+uid+"
for "+key);
- } catch (RuntimeException e) {
- Logger.error(this, "Caught error trying to start
request: "+e, e);
+ Logger.minor(this, "Started " + o + " for " +
uid + " for " + key);
+ } catch(RuntimeException e) {
+ Logger.error(this, "Caught error trying to start
request: " + e, e);
node.unlockUID(uid, false, false, true, false, true);
- } catch (Error e) {
- Logger.error(this, "Caught error trying to start
request: "+e, e);
+ } catch(Error e) {
+ Logger.error(this, "Caught error trying to start
request: " + e, e);
node.unlockUID(uid, false, false, true, false, true);
}
}
-
+
public ClientKeyBlock realGetKey(ClientKey key, boolean localOnly,
boolean cache, boolean ignoreStore) throws LowLevelGetException {
if(key instanceof ClientCHK)
- return realGetCHK((ClientCHK)key, localOnly, cache,
ignoreStore);
+ return realGetCHK((ClientCHK) key, localOnly, cache,
ignoreStore);
else if(key instanceof ClientSSK)
- return realGetSSK((ClientSSK)key, localOnly, cache,
ignoreStore);
+ return realGetSSK((ClientSSK) key, localOnly, cache,
ignoreStore);
else
- throw new IllegalArgumentException("Not a CHK or SSK:
"+key);
+ throw new IllegalArgumentException("Not a CHK or SSK: "
+ key);
}
-
+
ClientCHKBlock realGetCHK(ClientCHK key, boolean localOnly, boolean
cache, boolean ignoreStore) throws LowLevelGetException {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
long startTime = System.currentTimeMillis();
long uid = random.nextLong();
if(!node.lockUID(uid, false, false, false, true)) {
- Logger.error(this, "Could not lock UID just randomly
generated: "+uid+" - probably indicates broken PRNG");
+ Logger.error(this, "Could not lock UID just randomly
generated: " + uid + " - probably indicates broken PRNG");
throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
}
try {
- Object o = node.makeRequestSender(key.getNodeCHK(),
node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false);
- if(o instanceof CHKBlock) {
- try {
- return new ClientCHKBlock((CHKBlock)o, key);
- } catch (CHKVerifyException e) {
- Logger.error(this, "Does not verify: "+e, e);
- throw new
LowLevelGetException(LowLevelGetException.DECODE_FAILED);
- }
- }
- if(o == null) {
- throw new
LowLevelGetException(LowLevelGetException.DATA_NOT_FOUND_IN_STORE);
- }
- RequestSender rs = (RequestSender)o;
- boolean rejectedOverload = false;
- short waitStatus = 0;
- while(true) {
- waitStatus = rs.waitUntilStatusChange(waitStatus);
- if((!rejectedOverload) && (waitStatus &
RequestSender.WAIT_REJECTED_OVERLOAD) != 0) {
- // See below; inserts count both
- requestStarters.rejectedOverload(false, false);
- rejectedOverload = true;
- }
-
- int status = rs.getStatus();
-
- if(status == RequestSender.NOT_FINISHED)
- continue;
-
- if(status != RequestSender.TIMED_OUT && status !=
RequestSender.GENERATED_REJECTED_OVERLOAD && status !=
RequestSender.INTERNAL_ERROR) {
- if(logMINOR) Logger.minor(this, "CHK fetch cost
"+rs.getTotalSentBytes()+ '/' +rs.getTotalReceivedBytes()+" bytes ("+status+
')');
-
nodeStats.localChkFetchBytesSentAverage.report(rs.getTotalSentBytes());
-
nodeStats.localChkFetchBytesReceivedAverage.report(rs.getTotalReceivedBytes());
- if(status == RequestSender.SUCCESS) {
- // See comments above declaration of successful* : We
don't report sent bytes here.
-
//nodeStats.successfulChkFetchBytesSentAverage.report(rs.getTotalSentBytes());
-
nodeStats.successfulChkFetchBytesReceivedAverage.report(rs.getTotalReceivedBytes());
- }
- }
-
- if((status == RequestSender.TIMED_OUT) ||
- (status ==
RequestSender.GENERATED_REJECTED_OVERLOAD)) {
- if(!rejectedOverload) {
- // See below
+ Object o = node.makeRequestSender(key.getNodeCHK(),
node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false);
+ if(o instanceof CHKBlock)
+ try {
+ return new ClientCHKBlock((CHKBlock) o,
key);
+ } catch(CHKVerifyException e) {
+ Logger.error(this, "Does not verify: "
+ e, e);
+ throw new
LowLevelGetException(LowLevelGetException.DECODE_FAILED);
+ }
+ if(o == null)
+ throw new
LowLevelGetException(LowLevelGetException.DATA_NOT_FOUND_IN_STORE);
+ RequestSender rs = (RequestSender) o;
+ boolean rejectedOverload = false;
+ short waitStatus = 0;
+ while(true) {
+ waitStatus =
rs.waitUntilStatusChange(waitStatus);
+ if((!rejectedOverload) && (waitStatus &
RequestSender.WAIT_REJECTED_OVERLOAD) != 0) {
+ // See below; inserts count both
requestStarters.rejectedOverload(false,
false);
rejectedOverload = true;
}
- } else {
- if(rs.hasForwarded() &&
+
+ int status = rs.getStatus();
+
+ if(status == RequestSender.NOT_FINISHED)
+ continue;
+
+ if(status != RequestSender.TIMED_OUT && status
!= RequestSender.GENERATED_REJECTED_OVERLOAD && status !=
RequestSender.INTERNAL_ERROR) {
+ if(logMINOR)
+ Logger.minor(this, "CHK fetch
cost " + rs.getTotalSentBytes() + '/' + rs.getTotalReceivedBytes() + " bytes ("
+ status + ')');
+
nodeStats.localChkFetchBytesSentAverage.report(rs.getTotalSentBytes());
+
nodeStats.localChkFetchBytesReceivedAverage.report(rs.getTotalReceivedBytes());
+ if(status == RequestSender.SUCCESS)
+ // See comments above
declaration of successful* : We don't report sent bytes here.
+
//nodeStats.successfulChkFetchBytesSentAverage.report(rs.getTotalSentBytes());
+
nodeStats.successfulChkFetchBytesReceivedAverage.report(rs.getTotalReceivedBytes());
+ }
+
+ if((status == RequestSender.TIMED_OUT) ||
+ (status ==
RequestSender.GENERATED_REJECTED_OVERLOAD)) {
+ if(!rejectedOverload) {
+ // See below
+
requestStarters.rejectedOverload(false, false);
+ rejectedOverload = true;
+ }
+ } else
+ if(rs.hasForwarded() &&
((status ==
RequestSender.DATA_NOT_FOUND) ||
(status ==
RequestSender.RECENTLY_FAILED) ||
(status ==
RequestSender.SUCCESS) ||
(status ==
RequestSender.ROUTE_NOT_FOUND) ||
(status ==
RequestSender.VERIFY_FAILURE) ||
(status ==
RequestSender.GET_OFFER_VERIFY_FAILURE))) {
- long rtt = System.currentTimeMillis() -
startTime;
- if(!rejectedOverload)
-
requestStarters.requestCompleted(false, false);
- // Count towards RTT even if got a
RejectedOverload - but not if timed out.
-
requestStarters.chkRequestThrottle.successfulCompletion(rtt);
+ long rtt =
System.currentTimeMillis() - startTime;
+ if(!rejectedOverload)
+
requestStarters.requestCompleted(false, false, key.getNodeKey());
+ // Count towards RTT even if
got a RejectedOverload - but not if timed out.
+
requestStarters.chkRequestThrottle.successfulCompletion(rtt);
+ }
+
+ if(rs.getStatus() == RequestSender.SUCCESS)
+ try {
+ return new
ClientCHKBlock(rs.getPRB().getBlock(), rs.getHeaders(), key, true);
+ } catch(CHKVerifyException e) {
+ Logger.error(this, "Does not
verify: " + e, e);
+ throw new
LowLevelGetException(LowLevelGetException.DECODE_FAILED);
+ } catch(AbortedException e) {
+ Logger.error(this, "Impossible:
" + e, e);
+ throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
+ }
+ else {
+ int rStatus = rs.getStatus();
+ switch(rStatus) {
+ case RequestSender.NOT_FINISHED:
+ Logger.error(this, "RS
still running in getCHK!: " + rs);
+ throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
+ case
RequestSender.DATA_NOT_FOUND:
+ throw new
LowLevelGetException(LowLevelGetException.DATA_NOT_FOUND);
+ case
RequestSender.RECENTLY_FAILED:
+ throw new
LowLevelGetException(LowLevelGetException.RECENTLY_FAILED);
+ case
RequestSender.ROUTE_NOT_FOUND:
+ throw new
LowLevelGetException(LowLevelGetException.ROUTE_NOT_FOUND);
+ case
RequestSender.TRANSFER_FAILED:
+ case
RequestSender.GET_OFFER_TRANSFER_FAILED:
+ throw new
LowLevelGetException(LowLevelGetException.TRANSFER_FAILED);
+ case
RequestSender.VERIFY_FAILURE:
+ case
RequestSender.GET_OFFER_VERIFY_FAILURE:
+ throw new
LowLevelGetException(LowLevelGetException.VERIFY_FAILED);
+ case
RequestSender.GENERATED_REJECTED_OVERLOAD:
+ case RequestSender.TIMED_OUT:
+ throw new
LowLevelGetException(LowLevelGetException.REJECTED_OVERLOAD);
+ case
RequestSender.INTERNAL_ERROR:
+ throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
+ default:
+ Logger.error(this,
"Unknown RequestSender code in getCHK: " + rStatus + " on " + rs);
+ throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
+ }
}
}
-
- if(rs.getStatus() == RequestSender.SUCCESS) {
- try {
- return new
ClientCHKBlock(rs.getPRB().getBlock(), rs.getHeaders(), key, true);
- } catch (CHKVerifyException e) {
- Logger.error(this, "Does not verify:
"+e, e);
- throw new
LowLevelGetException(LowLevelGetException.DECODE_FAILED);
- } catch (AbortedException e) {
- Logger.error(this, "Impossible: "+e, e);
- throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
- }
- } else {
- int rStatus = rs.getStatus();
- switch(rStatus) {
- case RequestSender.NOT_FINISHED:
- Logger.error(this, "RS still running in
getCHK!: "+rs);
- throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
- case RequestSender.DATA_NOT_FOUND:
- throw new
LowLevelGetException(LowLevelGetException.DATA_NOT_FOUND);
- case RequestSender.RECENTLY_FAILED:
- throw new
LowLevelGetException(LowLevelGetException.RECENTLY_FAILED);
- case RequestSender.ROUTE_NOT_FOUND:
- throw new
LowLevelGetException(LowLevelGetException.ROUTE_NOT_FOUND);
- case RequestSender.TRANSFER_FAILED:
- case RequestSender.GET_OFFER_TRANSFER_FAILED:
- throw new
LowLevelGetException(LowLevelGetException.TRANSFER_FAILED);
- case RequestSender.VERIFY_FAILURE:
- case RequestSender.GET_OFFER_VERIFY_FAILURE:
- throw new
LowLevelGetException(LowLevelGetException.VERIFY_FAILED);
- case RequestSender.GENERATED_REJECTED_OVERLOAD:
- case RequestSender.TIMED_OUT:
- throw new
LowLevelGetException(LowLevelGetException.REJECTED_OVERLOAD);
- case RequestSender.INTERNAL_ERROR:
- throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
- default:
- Logger.error(this, "Unknown
RequestSender code in getCHK: "+rStatus+" on "+rs);
- throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
- }
- }
- }
} finally {
node.unlockUID(uid, false, false, true, false, true);
}
@@ -609,111 +605,107 @@
long startTime = System.currentTimeMillis();
long uid = random.nextLong();
if(!node.lockUID(uid, true, false, false, true)) {
- Logger.error(this, "Could not lock UID just randomly
generated: "+uid+" - probably indicates broken PRNG");
+ Logger.error(this, "Could not lock UID just randomly
generated: " + uid + " - probably indicates broken PRNG");
throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
}
try {
- Object o = node.makeRequestSender(key.getNodeKey(),
node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false);
- if(o instanceof SSKBlock) {
- try {
- SSKBlock block = (SSKBlock)o;
- key.setPublicKey(block.getPubKey());
- return ClientSSKBlock.construct(block, key);
- } catch (SSKVerifyException e) {
- Logger.error(this, "Does not verify: "+e, e);
- throw new
LowLevelGetException(LowLevelGetException.DECODE_FAILED);
- }
- }
- if(o == null) {
- throw new
LowLevelGetException(LowLevelGetException.DATA_NOT_FOUND_IN_STORE);
- }
- RequestSender rs = (RequestSender)o;
- boolean rejectedOverload = false;
- short waitStatus = 0;
- while(true) {
- waitStatus = rs.waitUntilStatusChange(waitStatus);
- if((!rejectedOverload) && (waitStatus &
RequestSender.WAIT_REJECTED_OVERLOAD) != 0) {
- requestStarters.rejectedOverload(true, false);
- rejectedOverload = true;
- }
-
- int status = rs.getStatus();
-
- if(status == RequestSender.NOT_FINISHED)
- continue;
-
- if(status != RequestSender.TIMED_OUT && status !=
RequestSender.GENERATED_REJECTED_OVERLOAD && status !=
RequestSender.INTERNAL_ERROR) {
- if(logMINOR) Logger.minor(this, "SSK fetch cost
"+rs.getTotalSentBytes()+ '/' +rs.getTotalReceivedBytes()+" bytes ("+status+
')');
-
nodeStats.localSskFetchBytesSentAverage.report(rs.getTotalSentBytes());
-
nodeStats.localSskFetchBytesReceivedAverage.report(rs.getTotalReceivedBytes());
- if(status == RequestSender.SUCCESS) {
- // See comments above
successfulSskFetchBytesSentAverage : we don't relay the data, so
- // reporting the sent bytes would be inaccurate.
-
//nodeStats.successfulSskFetchBytesSentAverage.report(rs.getTotalSentBytes());
-
nodeStats.successfulSskFetchBytesReceivedAverage.report(rs.getTotalReceivedBytes());
- }
- }
-
- if((status == RequestSender.TIMED_OUT) ||
- (status ==
RequestSender.GENERATED_REJECTED_OVERLOAD)) {
- if(!rejectedOverload) {
+ Object o = node.makeRequestSender(key.getNodeKey(),
node.maxHTL(), uid, null, localOnly, cache, ignoreStore, false);
+ if(o instanceof SSKBlock)
+ try {
+ SSKBlock block = (SSKBlock) o;
+ key.setPublicKey(block.getPubKey());
+ return ClientSSKBlock.construct(block,
key);
+ } catch(SSKVerifyException e) {
+ Logger.error(this, "Does not verify: "
+ e, e);
+ throw new
LowLevelGetException(LowLevelGetException.DECODE_FAILED);
+ }
+ if(o == null)
+ throw new
LowLevelGetException(LowLevelGetException.DATA_NOT_FOUND_IN_STORE);
+ RequestSender rs = (RequestSender) o;
+ boolean rejectedOverload = false;
+ short waitStatus = 0;
+ while(true) {
+ waitStatus =
rs.waitUntilStatusChange(waitStatus);
+ if((!rejectedOverload) && (waitStatus &
RequestSender.WAIT_REJECTED_OVERLOAD) != 0) {
requestStarters.rejectedOverload(true,
false);
rejectedOverload = true;
}
- } else {
- if(rs.hasForwarded() &&
+
+ int status = rs.getStatus();
+
+ if(status == RequestSender.NOT_FINISHED)
+ continue;
+
+ if(status != RequestSender.TIMED_OUT && status
!= RequestSender.GENERATED_REJECTED_OVERLOAD && status !=
RequestSender.INTERNAL_ERROR) {
+ if(logMINOR)
+ Logger.minor(this, "SSK fetch
cost " + rs.getTotalSentBytes() + '/' + rs.getTotalReceivedBytes() + " bytes ("
+ status + ')');
+
nodeStats.localSskFetchBytesSentAverage.report(rs.getTotalSentBytes());
+
nodeStats.localSskFetchBytesReceivedAverage.report(rs.getTotalReceivedBytes());
+ if(status == RequestSender.SUCCESS)
+ // See comments above
successfulSskFetchBytesSentAverage : we don't relay the data, so
+ // reporting the sent bytes
would be inaccurate.
+
//nodeStats.successfulSskFetchBytesSentAverage.report(rs.getTotalSentBytes());
+
nodeStats.successfulSskFetchBytesReceivedAverage.report(rs.getTotalReceivedBytes());
+ }
+
+ if((status == RequestSender.TIMED_OUT) ||
+ (status ==
RequestSender.GENERATED_REJECTED_OVERLOAD)) {
+ if(!rejectedOverload) {
+
requestStarters.rejectedOverload(true, false);
+ rejectedOverload = true;
+ }
+ } else
+ if(rs.hasForwarded() &&
((status ==
RequestSender.DATA_NOT_FOUND) ||
(status ==
RequestSender.RECENTLY_FAILED) ||
(status ==
RequestSender.SUCCESS) ||
(status ==
RequestSender.ROUTE_NOT_FOUND) ||
(status ==
RequestSender.VERIFY_FAILURE) ||
(status ==
RequestSender.GET_OFFER_VERIFY_FAILURE))) {
- long rtt = System.currentTimeMillis() -
startTime;
-
- if(!rejectedOverload)
-
requestStarters.requestCompleted(true, false);
- // Count towards RTT even if got a
RejectedOverload - but not if timed out.
-
requestStarters.sskRequestThrottle.successfulCompletion(rtt);
- }
+ long rtt =
System.currentTimeMillis() - startTime;
+
+ if(!rejectedOverload)
+
requestStarters.requestCompleted(true, false, key.getNodeKey());
+ // Count towards RTT even if
got a RejectedOverload - but not if timed out.
+
requestStarters.sskRequestThrottle.successfulCompletion(rtt);
+ }
+
+ if(rs.getStatus() == RequestSender.SUCCESS)
+ try {
+ SSKBlock block =
rs.getSSKBlock();
+
key.setPublicKey(block.getPubKey());
+ return
ClientSSKBlock.construct(block, key);
+ } catch(SSKVerifyException e) {
+ Logger.error(this, "Does not
verify: " + e, e);
+ throw new
LowLevelGetException(LowLevelGetException.DECODE_FAILED);
+ }
+ else
+ switch(rs.getStatus()) {
+ case RequestSender.NOT_FINISHED:
+ Logger.error(this, "RS
still running in getCHK!: " + rs);
+ throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
+ case
RequestSender.DATA_NOT_FOUND:
+ throw new
LowLevelGetException(LowLevelGetException.DATA_NOT_FOUND);
+ case
RequestSender.RECENTLY_FAILED:
+ throw new
LowLevelGetException(LowLevelGetException.RECENTLY_FAILED);
+ case
RequestSender.ROUTE_NOT_FOUND:
+ throw new
LowLevelGetException(LowLevelGetException.ROUTE_NOT_FOUND);
+ case
RequestSender.TRANSFER_FAILED:
+ case
RequestSender.GET_OFFER_TRANSFER_FAILED:
+ Logger.error(this,
"WTF? Transfer failed on an SSK? on " + uid);
+ throw new
LowLevelGetException(LowLevelGetException.TRANSFER_FAILED);
+ case
RequestSender.VERIFY_FAILURE:
+ case
RequestSender.GET_OFFER_VERIFY_FAILURE:
+ throw new
LowLevelGetException(LowLevelGetException.VERIFY_FAILED);
+ case
RequestSender.GENERATED_REJECTED_OVERLOAD:
+ case RequestSender.TIMED_OUT:
+ throw new
LowLevelGetException(LowLevelGetException.REJECTED_OVERLOAD);
+ case
RequestSender.INTERNAL_ERROR:
+ default:
+ Logger.error(this,
"Unknown RequestSender code in getCHK: " + rs.getStatus() + " on " + rs);
+ throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
+ }
}
-
- if(rs.getStatus() == RequestSender.SUCCESS) {
- try {
- SSKBlock block = rs.getSSKBlock();
- key.setPublicKey(block.getPubKey());
- return ClientSSKBlock.construct(block,
key);
- } catch (SSKVerifyException e) {
- Logger.error(this, "Does not verify:
"+e, e);
- throw new
LowLevelGetException(LowLevelGetException.DECODE_FAILED);
- }
- } else {
- switch(rs.getStatus()) {
- case RequestSender.NOT_FINISHED:
- Logger.error(this, "RS still running in
getCHK!: "+rs);
- throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
- case RequestSender.DATA_NOT_FOUND:
- throw new
LowLevelGetException(LowLevelGetException.DATA_NOT_FOUND);
- case RequestSender.RECENTLY_FAILED:
- throw new
LowLevelGetException(LowLevelGetException.RECENTLY_FAILED);
- case RequestSender.ROUTE_NOT_FOUND:
- throw new
LowLevelGetException(LowLevelGetException.ROUTE_NOT_FOUND);
- case RequestSender.TRANSFER_FAILED:
- case RequestSender.GET_OFFER_TRANSFER_FAILED:
- Logger.error(this, "WTF? Transfer
failed on an SSK? on "+uid);
- throw new
LowLevelGetException(LowLevelGetException.TRANSFER_FAILED);
- case RequestSender.VERIFY_FAILURE:
- case RequestSender.GET_OFFER_VERIFY_FAILURE:
- throw new
LowLevelGetException(LowLevelGetException.VERIFY_FAILED);
- case RequestSender.GENERATED_REJECTED_OVERLOAD:
- case RequestSender.TIMED_OUT:
- throw new
LowLevelGetException(LowLevelGetException.REJECTED_OVERLOAD);
- case RequestSender.INTERNAL_ERROR:
- default:
- Logger.error(this, "Unknown
RequestSender code in getCHK: "+rs.getStatus()+" on "+rs);
- throw new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR);
- }
- }
- }
} finally {
node.unlockUID(uid, true, false, true, false, true);
}
@@ -721,13 +713,13 @@
public void realPut(KeyBlock block, boolean cache) throws
LowLevelPutException {
if(block instanceof CHKBlock)
- realPutCHK((CHKBlock)block, cache);
+ realPutCHK((CHKBlock) block, cache);
else if(block instanceof SSKBlock)
- realPutSSK((SSKBlock)block, cache);
+ realPutSSK((SSKBlock) block, cache);
else
- throw new IllegalArgumentException("Unknown put type
"+block.getClass());
+ throw new IllegalArgumentException("Unknown put type "
+ block.getClass());
}
-
+
public void realPutCHK(CHKBlock block, boolean cache) throws
LowLevelPutException {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
byte[] data = block.getData();
@@ -736,113 +728,110 @@
CHKInsertSender is;
long uid = random.nextLong();
if(!node.lockUID(uid, false, true, false, true)) {
- Logger.error(this, "Could not lock UID just randomly
generated: "+uid+" - probably indicates broken PRNG");
+ Logger.error(this, "Could not lock UID just randomly
generated: " + uid + " - probably indicates broken PRNG");
throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
}
try {
- long startTime = System.currentTimeMillis();
- if(cache) {
- node.store(block);
- }
- is = node.makeInsertSender((NodeCHK)block.getKey(),
+ long startTime = System.currentTimeMillis();
+ if(cache)
+ node.store(block);
+ is = node.makeInsertSender((NodeCHK) block.getKey(),
node.maxHTL(), uid, null, headers, prb, false,
cache);
- boolean hasReceivedRejectedOverload = false;
- // Wait for status
- while(true) {
- synchronized(is) {
- if(is.getStatus() ==
CHKInsertSender.NOT_FINISHED) {
+ boolean hasReceivedRejectedOverload = false;
+ // Wait for status
+ while(true) {
+ synchronized(is) {
+ if(is.getStatus() ==
CHKInsertSender.NOT_FINISHED)
+ try {
+ is.wait(5 * 1000);
+ } catch(InterruptedException e)
{
+ // Ignore
+ }
+ if(is.getStatus() !=
CHKInsertSender.NOT_FINISHED)
+ break;
+ }
+ if((!hasReceivedRejectedOverload) &&
is.receivedRejectedOverload()) {
+ hasReceivedRejectedOverload = true;
+ requestStarters.rejectedOverload(false,
true);
+ }
+ }
+
+ // Wait for completion
+ while(true) {
+ synchronized(is) {
+ if(is.completed())
+ break;
try {
- is.wait(5*1000);
- } catch (InterruptedException e) {
- // Ignore
+ is.wait(10 * 1000);
+ } catch(InterruptedException e) {
+ // Go around again
}
}
- if(is.getStatus() !=
CHKInsertSender.NOT_FINISHED) break;
+ if(is.anyTransfersFailed() &&
(!hasReceivedRejectedOverload)) {
+ hasReceivedRejectedOverload = true; //
not strictly true but same effect
+ requestStarters.rejectedOverload(false,
true);
+ }
}
- if((!hasReceivedRejectedOverload) &&
is.receivedRejectedOverload()) {
- hasReceivedRejectedOverload = true;
- requestStarters.rejectedOverload(false, true);
+
+ if(logMINOR)
+ Logger.minor(this, "Completed " + uid + "
overload=" + hasReceivedRejectedOverload + ' ' + is.getStatusString());
+
+ // Finished?
+ if(!hasReceivedRejectedOverload)
+ // Is it ours? Did we send a request?
+ if(is.sentRequest() && (is.uid == uid) &&
((is.getStatus() == CHKInsertSender.ROUTE_NOT_FOUND) || (is.getStatus() ==
CHKInsertSender.SUCCESS))) {
+ // It worked!
+ long endTime =
System.currentTimeMillis();
+ long len = endTime - startTime;
+
+ // RejectedOverload requests count
towards RTT (timed out ones don't).
+
requestStarters.chkInsertThrottle.successfulCompletion(len);
+ requestStarters.requestCompleted(false,
true, block.getKey());
+ }
+
+ // Get status explicitly, *after* completed(), so that
it will be RECEIVE_FAILED if the receive failed.
+ int status = is.getStatus();
+ if(status != CHKInsertSender.TIMED_OUT && status !=
CHKInsertSender.GENERATED_REJECTED_OVERLOAD && status !=
CHKInsertSender.INTERNAL_ERROR && status !=
CHKInsertSender.ROUTE_REALLY_NOT_FOUND) {
+ int sent = is.getTotalSentBytes();
+ int received = is.getTotalReceivedBytes();
+ if(logMINOR)
+ Logger.minor(this, "Local CHK insert
cost " + sent + '/' + received + " bytes (" + status + ')');
+
nodeStats.localChkInsertBytesSentAverage.report(sent);
+
nodeStats.localChkInsertBytesReceivedAverage.report(received);
+ if(status == CHKInsertSender.SUCCESS)
+ // Only report Sent bytes because we
did not receive the data.
+
nodeStats.successfulChkInsertBytesSentAverage.report(sent);
}
- }
-
- // Wait for completion
- while(true) {
- synchronized(is) {
- if(is.completed()) break;
- try {
- is.wait(10*1000);
- } catch (InterruptedException e) {
- // Go around again
+
+ if(status == CHKInsertSender.SUCCESS) {
+ Logger.normal(this, "Succeeded inserting " +
block);
+ return;
+ } else {
+ String msg = "Failed inserting " + block + " :
" + is.getStatusString();
+ if(status == CHKInsertSender.ROUTE_NOT_FOUND)
+ msg += " - this is normal on small
networks; the data will still be propagated, but it can't find the 20+ nodes
needed for full success";
+ if(is.getStatus() !=
CHKInsertSender.ROUTE_NOT_FOUND)
+ Logger.error(this, msg);
+ else
+ Logger.normal(this, msg);
+ switch(is.getStatus()) {
+ case CHKInsertSender.NOT_FINISHED:
+ Logger.error(this, "IS still
running in putCHK!: " + is);
+ throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
+ case
CHKInsertSender.GENERATED_REJECTED_OVERLOAD:
+ case CHKInsertSender.TIMED_OUT:
+ throw new
LowLevelPutException(LowLevelPutException.REJECTED_OVERLOAD);
+ case CHKInsertSender.ROUTE_NOT_FOUND:
+ throw new
LowLevelPutException(LowLevelPutException.ROUTE_NOT_FOUND);
+ case
CHKInsertSender.ROUTE_REALLY_NOT_FOUND:
+ throw new
LowLevelPutException(LowLevelPutException.ROUTE_REALLY_NOT_FOUND);
+ case CHKInsertSender.INTERNAL_ERROR:
+ throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
+ default:
+ Logger.error(this, "Unknown
CHKInsertSender code in putCHK: " + is.getStatus() + " on " + is);
+ throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
}
}
- if(is.anyTransfersFailed() &&
(!hasReceivedRejectedOverload)) {
- hasReceivedRejectedOverload = true; // not
strictly true but same effect
- requestStarters.rejectedOverload(false, true);
- }
- }
-
- if(logMINOR) Logger.minor(this, "Completed "+uid+"
overload="+hasReceivedRejectedOverload+ ' ' +is.getStatusString());
-
- // Finished?
- if(!hasReceivedRejectedOverload) {
- // Is it ours? Did we send a request?
- if(is.sentRequest() && (is.uid == uid) &&
((is.getStatus() == CHKInsertSender.ROUTE_NOT_FOUND)
- || (is.getStatus() ==
CHKInsertSender.SUCCESS))) {
- // It worked!
- long endTime = System.currentTimeMillis();
- long len = endTime - startTime;
-
- // RejectedOverload requests count towards RTT
(timed out ones don't).
-
requestStarters.chkInsertThrottle.successfulCompletion(len);
- requestStarters.requestCompleted(false, true);
- }
- }
-
- // Get status explicitly, *after* completed(), so that it will
be RECEIVE_FAILED if the receive failed.
- int status = is.getStatus();
- if(status != CHKInsertSender.TIMED_OUT && status !=
CHKInsertSender.GENERATED_REJECTED_OVERLOAD && status !=
CHKInsertSender.INTERNAL_ERROR
- && status != CHKInsertSender.ROUTE_REALLY_NOT_FOUND) {
- int sent = is.getTotalSentBytes();
- int received = is.getTotalReceivedBytes();
- if(logMINOR) Logger.minor(this, "Local CHK insert cost "+sent+
'/' +received+" bytes ("+status+ ')');
- nodeStats.localChkInsertBytesSentAverage.report(sent);
- nodeStats.localChkInsertBytesReceivedAverage.report(received);
- if(status == CHKInsertSender.SUCCESS) {
- // Only report Sent bytes because we did not receive
the data.
-
nodeStats.successfulChkInsertBytesSentAverage.report(sent);
-
//nodeStats.successfulChkInsertBytesReceivedAverage.report(received);
- }
- }
-
- if(status == CHKInsertSender.SUCCESS) {
- Logger.normal(this, "Succeeded inserting "+block);
- return;
- } else {
- String msg = "Failed inserting "+block+" :
"+is.getStatusString();
- if(status == CHKInsertSender.ROUTE_NOT_FOUND)
- msg += " - this is normal on small networks;
the data will still be propagated, but it can't find the 20+ nodes needed for
full success";
- if(is.getStatus() != CHKInsertSender.ROUTE_NOT_FOUND)
- Logger.error(this, msg);
- else
- Logger.normal(this, msg);
- switch(is.getStatus()) {
- case CHKInsertSender.NOT_FINISHED:
- Logger.error(this, "IS still running in
putCHK!: "+is);
- throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
- case CHKInsertSender.GENERATED_REJECTED_OVERLOAD:
- case CHKInsertSender.TIMED_OUT:
- throw new
LowLevelPutException(LowLevelPutException.REJECTED_OVERLOAD);
- case CHKInsertSender.ROUTE_NOT_FOUND:
- throw new
LowLevelPutException(LowLevelPutException.ROUTE_NOT_FOUND);
- case CHKInsertSender.ROUTE_REALLY_NOT_FOUND:
- throw new
LowLevelPutException(LowLevelPutException.ROUTE_REALLY_NOT_FOUND);
- case CHKInsertSender.INTERNAL_ERROR:
- throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
- default:
- Logger.error(this, "Unknown CHKInsertSender
code in putCHK: "+is.getStatus()+" on "+is);
- throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
- }
- }
} finally {
node.unlockUID(uid, false, true, true, false, true);
}
@@ -853,125 +842,122 @@
SSKInsertSender is;
long uid = random.nextLong();
if(!node.lockUID(uid, true, true, false, true)) {
- Logger.error(this, "Could not lock UID just randomly
generated: "+uid+" - probably indicates broken PRNG");
+ Logger.error(this, "Could not lock UID just randomly
generated: " + uid + " - probably indicates broken PRNG");
throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
}
try {
- long startTime = System.currentTimeMillis();
- SSKBlock altBlock = (SSKBlock) node.fetch(block.getKey(),
false);
- if(altBlock != null && !altBlock.equals(block)) throw new
LowLevelPutException(LowLevelPutException.COLLISION);
- is = node.makeInsertSender(block,
+ long startTime = System.currentTimeMillis();
+ SSKBlock altBlock = (SSKBlock)
node.fetch(block.getKey(), false);
+ if(altBlock != null && !altBlock.equals(block))
+ throw new
LowLevelPutException(LowLevelPutException.COLLISION);
+ is = node.makeInsertSender(block,
node.maxHTL(), uid, null, false, cache);
- boolean hasReceivedRejectedOverload = false;
- // Wait for status
- while(true) {
- synchronized(is) {
- if(is.getStatus() ==
SSKInsertSender.NOT_FINISHED) {
+ boolean hasReceivedRejectedOverload = false;
+ // Wait for status
+ while(true) {
+ synchronized(is) {
+ if(is.getStatus() ==
SSKInsertSender.NOT_FINISHED)
+ try {
+ is.wait(5 * 1000);
+ } catch(InterruptedException e)
{
+ // Ignore
+ }
+ if(is.getStatus() !=
SSKInsertSender.NOT_FINISHED)
+ break;
+ }
+ if((!hasReceivedRejectedOverload) &&
is.receivedRejectedOverload()) {
+ hasReceivedRejectedOverload = true;
+ requestStarters.rejectedOverload(true,
true);
+ }
+ }
+
+ // Wait for completion
+ while(true) {
+ synchronized(is) {
+ if(is.getStatus() !=
SSKInsertSender.NOT_FINISHED)
+ break;
try {
- is.wait(5*1000);
- } catch (InterruptedException e) {
- // Ignore
+ is.wait(10 * 1000);
+ } catch(InterruptedException e) {
+ // Go around again
}
}
- if(is.getStatus() !=
SSKInsertSender.NOT_FINISHED) break;
}
- if((!hasReceivedRejectedOverload) &&
is.receivedRejectedOverload()) {
- hasReceivedRejectedOverload = true;
- requestStarters.rejectedOverload(true, true);
- }
- }
-
- // Wait for completion
- while(true) {
- synchronized(is) {
- if(is.getStatus() !=
SSKInsertSender.NOT_FINISHED) break;
- try {
- is.wait(10*1000);
- } catch (InterruptedException e) {
- // Go around again
+
+ if(logMINOR)
+ Logger.minor(this, "Completed " + uid + "
overload=" + hasReceivedRejectedOverload + ' ' + is.getStatusString());
+
+ // Finished?
+ if(!hasReceivedRejectedOverload)
+ // Is it ours? Did we send a request?
+ if(is.sentRequest() && (is.uid == uid) &&
((is.getStatus() == SSKInsertSender.ROUTE_NOT_FOUND) || (is.getStatus() ==
SSKInsertSender.SUCCESS))) {
+ // It worked!
+ long endTime =
System.currentTimeMillis();
+ long rtt = endTime - startTime;
+ requestStarters.requestCompleted(true,
true, block.getKey());
+
requestStarters.sskInsertThrottle.successfulCompletion(rtt);
}
- }
- }
-
- if(logMINOR) Logger.minor(this, "Completed "+uid+"
overload="+hasReceivedRejectedOverload+ ' ' +is.getStatusString());
-
- // Finished?
- if(!hasReceivedRejectedOverload) {
- // Is it ours? Did we send a request?
- if(is.sentRequest() && (is.uid == uid) &&
((is.getStatus() == SSKInsertSender.ROUTE_NOT_FOUND)
- || (is.getStatus() ==
SSKInsertSender.SUCCESS))) {
- // It worked!
- long endTime = System.currentTimeMillis();
- long rtt = endTime - startTime;
- requestStarters.requestCompleted(true, true);
-
requestStarters.sskInsertThrottle.successfulCompletion(rtt);
- }
- }
- int status = is.getStatus();
-
- if(status != CHKInsertSender.TIMED_OUT && status !=
CHKInsertSender.GENERATED_REJECTED_OVERLOAD && status !=
CHKInsertSender.INTERNAL_ERROR
- && status != CHKInsertSender.ROUTE_REALLY_NOT_FOUND) {
- int sent = is.getTotalSentBytes();
- int received = is.getTotalReceivedBytes();
- if(logMINOR) Logger.minor(this, "Local SSK insert cost "+sent+
'/' +received+" bytes ("+status+ ')');
- nodeStats.localSskInsertBytesSentAverage.report(sent);
- nodeStats.localSskInsertBytesReceivedAverage.report(received);
- if(status == SSKInsertSender.SUCCESS) {
- // Only report Sent bytes as we haven't received
anything.
-
nodeStats.successfulSskInsertBytesSentAverage.report(sent);
-
//nodeStats.successfulSskInsertBytesReceivedAverage.report(received);
- }
- }
-
- if(is.hasCollided()) {
- // Store it locally so it can be fetched immediately,
and overwrites any locally inserted.
- try {
- node.storeInsert(is.getBlock());
- } catch (KeyCollisionException e) {
- // Impossible
+ int status = is.getStatus();
+
+ if(status != CHKInsertSender.TIMED_OUT && status !=
CHKInsertSender.GENERATED_REJECTED_OVERLOAD && status !=
CHKInsertSender.INTERNAL_ERROR && status !=
CHKInsertSender.ROUTE_REALLY_NOT_FOUND) {
+ int sent = is.getTotalSentBytes();
+ int received = is.getTotalReceivedBytes();
+ if(logMINOR)
+ Logger.minor(this, "Local SSK insert
cost " + sent + '/' + received + " bytes (" + status + ')');
+
nodeStats.localSskInsertBytesSentAverage.report(sent);
+
nodeStats.localSskInsertBytesReceivedAverage.report(received);
+ if(status == SSKInsertSender.SUCCESS)
+ // Only report Sent bytes as we haven't
received anything.
+
nodeStats.successfulSskInsertBytesSentAverage.report(sent);
}
- throw new
LowLevelPutException(LowLevelPutException.COLLISION);
- } else {
- if(cache) {
+
+ if(is.hasCollided()) {
+ // Store it locally so it can be fetched
immediately, and overwrites any locally inserted.
try {
- node.storeInsert(block);
- } catch (KeyCollisionException e) {
- throw new
LowLevelPutException(LowLevelPutException.COLLISION);
+ node.storeInsert(is.getBlock());
+ } catch(KeyCollisionException e) {
+ // Impossible
}
- }
- }
+ throw new
LowLevelPutException(LowLevelPutException.COLLISION);
+ } else
+ if(cache)
+ try {
+ node.storeInsert(block);
+ } catch(KeyCollisionException e) {
+ throw new
LowLevelPutException(LowLevelPutException.COLLISION);
+ }
-
- if(status == SSKInsertSender.SUCCESS) {
- Logger.normal(this, "Succeeded inserting "+block);
- return;
- } else {
- String msg = "Failed inserting "+block+" :
"+is.getStatusString();
- if(status == CHKInsertSender.ROUTE_NOT_FOUND)
- msg += " - this is normal on small networks;
the data will still be propagated, but it can't find the 20+ nodes needed for
full success";
- if(is.getStatus() != SSKInsertSender.ROUTE_NOT_FOUND)
- Logger.error(this, msg);
- else
- Logger.normal(this, msg);
- switch(is.getStatus()) {
- case SSKInsertSender.NOT_FINISHED:
- Logger.error(this, "IS still running in
putCHK!: "+is);
- throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
- case SSKInsertSender.GENERATED_REJECTED_OVERLOAD:
- case SSKInsertSender.TIMED_OUT:
- throw new
LowLevelPutException(LowLevelPutException.REJECTED_OVERLOAD);
- case SSKInsertSender.ROUTE_NOT_FOUND:
- throw new
LowLevelPutException(LowLevelPutException.ROUTE_NOT_FOUND);
- case SSKInsertSender.ROUTE_REALLY_NOT_FOUND:
- throw new
LowLevelPutException(LowLevelPutException.ROUTE_REALLY_NOT_FOUND);
- case SSKInsertSender.INTERNAL_ERROR:
- throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
- default:
- Logger.error(this, "Unknown CHKInsertSender
code in putSSK: "+is.getStatus()+" on "+is);
- throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
+
+ if(status == SSKInsertSender.SUCCESS) {
+ Logger.normal(this, "Succeeded inserting " +
block);
+ return;
+ } else {
+ String msg = "Failed inserting " + block + " :
" + is.getStatusString();
+ if(status == CHKInsertSender.ROUTE_NOT_FOUND)
+ msg += " - this is normal on small
networks; the data will still be propagated, but it can't find the 20+ nodes
needed for full success";
+ if(is.getStatus() !=
SSKInsertSender.ROUTE_NOT_FOUND)
+ Logger.error(this, msg);
+ else
+ Logger.normal(this, msg);
+ switch(is.getStatus()) {
+ case SSKInsertSender.NOT_FINISHED:
+ Logger.error(this, "IS still
running in putCHK!: " + is);
+ throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
+ case
SSKInsertSender.GENERATED_REJECTED_OVERLOAD:
+ case SSKInsertSender.TIMED_OUT:
+ throw new
LowLevelPutException(LowLevelPutException.REJECTED_OVERLOAD);
+ case SSKInsertSender.ROUTE_NOT_FOUND:
+ throw new
LowLevelPutException(LowLevelPutException.ROUTE_NOT_FOUND);
+ case
SSKInsertSender.ROUTE_REALLY_NOT_FOUND:
+ throw new
LowLevelPutException(LowLevelPutException.ROUTE_REALLY_NOT_FOUND);
+ case SSKInsertSender.INTERNAL_ERROR:
+ throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
+ default:
+ Logger.error(this, "Unknown
CHKInsertSender code in putSSK: " + is.getStatus() + " on " + is);
+ throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
+ }
}
- }
} finally {
node.unlockUID(uid, true, true, true, false, true);
}
@@ -980,11 +966,11 @@
public HighLevelSimpleClient makeClient(short prioClass) {
return makeClient(prioClass, false);
}
-
+
public HighLevelSimpleClient makeClient(short prioClass, boolean
forceDontIgnoreTooManyPathComponents) {
return new HighLevelSimpleClientImpl(this, archiveManager,
tempBucketFactory, random, !Node.DONT_CACHE_LOCAL_REQUESTS, prioClass,
forceDontIgnoreTooManyPathComponents, clientSlowSerialExecutor);
}
-
+
public FCPServer getFCPServer() {
return fcpServer;
}
@@ -996,8 +982,8 @@
public SimpleToadletServer getToadletContainer() {
return toadletContainer;
}
-
- public TextModeClientInterfaceServer getTextModeClientInterface(){
+
+ public TextModeClientInterfaceServer getTextModeClientInterface() {
return tmci;
}
@@ -1008,7 +994,7 @@
public TextModeClientInterface getDirectTMCI() {
return directTMCI;
}
-
+
public void setDirectTMCI(TextModeClientInterface i) {
this.directTMCI = i;
}
@@ -1023,7 +1009,8 @@
public void queueRandomReinsert(KeyBlock block) {
SimpleSendableInsert ssi = new SimpleSendableInsert(this,
block, RequestStarter.MAXIMUM_PRIORITY_CLASS);
- if(logMINOR) Logger.minor(this, "Queueing random reinsert for
"+block+" : "+ssi);
+ if(logMINOR)
+ Logger.minor(this, "Queueing random reinsert for " +
block + " : " + ssi);
ssi.schedule();
}
@@ -1031,7 +1018,7 @@
Logger.normal(this, "Trying to write config to disk", new
Exception("debug"));
node.config.store();
}
-
+
public boolean isTestnetEnabled() {
return node.isTestnetEnabled();
}
@@ -1051,33 +1038,38 @@
}
public FilterCallback createFilterCallback(URI uri, FoundURICallback
cb) {
- if(logMINOR) Logger.minor(this, "Creating filter callback:
"+uri+", "+cb);
+ if(logMINOR)
+ Logger.minor(this, "Creating filter callback: " + uri +
", " + cb);
return new GenericReadFilterCallback(uri, cb);
}
-
+
public int maxBackgroundUSKFetchers() {
return maxBackgroundUSKFetchers;
}
-
+
public boolean lazyResume() {
return lazyResume;
}
-
+
public boolean allowDownloadTo(File filename) {
- if(downloadAllowedEverywhere) return true;
- if(includeDownloadDir) {
- if(FileUtil.isParent(downloadDir, filename)) return
true;
+ if(downloadAllowedEverywhere)
+ return true;
+ if(includeDownloadDir)
+ if(FileUtil.isParent(downloadDir, filename))
+ return true;
+ for(int i = 0; i < downloadAllowedDirs.length; i++) {
+ if(FileUtil.isParent(downloadAllowedDirs[i], filename))
+ return true;
}
- for(int i=0;i<downloadAllowedDirs.length;i++) {
- if(FileUtil.isParent(downloadAllowedDirs[i], filename))
return true;
- }
return false;
}
public boolean allowUploadFrom(File filename) {
- if(uploadAllowedEverywhere) return true;
- for(int i=0;i<uploadAllowedDirs.length;i++) {
- if(FileUtil.isParent(uploadAllowedDirs[i], filename))
return true;
+ if(uploadAllowedEverywhere)
+ return true;
+ for(int i = 0; i < uploadAllowedDirs.length; i++) {
+ if(FileUtil.isParent(uploadAllowedDirs[i], filename))
+ return true;
}
return false;
}
@@ -1085,11 +1077,11 @@
public SimpleFieldSet persistThrottlesToFieldSet() {
return requestStarters.persistToFieldSet();
}
-
+
public Ticker getTicker() {
return node.ps;
}
-
+
public Executor getExecutor() {
return node.executor;
}
@@ -1097,7 +1089,7 @@
public File getPersistentTempDir() {
return persistentTempBucketFactory.getDir();
}
-
+
public File getTempDir() {
return tempDir;
}
@@ -1122,17 +1114,13 @@
* If the client layer wants it, or force is enabled, queue it. */
public void maybeQueueOfferedKey(Key key, boolean force) {
ClientRequestScheduler sched =
- key instanceof NodeSSK ?
- requestStarters.sskFetchScheduler :
-
requestStarters.chkFetchScheduler;
+ key instanceof NodeSSK ?
requestStarters.sskFetchScheduler : requestStarters.chkFetchScheduler;
sched.maybeQueueOfferedKey(key, force);
}
public void dequeueOfferedKey(Key key) {
ClientRequestScheduler sched =
- key instanceof NodeSSK ?
- requestStarters.sskFetchScheduler :
-
requestStarters.chkFetchScheduler;
+ key instanceof NodeSSK ?
requestStarters.sskFetchScheduler : requestStarters.chkFetchScheduler;
sched.dequeueOfferedKey(key);
}
Modified: branches/saltedhashstore/freenet/src/freenet/node/NodeCrypto.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/NodeCrypto.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/NodeCrypto.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -32,6 +32,7 @@
import freenet.keys.InsertableClientSSK;
import freenet.support.Base64;
import freenet.support.Fields;
+import freenet.support.HexUtil;
import freenet.support.IllegalBase64Exception;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
@@ -365,8 +366,16 @@
}
}
+ public static boolean DISABLE_GROUP_STRIP = false;
+
private byte[] myCompressedRef(boolean setup, boolean heavySetup,
boolean forARK) {
SimpleFieldSet fs = exportPublicFieldSet(setup, heavySetup,
forARK);
+ // TODO: we should change that to ((setup || heavySetup) &&
!forARK) when all the nodes have the new code
+ boolean shouldStripGroup = heavySetup &&
Global.DSAgroupBigA.equals(cryptoGroup);
+ if(DISABLE_GROUP_STRIP) shouldStripGroup = false;
+ if(shouldStripGroup)
+ fs.removeSubset("dsaGroup");
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DeflaterOutputStream gis;
gis = new DeflaterOutputStream(baos);
@@ -380,9 +389,19 @@
}
byte[] buf = baos.toByteArray();
- byte[] obuf = new byte[buf.length + 1];
- obuf[0] = 1;
- System.arraycopy(buf, 0, obuf, 1, buf.length);
+ if(buf.length >= 4096)
+ throw new IllegalStateException("We are attempting to
send a "+buf.length+" bytes big reference!");
+ byte[] obuf = new byte[buf.length + 1 + (shouldStripGroup ? 1 :
0)];
+ int offset = 0;
+ if(shouldStripGroup) {
+ obuf[offset++] = 0x3; // compressed noderef - group
+ int dsaGroupIndex = Global.GROUP_INDEX_BIG_A;
+ if(logMINOR)
+ Logger.minor(this, "We are stripping the group
from the reference as it's a known group (groupIndex="+dsaGroupIndex+')');
+ obuf[offset++] = (byte)(dsaGroupIndex & 0xff);
+ } else
+ obuf[offset++] = 0x01; // compressed noderef
+ System.arraycopy(buf, 0, obuf, offset, buf.length);
if(logMINOR)
Logger.minor(this,
"myCompressedRef("+setup+","+heavySetup+") returning "+obuf.length+" bytes");
return obuf;
Modified: branches/saltedhashstore/freenet/src/freenet/node/NodeDispatcher.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/NodeDispatcher.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/NodeDispatcher.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -98,15 +98,6 @@
if(logMINOR) Logger.minor(this, "Lost
connection replying to "+m);
}
return true;
- }else if(spec == DMT.FNPLinkPing) {
- long id = m.getLong(DMT.PING_SEQNO);
- Message msg = DMT.createFNPLinkPong(id);
- try {
- source.sendAsync(msg, null, 0, pingCounter);
- } catch (NotConnectedException e) {
- // Ignore
- }
- return true;
} else if (spec == DMT.FNPStoreSecret) {
return node.netid.handleStoreSecret(m);
} else if(spec == DMT.FNPSecretPing) {
@@ -163,8 +154,21 @@
double newLoc = m.getDouble(DMT.LOCATION);
ShortBuffer buffer = ((ShortBuffer)
m.getObject(DMT.PEER_LOCATIONS));
double[] locs = Fields.bytesToDoubles(buffer.getData());
- source.updateLocation(newLoc, locs);
+ /**
+ * Do *NOT* remove the sanity check below!
+ * @see
http://archives.freenetproject.org/message/20080718.144240.359e16d3.en.html
+ */
+ if((OpennetManager.MAX_PEERS_FOR_SCALING < locs.length)
&& (source.isOpennet())) {
+ Logger.error(this, "We received "+locs.length+
" locations from "+source.toString()+"! That should *NOT* happen!");
+ source.forceDisconnect(true);
+ return true;
+ } else {
+ // We are on darknet and we trust our peers OR
we are on opennet
+ // and the amount of locations sent to us seems
reasonable
+ source.updateLocation(newLoc, locs);
+ }
+
return true;
}
@@ -378,6 +382,7 @@
// failure table even though we didn't accept any of
them.
return true;
}
+
nodeStats.reportIncomingRequestLocation(key.toNormalizedDouble());
//if(!node.lockUID(id)) return false;
RequestHandler rh = new RequestHandler(m, source, id, node,
htl, key);
node.executor.execute(rh, "RequestHandler for UID "+id+" on
"+node.getDarknetPortNumber());
Modified: branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/NodeStarter.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -149,7 +149,7 @@
SSL.init(sslConfig);
try {
- node = new Node(cfg, null, logConfigHandler, this,
executor);
+ node = new Node(cfg, null, null, logConfigHandler,
this, executor);
node.start(false);
System.out.println("Node initialization completed.");
} catch(NodeInitException e) {
@@ -331,13 +331,13 @@
* @throws NodeInitException If the node cannot start up for some
reason, most
* likely a config problem.
*/
- public static Node createTestNode(int port, String testName, boolean
doClient,
+ public static Node createTestNode(int port, int opennetPort, String
testName, boolean doClient,
boolean doSwapping, boolean disableProbabilisticHTLs, short
maxHTL,
int dropProb, RandomSource random, Executor executor, int
threadLimit,
long storeSize, boolean ramStore, boolean enableSwapping,
boolean enableARKs,
boolean enableULPRs, boolean enablePerNodeFailureTables,
boolean enableSwapQueueing, boolean enablePacketCoalescing,
- int outputBandwidthLimit, boolean enableFOAF) throws
NodeInitException {
+ int outputBandwidthLimit, boolean enableFOAF, boolean
connectToSeednodes) throws NodeInitException {
File baseDir = new File(testName);
File portDir = new File(baseDir, Integer.toString(port));
@@ -387,14 +387,20 @@
configFS.put("node.enablePacketCoalescing",
enablePacketCoalescing);
configFS.put("node.publishOurPeersLocation", enableFOAF);
configFS.put("node.routeAccordingToOurPeersLocation",
enableFOAF);
-
+ configFS.put("node.opennet.enabled", opennetPort > 0);
+ configFS.put("node.opennet.listenPort", opennetPort);
+ configFS.put("node.opennet.alwaysAllowLocalAddresses", true);
+ configFS.put("node.opennet.oneConnectionPerIP", false);
+ configFS.put("node.opennet.assumeNATed", true);
+ configFS.put("node.opennet.connectToSeednodes",
connectToSeednodes);
+
PersistentConfig config = new PersistentConfig(configFS);
- Node node = new Node(config, random, null, null, executor);
+ Node node = new Node(config, random, random, null, null,
executor);
//All testing environments connect the nodes as they want, even
if the old setup is restored, it is not desired.
node.peers.removeAllPeers();
return node;
- }
+ }
}
Modified: branches/saltedhashstore/freenet/src/freenet/node/NodeStats.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/NodeStats.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/NodeStats.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -53,6 +53,14 @@
* block send time.
*/
public static final int MAX_INTERREQUEST_TIME = 10*1000;
+ /** Locations of incoming requests */
+ private final int[] incomingRequestsByLoc = new int[10];
+ private int incomingRequestsAccounted = 0;
+ /** Locations of outgoing requests */
+ private final int[] outgoingLocalRequestByLoc = new int[10];
+ private int outgoingLocalRequestsAccounted = 0;
+ private final int[] outgoingRequestByLoc = new int[10];
+ private int outgoingRequestsAccounted = 0;
private final Node node;
private MemoryChecker myMemoryChecker;
@@ -1669,4 +1677,60 @@
if(logMINOR) Logger.minor(this, "Successful receives:
"+blockTransferPSuccess.currentValue()+"
count="+blockTransferPSuccess.countReports());
}
+ public void reportIncomingRequestLocation(double loc) {
+ assert((loc > 0) && (loc < 1.0));
+
+ synchronized(incomingRequestsByLoc) {
+
incomingRequestsByLoc[(int)Math.floor(loc*incomingRequestsByLoc.length)]++;
+ incomingRequestsAccounted++;
+ }
+ }
+
+ public int[] getIncomingRequestLocation(int[] retval) {
+ int[] result = new int[incomingRequestsByLoc.length];
+ synchronized(incomingRequestsByLoc) {
+ System.arraycopy(incomingRequestsByLoc, 0, result, 0,
incomingRequestsByLoc.length);
+ retval[0] = incomingRequestsAccounted;
+ }
+
+ return result;
+ }
+
+ public void reportOutgoingLocalRequestLocation(double loc) {
+ assert((loc > 0) && (loc < 1.0));
+
+ synchronized(outgoingLocalRequestByLoc) {
+
outgoingLocalRequestByLoc[(int)Math.floor(loc*outgoingLocalRequestByLoc.length)]++;
+ outgoingLocalRequestsAccounted++;
+ }
+ }
+
+ public int[] getOutgoingLocalRequestLocation(int[] retval) {
+ int[] result = new int[outgoingLocalRequestByLoc.length];
+ synchronized(outgoingLocalRequestByLoc) {
+ System.arraycopy(outgoingLocalRequestByLoc, 0, result,
0, outgoingLocalRequestByLoc.length);
+ retval[0] = outgoingLocalRequestsAccounted;
+ }
+
+ return result;
+ }
+
+ public void reportOutgoingRequestLocation(double loc) {
+ assert((loc > 0) && (loc < 1.0));
+
+ synchronized(outgoingRequestByLoc) {
+
outgoingRequestByLoc[(int)Math.floor(loc*outgoingRequestByLoc.length)]++;
+ outgoingRequestsAccounted++;
+ }
+ }
+
+ public int[] getOutgoingRequestLocation(int[] retval) {
+ int[] result = new int[outgoingRequestByLoc.length];
+ synchronized(outgoingRequestByLoc) {
+ System.arraycopy(outgoingRequestByLoc, 0, result, 0,
outgoingRequestByLoc.length);
+ retval[0] = outgoingRequestsAccounted;
+ }
+
+ return result;
+ }
}
Modified: branches/saltedhashstore/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/OpennetManager.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/OpennetManager.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -65,46 +65,46 @@
/** Only drop a connection after at least this many successful requests
*/
// FIXME should be a function of # opennet peers? max # opennet peers?
...
- static final int MIN_SUCCESS_BETWEEN_DROP_CONNS = 10;
+ public static final int MIN_SUCCESS_BETWEEN_DROP_CONNS = 10;
/** Chance of resetting path folding (for plausible deniability) is 1
in this number. */
- static final int RESET_PATH_FOLDING_PROB = 20;
+ public static final int RESET_PATH_FOLDING_PROB = 20;
/** Don't re-add a node until it's been up and disconnected for at
least this long */
- static final int DONT_READD_TIME = 60*1000;
+ public static final int DONT_READD_TIME = 60*1000;
/** Don't drop a node until it's at least this old */
- static final int DROP_MIN_AGE = 300*1000;
+ public static final int DROP_MIN_AGE = 300*1000;
/** Don't drop a node until this long after startup */
- static final int DROP_STARTUP_DELAY = 120*1000;
+ public static final int DROP_STARTUP_DELAY = 120*1000;
/** Don't drop a node until this long after losing connection to it.
* This should be long enough to cover a typical reboot, but not so
long as to result in a lot
* of disconnected nodes in the Strangers list. */
- static final int DROP_DISCONNECT_DELAY = 10*60*1000;
+ public static final int DROP_DISCONNECT_DELAY = 10*60*1000;
/** But if it has disconnected more than once in this period, allow it
to be dropped anyway */
- static final int DROP_DISCONNECT_DELAY_COOLDOWN = 60*60*1000;
+ public static final int DROP_DISCONNECT_DELAY_COOLDOWN = 60*60*1000;
/** Every DROP_CONNECTED_TIME, we may drop a peer even though it is
connected */
- static final int DROP_CONNECTED_TIME = 10*60*1000;
+ public static final int DROP_CONNECTED_TIME = 10*60*1000;
/** Minimum time between offers, if we have maximum peers. Less than
the above limits,
* since an offer may not be accepted. */
- static final int MIN_TIME_BETWEEN_OFFERS = 30*1000;
+ public static final int MIN_TIME_BETWEEN_OFFERS = 30*1000;
private static boolean logMINOR;
/** How big to pad opennet noderefs to? If they are bigger than this
then we won't send them. */
- static final int PADDED_NODEREF_SIZE = 3072;
+ public static final int PADDED_NODEREF_SIZE = 3072;
/** Allow for future expansion. However at any given time all noderefs
should be PADDED_NODEREF_SIZE */
- static final int MAX_OPENNET_NODEREF_LENGTH = 32768;
+ public static final int MAX_OPENNET_NODEREF_LENGTH = 32768;
/** Enable scaling of peers with bandwidth? */
- static final boolean ENABLE_PEERS_PER_KB_OUTPUT = false;
+ public static final boolean ENABLE_PEERS_PER_KB_OUTPUT = false;
/** Target bandwidth usage - above this, we use MAX_PEERS_FOR_SCALING */
- static final int TARGET_BANDWIDTH_USAGE = 20*1024; // 20 peers at
20K/sec.
+ public static final int TARGET_BANDWIDTH_USAGE = 20*1024; // 20 peers
at 20K/sec.
/** Minimum number of peers */
- static final int MIN_PEERS_FOR_SCALING = 10;
+ public static final int MIN_PEERS_FOR_SCALING = 10;
/** Maximum number of peers */
- static final int MAX_PEERS_FOR_SCALING = 20;
+ public static final int MAX_PEERS_FOR_SCALING = 20;
private final long creationTime;
- public OpennetManager(Node node, NodeCryptoConfig opennetConfig, long
startupTime) throws NodeInitException {
+ public OpennetManager(Node node, NodeCryptoConfig opennetConfig, long
startupTime, boolean enableAnnouncement) throws NodeInitException {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
this.creationTime = System.currentTimeMillis();
this.node = node;
@@ -154,7 +154,7 @@
writeFile(nodeFile, backupNodeFile);
// Read old peers
node.peers.tryReadPeers(new File(node.nodeDir,
"openpeers-old-"+crypto.portNumber).toString(), crypto, this, true, true);
- announcer = new Announcer(this);
+ announcer = (enableAnnouncement ? new Announcer(this) : null);
if(logMINOR) {
Logger.minor(this, "My full compressed ref:
"+crypto.myCompressedFullRef().length);
Logger.minor(this, "My full setup ref:
"+crypto.myCompressedSetupRef().length);
@@ -223,14 +223,16 @@
public void start() {
crypto.start(node.disableHangCheckers);
- announcer.start();
+ if(announcer!= null)
+ announcer.start();
}
/**
* Called when opennet is disabled
*/
public void stop(boolean purge) {
- announcer.stop();
+ if(announcer != null)
+ announcer.stop();
crypto.stop();
if(purge)
node.peers.removeOpennetPeers();
Modified: branches/saltedhashstore/freenet/src/freenet/node/PeerManager.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/PeerManager.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/PeerManager.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -79,6 +79,9 @@
private long nextRoutableConnectionStatsUpdateTime = -1;
/** routableConnectionStats update interval (milliseconds) */
private static final long routableConnectionStatsUpdateInterval = 7 *
1000; // 7 seconds
+ /** number of samples we have to do stats on peer-selection */
+ private long numberOfSelectionSamples = 0;
+
public static final int PEER_NODE_STATUS_CONNECTED = 1;
public static final int PEER_NODE_STATUS_ROUTING_BACKED_OFF = 2;
public static final int PEER_NODE_STATUS_TOO_NEW = 3;
@@ -560,7 +563,7 @@
* @return An array of the current locations (as doubles) of all
* our connected peers or double[0] if
Node.shallWePublishOurPeersLocation() is false
*/
- public double[] getPeerLocationDoubles(boolean pruneBackedOffedPeers) {
+ public double[] getPeerLocationDoubles(boolean pruneBackedOffPeers) {
double[] locs;
if(!node.shallWePublishOurPeersLocation())
return new double[0];
@@ -572,7 +575,7 @@
int x = 0;
for(int i = 0; i < conns.length; i++) {
if(conns[i].isRoutable()) {
- if(!conns[i].shouldBeExcludedFromPeerList()) {
+ if(!pruneBackedOffPeers ||
!conns[i].shouldBeExcludedFromPeerList()) {
locs[x++] = conns[i].getLocation();
}
}
@@ -955,7 +958,7 @@
PeerNode best = closestNotBackedOff;
- if(best == null)
+ if(best == null) {
if(leastRecentlyTimedOut != null) {
// FIXME downgrade to DEBUG
best = leastRecentlyTimedOut;
@@ -970,10 +973,12 @@
if(logMINOR)
Logger.minor(this, "Using least
recently failed in-timeout-period backed-off peer for key: " +
best.shortToString() + " for " + key);
}
+ }
- //racy... getLocation() could have changed
- if(calculateMisrouting)
- if(best != null) {
+ // DO NOT PUT A ELSE HERE: we need to re-check the value!
+ if(best != null) {
+ //racy... getLocation() could have changed
+ if(calculateMisrouting) {
node.nodeStats.routingMissDistance.report(Location.distance(best,
closest.getLocation()));
int numberOfConnected =
getPeerNodeStatusSize(PEER_NODE_STATUS_CONNECTED, false);
int numberOfRoutingBackedOff =
getPeerNodeStatusSize(PEER_NODE_STATUS_ROUTING_BACKED_OFF, false);
@@ -981,12 +986,17 @@
node.nodeStats.backedOffPercent.report((double) numberOfRoutingBackedOff /
(double) (numberOfRoutingBackedOff + numberOfConnected));
}
- //racy... getLocation() could have changed
- if(best != null && addUnpickedLocsTo != null)
- //Add the location which we did not pick, if it exists.
- if(closestNotBackedOff != null && closestBackedOff !=
null)
- addUnpickedLocsTo.add(new
Double(closestBackedOff.getLocation()));
+ //racy... getLocation() could have changed
+ if(addUnpickedLocsTo != null)
+ //Add the location which we did not pick, if it
exists.
+ if(closestNotBackedOff != null &&
closestBackedOff != null)
+ addUnpickedLocsTo.add(new
Double(closestBackedOff.getLocation()));
+ //TODO: synchronize! ; store the stats here instead of
into PeerNode?
+ best.incrementNumberOfSelections();
+ numberOfSelectionSamples++;
+ }
+
return best;
}
@@ -1003,7 +1013,6 @@
for(int i = 0; i < peers.length; i++) {
PeerNode pn = peers[i];
status[i] = pn.getStatus(true).toString();
- Version.seenVersion(pn.getVersion());
}
Arrays.sort(status);
for(int i = 0; i < status.length; i++) {
@@ -1575,13 +1584,13 @@
return (DarknetPeerNode[]) v.toArray(new
DarknetPeerNode[v.size()]);
}
- public Vector getConnectedSeedServerPeersVector(HashSet exclude) {
+ public Vector<SeedServerPeerNode>
getConnectedSeedServerPeersVector(HashSet exclude) {
PeerNode[] peers;
synchronized(this) {
peers = myPeers;
}
// FIXME optimise! Maybe maintain as a separate list?
- Vector v = new Vector(myPeers.length);
+ Vector<SeedServerPeerNode> v = new
Vector<SeedServerPeerNode>(myPeers.length);
for(int i = 0; i < peers.length; i++) {
if(peers[i] instanceof SeedServerPeerNode) {
if(exclude != null &&
exclude.contains(peers[i].getIdentity())) {
@@ -1594,7 +1603,7 @@
Logger.minor(this, "Not
including in getConnectedSeedServerPeersVector() as disconnected: " +
peers[i].userToString());
continue;
}
- v.add(peers[i]);
+ v.add((SeedServerPeerNode)peers[i]);
}
}
return v;
@@ -1781,6 +1790,16 @@
}
return count;
}
+
+ public int countSeednodes() {
+ int count = 0;
+ for(PeerNode peer : myPeers) {
+ if(peer instanceof SeedServerPeerNode ||
+ peer instanceof SeedClientPeerNode)
+ count++;
+ }
+ return count;
+ }
public int countBackedOffPeers() {
PeerNode[] peers = myPeers;
@@ -1804,4 +1823,8 @@
}
return null;
}
+
+ public long getNumberOfSelectionSamples() {
+ return numberOfSelectionSamples;
+ }
}
Modified: branches/saltedhashstore/freenet/src/freenet/node/PeerNode.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/PeerNode.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/PeerNode.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -143,12 +143,17 @@
private long timeLastSentPacket;
/** When did we last receive a packet? */
private long timeLastReceivedPacket;
+ /** When did we last receive a non-auth packet? */
+ private long timeLastReceivedDataPacket;
/** When was isConnected() last true? */
private long timeLastConnected;
/** When was isRoutingCompatible() last true? */
private long timeLastRoutable;
/** Time added or restarted (reset on startup unlike peerAddedTime) */
private long timeAddedOrRestarted;
+ /** Number of time that peer has been selected by the routing algorithm
*/
+ private long numberOfSelections = 0;
+
/** Are we connected? If not, we need to start trying to
* handshake.
*/
@@ -1102,6 +1107,10 @@
public synchronized long lastReceivedPacketTime() {
return timeLastReceivedPacket;
}
+
+ public synchronized long lastReceivedDataPacketTime() {
+ return timeLastReceivedDataPacket;
+ }
public synchronized long timeLastConnected() {
return timeLastConnected;
@@ -1168,7 +1177,7 @@
*/
public boolean disconnected(boolean dumpMessageQueue, boolean
dumpTrackers) {
final long now = System.currentTimeMillis();
- Logger.normal(this, "Disconnected " + this);
+ Logger.normal(this, "Disconnected " + this, new
Exception("debug"));
node.usm.onDisconnect(this);
node.failureTable.onDisconnect(this);
node.peers.disconnected(this);
@@ -1492,7 +1501,7 @@
*/
public boolean ping(int pingID) throws NotConnectedException {
Message ping = DMT.createFNPPing(pingID);
- node.usm.send(this, ping, null);
+ node.usm.send(this, ping, node.dispatcher.pingCounter);
Message msg;
try {
msg =
node.usm.waitFor(MessageFilter.create().setTimeout(2000).setType(DMT.FNPPong).setField(DMT.PING_SEQNO,
pingID), null);
@@ -1762,8 +1771,9 @@
* @throws NotConnectedException
* @param dontLog If true, don't log an error or throw an exception if
we are not connected. This
* can be used in handshaking when the connection hasn't been verified
yet.
+ * @param dataPacket If this is a real packet, as opposed to a handshake
packet.
*/
- void receivedPacket(boolean dontLog) {
+ void receivedPacket(boolean dontLog, boolean dataPacket) {
synchronized(this) {
if((!isConnected) && (!dontLog)) {
// Don't log if we are disconnecting, because
receiving packets during disconnecting is normal.
@@ -1782,6 +1792,8 @@
long now = System.currentTimeMillis();
synchronized(this) {
timeLastReceivedPacket = now;
+ if(dataPacket)
+ timeLastReceivedDataPacket = now;
}
}
@@ -1913,6 +1925,7 @@
messagesTellDisconnected =
(MessageItem[]) messagesToSendNow.toArray(new
MessageItem[messagesToSendNow.size()]);
messagesToSendNow.clear();
}
+ this.offeredMainJarVersion = 0;
} // else it's a rekey
if(unverified) {
if(unverifiedTracker != null) {
@@ -1972,7 +1985,7 @@
" old: " + previousTracker + " unverified: " +
unverifiedTracker + " bootID: " + thisBootID + " for " + shortToString());
// Received a packet
- receivedPacket(unverified);
+ receivedPacket(unverified, false);
setPeerNodeStatus(now);
@@ -2246,42 +2259,36 @@
int firstByte = data[offset];
offset++;
length--;
- if((firstByte & 2) == 2) {
- int groupIndex = Fields.bytesToInt(data, offset);
- offset += 4;
- length -= 4;
+ if((firstByte & 0x2) == 2) {
+ int groupIndex = (data[offset] & 0xff);
+ offset++;
+ length--;
group = Global.getGroup(groupIndex);
if(group == null) throw new FSParseException("Unknown
group number "+groupIndex);
+ if(logMINOR)
+ Logger.minor(PeerNode.class, "DSAGroup set to
"+group.fingerprintToString()+ " using the group-index "+groupIndex);
}
// Is it compressed?
if((firstByte & 1) == 1) {
- // Gzipped
- Inflater i = new Inflater();
- i.setInput(data, offset, length);
- byte[] output = new byte[4096];
- int outputPointer = 0;
- while(true) {
- try {
- int x = i.inflate(output,
outputPointer, output.length - outputPointer);
- if(x == output.length - outputPointer) {
- // More to decompress!
- byte[] newOutput = new
byte[output.length * 2];
- System.arraycopy(output, 0,
newOutput, 0, output.length);
- continue;
- } else {
- // Finished
- data = output;
- offset = 0;
- length = outputPointer + x;
- break;
- }
- } catch(DataFormatException e) {
- throw new FSParseException("Invalid
compressed data");
- }
+ try {
+ // Gzipped
+ Inflater i = new Inflater();
+ i.setInput(data, offset, length);
+ // We shouldn't ever need a 4096 bytes long ref!
+ byte[] output = new byte[4096];
+ length = i.inflate(output, 0, output.length);
+ // Finished
+ data = output;
+ offset = 0;
+ if(logMINOR)
+ Logger.minor(PeerNode.class, "We have
decompressed a "+length+" bytes big reference.");
+ } catch(DataFormatException e) {
+ throw new FSParseException("Invalid compressed
data");
}
}
if(logMINOR)
- Logger.minor(PeerNode.class, "Reference: " + new
String(data, offset, length) + '(' + length + ')');
+ Logger.minor(PeerNode.class, "Reference: " +
HexUtil.bytesToHex(data, offset, length) + '(' + length + ')');
+
// Now decode it
ByteArrayInputStream bais = new ByteArrayInputStream(data,
offset, length);
InputStreamReader isr;
@@ -2293,8 +2300,11 @@
BufferedReader br = new BufferedReader(isr);
try {
SimpleFieldSet fs = new SimpleFieldSet(br, false, true);
- if(group != null)
- fs.putAllOverwrite(group.asFieldSet());
+ if(group != null) {
+ SimpleFieldSet sfs = new SimpleFieldSet(true);
+ sfs.put("dsaGroup", group.asFieldSet());
+ fs.putAllOverwrite(sfs);
+ }
return fs;
} catch(IOException e) {
FSParseException ex = new FSParseException("Impossible:
" + e);
@@ -3979,4 +3989,22 @@
public short getUptime() {
return (short)(((int)uptime) & 0xFF);
}
+
+ public long getNumberOfSelections() {
+ return numberOfSelections;
+ }
+
+ public void incrementNumberOfSelections() {
+ numberOfSelections++;
+ }
+
+ private long offeredMainJarVersion;
+
+ public void setMainJarOfferedVersion(long mainJarVersion) {
+ offeredMainJarVersion = mainJarVersion;
+ }
+
+ public long getMainJarOfferedVersion() {
+ return offeredMainJarVersion;
+ }
}
Modified: branches/saltedhashstore/freenet/src/freenet/node/PeerNodeStatus.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/PeerNodeStatus.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/PeerNodeStatus.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -93,6 +93,8 @@
private final long resendBytesSent;
private final int reportedUptimePercentage;
+
+ private final long numberOfSelections;
PeerNodeStatus(PeerNode peerNode, boolean noHeavy) {
if(Logger.shouldLog(Logger.MINOR, this)) {
@@ -106,6 +108,7 @@
peerAddress = p.getFreenetAddress().toString();
peerPort = p.getPort();
}
+ this.numberOfSelections = peerNode.getNumberOfSelections();
this.statusValue = peerNode.getPeerNodeStatus();
this.statusName = peerNode.getPeerNodeStatusString();
this.statusCSSName = peerNode.getPeerNodeStatusCSSClassName();
@@ -393,5 +396,8 @@
public int getReportedUptimePercentage() {
return reportedUptimePercentage;
}
-
+
+ public long getNumberOfSelections() {
+ return numberOfSelections;
+ }
}
Modified: branches/saltedhashstore/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/RequestHandler.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/RequestHandler.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -33,184 +33,187 @@
public class RequestHandler implements PrioRunnable, ByteCounter,
RequestSender.Listener {
private static boolean logMINOR;
- final Message req;
- final Node node;
- final long uid;
- private short htl;
- final PeerNode source;
- private boolean needsPubKey;
- final Key key;
- private boolean finalTransferFailed = false;
- /** The RequestSender, if any */
- private RequestSender rs;
- private int status = RequestSender.NOT_FINISHED;
- private boolean appliedByteCounts=false;
+ final Message req;
+ final Node node;
+ final long uid;
+ private short htl;
+ final PeerNode source;
+ private boolean needsPubKey;
+ final Key key;
+ private boolean finalTransferFailed = false;
+ /** The RequestSender, if any */
+ private RequestSender rs;
+ private int status = RequestSender.NOT_FINISHED;
+ private boolean appliedByteCounts = false;
private boolean sentRejectedOverload = false;
private long searchStartTime;
private long responseDeadline;
- private BlockTransmitter bt;
-
- public String toString() {
- return super.toString()+" for "+uid;
- }
-
- public RequestHandler(Message m, PeerNode source, long id, Node n, short
htl, Key key) {
- req = m;
- node = n;
- uid = id;
- this.source = source;
- this.htl = htl;
- if(htl <= 0) htl = 1;
- this.key = key;
- if(key instanceof NodeSSK)
- needsPubKey = m.getBoolean(DMT.NEED_PUB_KEY);
- logMINOR = Logger.shouldLog(Logger.MINOR, this);
- receivedBytes(m.receivedByteCount());
- }
+ private BlockTransmitter bt;
- public void run() {
- freenet.support.Logger.OSThread.logPID(this);
- try {
- realRun();
- //The last thing that realRun() does is register as a
request-sender listener, so any exception here is the end.
- } catch (NotConnectedException e) {
- Logger.normal(this, "requestor gone, could not start request
handler wait");
+ public String toString() {
+ return super.toString() + " for " + uid;
+ }
+
+ public RequestHandler(Message m, PeerNode source, long id, Node n,
short htl, Key key) {
+ req = m;
+ node = n;
+ uid = id;
+ this.source = source;
+ this.htl = htl;
+ if(htl <= 0)
+ htl = 1;
+ this.key = key;
+ if(key instanceof NodeSSK)
+ needsPubKey = m.getBoolean(DMT.NEED_PUB_KEY);
+ logMINOR = Logger.shouldLog(Logger.MINOR, this);
+ receivedBytes(m.receivedByteCount());
+ }
+
+ public void run() {
+ freenet.support.Logger.OSThread.logPID(this);
+ try {
+ realRun();
+ //The last thing that realRun() does is register as a
request-sender listener, so any exception here is the end.
+ } catch(NotConnectedException e) {
+ Logger.normal(this, "requestor gone, could not start
request handler wait");
node.removeTransferringRequestHandler(uid);
- node.unlockUID(uid, key instanceof NodeSSK, false, false, false,
false);
- } catch (Throwable t) {
- Logger.error(this, "Caught "+t, t);
+ node.unlockUID(uid, key instanceof NodeSSK, false,
false, false, false);
+ } catch(Throwable t) {
+ Logger.error(this, "Caught " + t, t);
node.removeTransferringRequestHandler(uid);
- node.unlockUID(uid, key instanceof NodeSSK, false, false, false,
false);
- }
- }
-
+ node.unlockUID(uid, key instanceof NodeSSK, false,
false, false, false);
+ }
+ }
private Exception previousApplyByteCountCall;
-
- private void applyByteCounts() {
- if(disconnected) {
- Logger.normal(this, "Not applying byte counts as request source
disconnected during receive");
- return;
- }
- if (appliedByteCounts) {
+
+ private void applyByteCounts() {
+ if(disconnected) {
+ Logger.normal(this, "Not applying byte counts as
request source disconnected during receive");
+ return;
+ }
+ if(appliedByteCounts) {
Logger.error(this, "applyByteCounts already called",
new Exception("error"));
Logger.error(this, "first called here",
previousApplyByteCountCall);
return;
}
- previousApplyByteCountCall=new Exception("first call to
applyByteCounts");
- appliedByteCounts=true;
- if((!finalTransferFailed) && rs != null && status !=
RequestSender.TIMED_OUT && status != RequestSender.GENERATED_REJECTED_OVERLOAD
- && status != RequestSender.INTERNAL_ERROR) {
- int sent, rcvd;
- synchronized(bytesSync) {
- sent = sentBytes;
- rcvd = receivedBytes;
- }
- sent += rs.getTotalSentBytes();
- rcvd += rs.getTotalReceivedBytes();
- if(key instanceof NodeSSK) {
- if(logMINOR) Logger.minor(this, "Remote SSK fetch cost
"+sent+ '/' +rcvd+" bytes ("+status+ ')');
-
node.nodeStats.remoteSskFetchBytesSentAverage.report(sent);
-
node.nodeStats.remoteSskFetchBytesReceivedAverage.report(rcvd);
- if(status == RequestSender.SUCCESS) {
- // Can report both parts, because we had both a
Handler and a Sender
-
node.nodeStats.successfulSskFetchBytesSentAverage.report(sent);
-
node.nodeStats.successfulSskFetchBytesReceivedAverage.report(rcvd);
- }
- } else {
- if(logMINOR) Logger.minor(this, "Remote CHK fetch cost
"+sent+ '/' +rcvd+" bytes ("+status+ ')');
-
node.nodeStats.remoteChkFetchBytesSentAverage.report(sent);
-
node.nodeStats.remoteChkFetchBytesReceivedAverage.report(rcvd);
- if(status == RequestSender.SUCCESS) {
- // Can report both parts, because we had both a
Handler and a Sender
-
node.nodeStats.successfulChkFetchBytesSentAverage.report(sent);
-
node.nodeStats.successfulChkFetchBytesReceivedAverage.report(rcvd);
- }
- }
- }
- }
+ previousApplyByteCountCall = new Exception("first call to
applyByteCounts");
+ appliedByteCounts = true;
+ if((!finalTransferFailed) && rs != null && status !=
RequestSender.TIMED_OUT && status != RequestSender.GENERATED_REJECTED_OVERLOAD
&& status != RequestSender.INTERNAL_ERROR) {
+ int sent, rcvd;
+ synchronized(bytesSync) {
+ sent = sentBytes;
+ rcvd = receivedBytes;
+ }
+ sent += rs.getTotalSentBytes();
+ rcvd += rs.getTotalReceivedBytes();
+ if(key instanceof NodeSSK) {
+ if(logMINOR)
+ Logger.minor(this, "Remote SSK fetch
cost " + sent + '/' + rcvd + " bytes (" + status + ')');
+
node.nodeStats.remoteSskFetchBytesSentAverage.report(sent);
+
node.nodeStats.remoteSskFetchBytesReceivedAverage.report(rcvd);
+ if(status == RequestSender.SUCCESS) {
+ // Can report both parts, because we
had both a Handler and a Sender
+
node.nodeStats.successfulSskFetchBytesSentAverage.report(sent);
+
node.nodeStats.successfulSskFetchBytesReceivedAverage.report(rcvd);
+ }
+ } else {
+ if(logMINOR)
+ Logger.minor(this, "Remote CHK fetch
cost " + sent + '/' + rcvd + " bytes (" + status + ')');
+
node.nodeStats.remoteChkFetchBytesSentAverage.report(sent);
+
node.nodeStats.remoteChkFetchBytesReceivedAverage.report(rcvd);
+ if(status == RequestSender.SUCCESS) {
+ // Can report both parts, because we
had both a Handler and a Sender
+
node.nodeStats.successfulChkFetchBytesSentAverage.report(sent);
+
node.nodeStats.successfulChkFetchBytesReceivedAverage.report(rcvd);
+ }
+ }
+ }
+ }
- private void realRun() throws NotConnectedException {
- if(logMINOR) Logger.minor(this, "Handling a request: "+uid);
-
- Message accepted = DMT.createFNPAccepted(uid);
- source.sendAsync(accepted, null, 0, this);
-
- Object o = node.makeRequestSender(key, htl, uid, source, false, true,
false, false);
- if(o instanceof KeyBlock) {
- returnLocalData((KeyBlock)o);
- return;
- }
-
- if(o == null) { // ran out of htl?
- Message dnf = DMT.createFNPDataNotFound(uid);
- status = RequestSender.DATA_NOT_FOUND; // for byte logging
- node.failureTable.onFinalFailure(key, null, htl,
FailureTable.REJECT_TIME, source);
- sendTerminal(dnf);
- return;
- } else {
- long queueTime = source.getProbableSendQueueTime();
- synchronized(this) {
- rs = (RequestSender) o;
- //If we cannot respond before this time, the 'source' node has
already fatally timed out (and we need not return packets which will not be
claimed)
- searchStartTime = System.currentTimeMillis();
- responseDeadline = searchStartTime +
RequestSender.FETCH_TIMEOUT + queueTime;
- }
- rs.addListener(this);
- }
+ private void realRun() throws NotConnectedException {
+ if(logMINOR)
+ Logger.minor(this, "Handling a request: " + uid);
+
+ Message accepted = DMT.createFNPAccepted(uid);
+ source.sendAsync(accepted, null, 0, this);
+
+ Object o = node.makeRequestSender(key, htl, uid, source, false,
true, false, false);
+ if(o instanceof KeyBlock) {
+ returnLocalData((KeyBlock) o);
+ return;
+ }
+
+ if(o == null) { // ran out of htl?
+ Message dnf = DMT.createFNPDataNotFound(uid);
+ status = RequestSender.DATA_NOT_FOUND; // for byte
logging
+ node.failureTable.onFinalFailure(key, null, htl,
FailureTable.REJECT_TIME, source);
+ sendTerminal(dnf);
+ return;
+ } else {
+ long queueTime = source.getProbableSendQueueTime();
+ synchronized(this) {
+ rs = (RequestSender) o;
+ //If we cannot respond before this time, the
'source' node has already fatally timed out (and we need not return packets
which will not be claimed)
+ searchStartTime = System.currentTimeMillis();
+ responseDeadline = searchStartTime +
RequestSender.FETCH_TIMEOUT + queueTime;
+ }
+ rs.addListener(this);
+ }
}
-
+
public void onReceivedRejectOverload() {
try {
- if(!sentRejectedOverload) {
- // Forward RejectedOverload
+ if(!sentRejectedOverload) {
+ // Forward RejectedOverload
//Note: This message is only decernable from
the terminal messages by the IS_LOCAL flag being false. (!IS_LOCAL)->!Terminal
- Message msg = DMT.createFNPRejectedOverload(uid, false);
- source.sendAsync(msg, null, 0, this);
+ Message msg =
DMT.createFNPRejectedOverload(uid, false);
+ source.sendAsync(msg, null, 0, this);
//If the status changes (e.g. to SUCCESS),
there is little need to send yet another reject overload.
- sentRejectedOverload=true;
- }
- } catch (NotConnectedException e) {
+ sentRejectedOverload = true;
+ }
+ } catch(NotConnectedException e) {
Logger.normal(this, "requestor is gone, can't forward
reject overload");
}
}
-
private boolean disconnected = false;
-
+
public void onCHKTransferBegins() {
try {
- // Is a CHK.
- Message df = DMT.createFNPCHKDataFound(uid, rs.getHeaders());
- source.sendAsync(df, null, 0, this);
-
- PartiallyReceivedBlock prb = rs.getPRB();
- bt =
- new BlockTransmitter(node.usm, source, uid, prb, this);
- node.addTransferringRequestHandler(uid);
+ // Is a CHK.
+ Message df = DMT.createFNPCHKDataFound(uid,
rs.getHeaders());
+ source.sendAsync(df, null, 0, this);
+
+ PartiallyReceivedBlock prb = rs.getPRB();
+ bt =
+ new BlockTransmitter(node.usm, source, uid,
prb, this);
+ node.addTransferringRequestHandler(uid);
bt.sendAsync(node.executor);
- } catch (NotConnectedException e) {
+ } catch(NotConnectedException e) {
synchronized(this) {
disconnected = true;
}
Logger.normal(this, "requestor is gone, can't begin CHK
transfer");
}
}
-
+
private void waitAndFinishCHKTransferOffThread() {
node.executor.execute(new Runnable() {
+
public void run() {
try {
waitAndFinishCHKTransfer();
- } catch (NotConnectedException e) {
+ } catch(NotConnectedException e) {
//for byte logging, since the block is
the 'terminal' message.
applyByteCounts();
unregisterRequestHandlerWithNode();
}
}
- }, "Finish CHK transfer for "+key);
+ }, "Finish CHK transfer for " + key);
}
-
+
private void waitAndFinishCHKTransfer() throws NotConnectedException {
- if (logMINOR) Logger.minor(this, "Waiting for CHK transfer to
finish");
+ if(logMINOR)
+ Logger.minor(this, "Waiting for CHK transfer to
finish");
if(bt.getAsyncExitStatus()) {
status = rs.getStatus();
// Successful CHK transfer, maybe path fold
@@ -223,120 +226,115 @@
unregisterRequestHandlerWithNode();
}
}
-
+
public void onRequestSenderFinished(int status) {
long now = System.currentTimeMillis();
- this.status=status;
-
+ this.status = status;
+
boolean tooLate;
synchronized(this) {
tooLate = responseDeadline > 0 && now >
responseDeadline;
}
-
- if (tooLate) {
+
+ if(tooLate) {
// Offer the data if there is any.
node.failureTable.onFinalFailure(key, null, htl, -1,
source);
PeerNode routedLast = rs == null ? null :
rs.routedLast();
// A certain number of these are normal.
- Logger.normal(this, "requestsender took too long to
respond to requestor ("+TimeUtil.formatTime((now - searchStartTime), 2,
true)+"/"+(rs == null ? "null" : rs.getStatusString())+") routed to
"+(routedLast == null ? "null" : routedLast.shortToString()));
+ Logger.normal(this, "requestsender took too long to
respond to requestor (" + TimeUtil.formatTime((now - searchStartTime), 2, true)
+ "/" + (rs == null ? "null" : rs.getStatusString()) + ") routed to " +
(routedLast == null ? "null" : routedLast.shortToString()));
applyByteCounts();
unregisterRequestHandlerWithNode();
return;
}
-
+
if(status == RequestSender.NOT_FINISHED)
Logger.error(this, "onFinished() but not finished?");
-
+
try {
- switch(status) {
- case RequestSender.NOT_FINISHED:
- case RequestSender.DATA_NOT_FOUND:
- Message dnf = DMT.createFNPDataNotFound(uid);
- sendTerminal(dnf);
- return;
- case RequestSender.RECENTLY_FAILED:
- Message rf = DMT.createFNPRecentlyFailed(uid,
rs.getRecentlyFailedTimeLeft());
- sendTerminal(rf);
- return;
- case RequestSender.GENERATED_REJECTED_OVERLOAD:
- case RequestSender.TIMED_OUT:
- case RequestSender.INTERNAL_ERROR:
- // Locally generated.
- // Propagate back to source who needs to reduce send rate
+ switch(status) {
+ case RequestSender.NOT_FINISHED:
+ case RequestSender.DATA_NOT_FOUND:
+ Message dnf =
DMT.createFNPDataNotFound(uid);
+ sendTerminal(dnf);
+ return;
+ case RequestSender.RECENTLY_FAILED:
+ Message rf =
DMT.createFNPRecentlyFailed(uid, rs.getRecentlyFailedTimeLeft());
+ sendTerminal(rf);
+ return;
+ case RequestSender.GENERATED_REJECTED_OVERLOAD:
+ case RequestSender.TIMED_OUT:
+ case RequestSender.INTERNAL_ERROR:
+ // Locally generated.
+ // Propagate back to source who needs
to reduce send rate
///@bug: we may not want to translate
fatal timeouts into non-fatal timeouts.
- Message reject = DMT.createFNPRejectedOverload(uid, true);
- sendTerminal(reject);
- return;
- case RequestSender.ROUTE_NOT_FOUND:
- // Tell source
- Message rnf = DMT.createFNPRouteNotFound(uid, rs.getHTL());
- sendTerminal(rnf);
- return;
- case RequestSender.SUCCESS:
- if(key instanceof NodeSSK) {
- sendSSK(rs.getHeaders(), rs.getSSKData(),
needsPubKey, ((NodeSSK)rs.getSSKBlock().getKey()).getPubKey());
- } else {
- if(bt == null && !disconnected) {
- // Bug! This is impossible!
- Logger.error(this, "Status is SUCCESS
but we never started a transfer on "+uid);
- // Obviously this node is confused,
send a terminal reject to make sure the requestor is not waiting forever.
- reject = DMT.createFNPRejectedOverload(uid, true);
- sendTerminal(reject);
- } else if(!disconnected) {
- waitAndFinishCHKTransferOffThread();
- }
- }
+ Message reject =
DMT.createFNPRejectedOverload(uid, true);
+ sendTerminal(reject);
return;
- case RequestSender.VERIFY_FAILURE:
- case RequestSender.GET_OFFER_VERIFY_FAILURE:
- if(key instanceof NodeCHK) {
+ case RequestSender.ROUTE_NOT_FOUND:
+ // Tell source
+ Message rnf =
DMT.createFNPRouteNotFound(uid, rs.getHTL());
+ sendTerminal(rnf);
+ return;
+ case RequestSender.SUCCESS:
+ if(key instanceof NodeSSK)
+ sendSSK(rs.getHeaders(),
rs.getSSKData(), needsPubKey, ((NodeSSK)
rs.getSSKBlock().getKey()).getPubKey());
+ else
if(bt == null && !disconnected)
{
- // Bug! This is impossible!
- Logger.error(this, "Status is
VERIFY_FAILURE but we never started a transfer on "+uid);
+ // Bug! This is
impossible!
+ Logger.error(this,
"Status is SUCCESS but we never started a transfer on " + uid);
// Obviously this node
is confused, send a terminal reject to make sure the requestor is not waiting
forever.
- reject = DMT.createFNPRejectedOverload(uid, true);
- sendTerminal(reject);
- } else if(!disconnected) {
+ reject =
DMT.createFNPRejectedOverload(uid, true);
+ sendTerminal(reject);
+ } else if(!disconnected)
+
waitAndFinishCHKTransferOffThread();
+ return;
+ case RequestSender.VERIFY_FAILURE:
+ case RequestSender.GET_OFFER_VERIFY_FAILURE:
+ if(key instanceof NodeCHK) {
+ if(bt == null && !disconnected)
{
+ // Bug! This is
impossible!
+ Logger.error(this,
"Status is VERIFY_FAILURE but we never started a transfer on " + uid);
+ // Obviously this node
is confused, send a terminal reject to make sure the requestor is not waiting
forever.
+ reject =
DMT.createFNPRejectedOverload(uid, true);
+ sendTerminal(reject);
+ } else if(!disconnected)
//Verify fails after
receive() is complete, so we might as well propagate it...
- waitAndFinishCHKTransferOffThread();
- }
+
waitAndFinishCHKTransferOffThread();
return;
- }
- reject = DMT.createFNPRejectedOverload(uid, true);
- sendTerminal(reject);
- return;
- case RequestSender.TRANSFER_FAILED:
- case RequestSender.GET_OFFER_TRANSFER_FAILED:
- if(key instanceof NodeCHK) {
- if(bt == null && !disconnected) {
- // Bug! This is impossible!
- Logger.error(this, "Status is
TRANSFER_FAILED but we never started a transfer on "+uid);
+ }
+ reject =
DMT.createFNPRejectedOverload(uid, true);
+ sendTerminal(reject);
+ return;
+ case RequestSender.TRANSFER_FAILED:
+ case RequestSender.GET_OFFER_TRANSFER_FAILED:
+ if(key instanceof NodeCHK) {
+ if(bt == null && !disconnected)
{
+ // Bug! This is
impossible!
+ Logger.error(this,
"Status is TRANSFER_FAILED but we never started a transfer on " + uid);
// Obviously this node
is confused, send a terminal reject to make sure the requestor is not waiting
forever.
- reject = DMT.createFNPRejectedOverload(uid, true);
- sendTerminal(reject);
- } else if(!disconnected) {
- waitAndFinishCHKTransferOffThread();
- }
+ reject =
DMT.createFNPRejectedOverload(uid, true);
+ sendTerminal(reject);
+ } else if(!disconnected)
+
waitAndFinishCHKTransferOffThread();
return;
- }
- Logger.error(this, "finish(TRANSFER_FAILED) should not
be called on SSK?!?!", new Exception("error"));
- return;
- default:
- // Treat as internal error
- reject = DMT.createFNPRejectedOverload(uid, true);
- sendTerminal(reject);
- throw new IllegalStateException("Unknown status code
"+status);
- }
- } catch (NotConnectedException e) {
+ }
+ Logger.error(this,
"finish(TRANSFER_FAILED) should not be called on SSK?!?!", new
Exception("error"));
+ return;
+ default:
+ // Treat as internal error
+ reject =
DMT.createFNPRejectedOverload(uid, true);
+ sendTerminal(reject);
+ throw new
IllegalStateException("Unknown status code " + status);
+ }
+ } catch(NotConnectedException e) {
Logger.normal(this, "requestor is gone, can't send
terminal message");
applyByteCounts();
unregisterRequestHandlerWithNode();
}
}
-
public static boolean SEND_OLD_FORMAT_SSK = false;
-
- private void sendSSK(byte[] headers, final byte[] data, boolean
needsPubKey2, DSAPublicKey pubKey) throws NotConnectedException {
+
+ private void sendSSK(byte[] headers, final byte[] data, boolean
needsPubKey2, DSAPublicKey pubKey) throws NotConnectedException {
// SUCCESS requires that BOTH the pubkey AND the data/headers
have been received.
// The pubKey will have been set on the SSK key, and the
SSKBlock will have been constructed.
Message headersMsg = DMT.createFNPSSKDataFoundHeaders(uid,
headers);
@@ -350,22 +348,21 @@
public void run() {
try {
- source.sendThrottledMessage(dataMsg,
data.length, RequestHandler.this, 60*1000, true);
+ source.sendThrottledMessage(dataMsg,
data.length, RequestHandler.this, 60 * 1000, true);
applyByteCounts();
- } catch (NotConnectedException e) {
+ } catch(NotConnectedException e) {
// Okay
- } catch (WaitedTooLongException e) {
+ } catch(WaitedTooLongException e) {
// Grrrr
- Logger.error(this, "Waited too long to
send SSK data on "+RequestHandler.this+" because of bwlimiting");
- } catch (SyncSendWaitedTooLongException e) {
- Logger.error(this, "Waited too long to
send SSK data on "+RequestHandler.this+" because of peer");
+ Logger.error(this, "Waited too long to
send SSK data on " + RequestHandler.this + " because of bwlimiting");
+ } catch(SyncSendWaitedTooLongException e) {
+ Logger.error(this, "Waited too long to
send SSK data on " + RequestHandler.this + " because of peer");
} finally {
unregisterRequestHandlerWithNode();
}
}
-
- }, "Send throttled SSK data for "+RequestHandler.this);
-
+ }, "Send throttled SSK data for " + RequestHandler.this);
+
if(SEND_OLD_FORMAT_SSK) {
Message df = DMT.createFNPSSKDataFound(uid, headers,
data);
source.sendAsync(df, null, 0, this);
@@ -378,19 +375,19 @@
}
}
- static void sendSSK(byte[] headers, byte[] data, boolean needsPubKey,
DSAPublicKey pubKey, final PeerNode source, long uid, ByteCounter ctr) throws
NotConnectedException, WaitedTooLongException {
+ static void sendSSK(byte[] headers, byte[] data, boolean needsPubKey,
DSAPublicKey pubKey, final PeerNode source, long uid, ByteCounter ctr) throws
NotConnectedException, WaitedTooLongException {
// SUCCESS requires that BOTH the pubkey AND the data/headers
have been received.
// The pubKey will have been set on the SSK key, and the
SSKBlock will have been constructed.
Message headersMsg = DMT.createFNPSSKDataFoundHeaders(uid,
headers);
source.sendAsync(headersMsg, null, 0, ctr);
final Message dataMsg = DMT.createFNPSSKDataFoundData(uid,
data);
try {
- source.sendThrottledMessage(dataMsg, data.length, ctr,
60*1000, false);
- } catch (SyncSendWaitedTooLongException e) {
+ source.sendThrottledMessage(dataMsg, data.length, ctr,
60 * 1000, false);
+ } catch(SyncSendWaitedTooLongException e) {
// Impossible
throw new Error(e);
}
-
+
if(SEND_OLD_FORMAT_SSK) {
Message df = DMT.createFNPSSKDataFound(uid, headers,
data);
source.sendAsync(df, null, 0, ctr);
@@ -401,248 +398,244 @@
Message pk = DMT.createFNPSSKPubKey(uid, pubKey);
source.sendAsync(pk, null, 0, ctr);
}
- }
-
+ }
+
/**
- * Return data from the datastore.
- * @param block The block we found in the datastore.
- * @throws NotConnectedException If we lose the connected to the request
source.
- */
- private void returnLocalData(KeyBlock block) throws NotConnectedException {
- if(key instanceof NodeSSK) {
- sendSSK(block.getRawHeaders(), block.getRawData(),
needsPubKey, ((SSKBlock)block).getPubKey());
- status = RequestSender.SUCCESS; // for byte logging
- } else if(block instanceof CHKBlock) {
- Message df = DMT.createFNPCHKDataFound(uid,
block.getRawHeaders());
- PartiallyReceivedBlock prb =
- new PartiallyReceivedBlock(Node.PACKETS_IN_BLOCK,
Node.PACKET_SIZE, block.getRawData());
- BlockTransmitter bt =
- new BlockTransmitter(node.usm, source, uid, prb, this);
- node.addTransferringRequestHandler(uid);
+ * Return data from the datastore.
+ * @param block The block we found in the datastore.
+ * @throws NotConnectedException If we lose the connected to the
request source.
+ */
+ private void returnLocalData(KeyBlock block) throws
NotConnectedException {
+ if(key instanceof NodeSSK) {
+ sendSSK(block.getRawHeaders(), block.getRawData(),
needsPubKey, ((SSKBlock) block).getPubKey());
+ status = RequestSender.SUCCESS; // for byte logging
+ } else if(block instanceof CHKBlock) {
+ Message df = DMT.createFNPCHKDataFound(uid,
block.getRawHeaders());
+ PartiallyReceivedBlock prb =
+ new
PartiallyReceivedBlock(Node.PACKETS_IN_BLOCK, Node.PACKET_SIZE,
block.getRawData());
+ BlockTransmitter bt =
+ new BlockTransmitter(node.usm, source, uid,
prb, this);
+ node.addTransferringRequestHandler(uid);
source.sendAsync(df, null, 0, this);
- if(bt.send(node.executor)) {
- // for byte logging
- status = RequestSender.SUCCESS;
- // We've fetched it from our datastore, so there won't
be a downstream noderef.
- // But we want to send at least an
FNPOpennetCompletedAck, otherwise the request source
- // may have to timeout waiting for one. That will be
the terminal message.
- finishOpennetNoRelay();
+ if(bt.send(node.executor)) {
+ // for byte logging
+ status = RequestSender.SUCCESS;
+ // We've fetched it from our datastore, so
there won't be a downstream noderef.
+ // But we want to send at least an
FNPOpennetCompletedAck, otherwise the request source
+ // may have to timeout waiting for one. That
will be the terminal message.
+ finishOpennetNoRelay();
} else {
- //also for byte logging, since the block is the 'terminal'
message.
- applyByteCounts();
+ //also for byte logging, since the block is the
'terminal' message.
+ applyByteCounts();
unregisterRequestHandlerWithNode();
- }
- } else throw new IllegalStateException();
+ }
+ } else
+ throw new IllegalStateException();
}
private void unregisterRequestHandlerWithNode() {
node.removeTransferringRequestHandler(uid);
node.unlockUID(uid, key instanceof NodeSSK, false, false,
false, false);
}
-
+
/**
- * Sends the 'final' packet of a request in such a way that the thread can
be freed (made non-runnable/exit)
- * and the byte counter will still be accurate.
- */
- private void sendTerminal(Message msg) throws NotConnectedException {
- if(logMINOR)
- Logger.minor(this, "sendTerminal("+msg+")", new
Exception("debug"));
- if (sendTerminalCalled)
- throw new IllegalStateException("sendTerminal should only be
called once");
- else
- sendTerminalCalled=true;
-
- source.sendAsync(msg, new TerminalMessageByteCountCollector(), 0,
this);
- }
-
- boolean sendTerminalCalled=false;
-
- /**
- * Note well! These functions are not executed on the RequestHandler
thread.
- */
- private class TerminalMessageByteCountCollector implements
AsyncMessageCallback {
-
- private boolean completed = false;
-
+ * Sends the 'final' packet of a request in such a way that the thread
can be freed (made non-runnable/exit)
+ * and the byte counter will still be accurate.
+ */
+ private void sendTerminal(Message msg) throws NotConnectedException {
+ if(logMINOR)
+ Logger.minor(this, "sendTerminal(" + msg + ")", new
Exception("debug"));
+ if(sendTerminalCalled)
+ throw new IllegalStateException("sendTerminal should
only be called once");
+ else
+ sendTerminalCalled = true;
+
+ source.sendAsync(msg, new TerminalMessageByteCountCollector(),
0, this);
+ }
+ boolean sendTerminalCalled = false;
+
+ /**
+ * Note well! These functions are not executed on the RequestHandler
thread.
+ */
+ private class TerminalMessageByteCountCollector implements
AsyncMessageCallback {
+
+ private boolean completed = false;
+
public void acknowledged() {
- //terminalMessage ack'd by remote peer
+ //terminalMessage ack'd by remote peer
complete();
}
-
+
public void disconnected() {
- Logger.minor(this, "Peer disconnected before terminal message sent
for "+RequestHandler.this);
- complete();
+ Logger.minor(this, "Peer disconnected before terminal
message sent for " + RequestHandler.this);
+ complete();
}
-
+
public void fatalError() {
Logger.error(this, "Error sending terminal message?!
for " + RequestHandler.this);
complete();
}
-
+
public void sent() {
complete();
- }
-
+ }
+
private void complete() {
synchronized(this) {
- if(completed) return;
+ if(completed)
+ return;
completed = true;
}
- //For byte counting, this relies on the fact that the callback
will only be excuted once.
+ //For byte counting, this relies on the fact that the
callback will only be excuted once.
applyByteCounts();
unregisterRequestHandlerWithNode();
}
}
-
- /**
- * Either send an ack, indicating we've finished and aren't interested in
opennet,
- * or wait for a noderef and relay it and wait for a response and relay
that,
- * or send our own noderef and wait for a response and add that.
- */
+
+ /**
+ * Either send an ack, indicating we've finished and aren't interested
in opennet,
+ * or wait for a noderef and relay it and wait for a response and relay
that,
+ * or send our own noderef and wait for a response and add that.
+ */
private void finishOpennetChecked() throws NotConnectedException {
OpennetManager om = node.getOpennet();
if(om != null &&
- (node.passOpennetRefsThroughDarknet() ||
source.isOpennet()) &&
- finishOpennetInner(om)) {
+ (node.passOpennetRefsThroughDarknet() ||
source.isOpennet()) &&
+ finishOpennetInner(om)) {
applyByteCounts();
unregisterRequestHandlerWithNode();
return;
}
-
+
Message msg = DMT.createFNPOpennetCompletedAck(uid);
sendTerminal(msg);
}
-
+
/**
* There is no noderef to pass downstream. If we want a connection,
send our
* noderef and wait for a reply, otherwise just send an ack.
*/
private void finishOpennetNoRelay() throws NotConnectedException {
OpennetManager om = node.getOpennet();
-
+
if(om != null && (source.isOpennet() ||
node.passOpennetRefsThroughDarknet()) &&
- finishOpennetNoRelayInner(om)) {
+ finishOpennetNoRelayInner(om)) {
applyByteCounts();
unregisterRequestHandlerWithNode();
return;
}
-
+
// Otherwise just ack it.
Message msg = DMT.createFNPOpennetCompletedAck(uid);
sendTerminal(msg);
}
-
+
private boolean finishOpennetInner(OpennetManager om) {
byte[] noderef = rs.waitForOpennetNoderef();
- if(noderef == null) {
+ if(noderef == null)
return finishOpennetNoRelayInner(om);
- }
-
- if(node.random.nextInt(OpennetManager.RESET_PATH_FOLDING_PROB)
== 0) {
+
+ if(node.random.nextInt(OpennetManager.RESET_PATH_FOLDING_PROB)
== 0)
return finishOpennetNoRelayInner(om);
- }
-
- finishOpennetRelay(noderef, om);
- return true;
- }
+ finishOpennetRelay(noderef, om);
+ return true;
+ }
+
/**
* Send our noderef to the request source, wait for a reply, if we get
one add it. Called when either the request
* wasn't routed, or the node it was routed to didn't return a noderef.
* @return True if success, or lost connection; false if we need to
send an ack.
*/
- private boolean finishOpennetNoRelayInner(OpennetManager om) {
- if(logMINOR)
- Logger.minor(this, "Finishing opennet: sending own reference");
- if(!om.wantPeer(null, false)) return false; // Don't want a
reference
-
+ private boolean finishOpennetNoRelayInner(OpennetManager om) {
+ if(logMINOR)
+ Logger.minor(this, "Finishing opennet: sending own
reference");
+ if(!om.wantPeer(null, false))
+ return false; // Don't want a reference
+
try {
om.sendOpennetRef(false, uid, source,
om.crypto.myCompressedFullRef(), this);
- } catch (NotConnectedException e) {
- Logger.normal(this, "Can't send opennet ref because
node disconnected on "+this);
+ } catch(NotConnectedException e) {
+ Logger.normal(this, "Can't send opennet ref because
node disconnected on " + this);
// Oh well...
return true;
}
-
+
// Wait for response
-
- byte[] noderef =
- om.waitForOpennetNoderef(true, source, uid, this);
-
+
+ byte[] noderef = om.waitForOpennetNoderef(true, source, uid,
this);
+
if(noderef == null)
return false;
-
+
SimpleFieldSet ref = om.validateNoderef(noderef, 0,
noderef.length, source, false);
-
- if(ref == null)
+
+ if(ref == null)
return false;
-
- try {
- if(node.addNewOpennetNode(ref) == null) {
- Logger.normal(this, "Asked for opennet ref but
didn't want it for "+this+" :\n"+ref);
- } else {
- Logger.normal(this, "Added opennet noderef in
"+this);
- }
- } catch (FSParseException e) {
- Logger.error(this, "Could not parse opennet noderef for
"+this+" from "+source, e);
- } catch (PeerParseException e) {
- Logger.error(this, "Could not parse opennet noderef for
"+this+" from "+source, e);
- } catch (ReferenceSignatureVerificationException e) {
- Logger.error(this, "Bad signature on opennet noderef
for "+this+" from "+source+" : "+e, e);
+
+ try {
+ if(node.addNewOpennetNode(ref) == null)
+ Logger.normal(this, "Asked for opennet ref but
didn't want it for " + this + " :\n" + ref);
+ else
+ Logger.normal(this, "Added opennet noderef in "
+ this);
+ } catch(FSParseException e) {
+ Logger.error(this, "Could not parse opennet noderef for
" + this + " from " + source, e);
+ } catch(PeerParseException e) {
+ Logger.error(this, "Could not parse opennet noderef for
" + this + " from " + source, e);
+ } catch(ReferenceSignatureVerificationException e) {
+ Logger.error(this, "Bad signature on opennet noderef
for " + this + " from " + source + " : " + e, e);
}
return true;
- }
+ }
- /**
- * Called when the node we routed the request to returned a valid noderef,
and we don't want it.
- * So we relay it downstream to somebody who does, and wait to relay the
response back upstream.
- * @param noderef
- * @param om
- */
+ /**
+ * Called when the node we routed the request to returned a valid
noderef, and we don't want it.
+ * So we relay it downstream to somebody who does, and wait to relay
the response back upstream.
+ * @param noderef
+ * @param om
+ */
private void finishOpennetRelay(byte[] noderef, OpennetManager om) {
- if(logMINOR)
- Logger.minor(this, "Finishing opennet: relaying reference from
"+rs.successFrom());
+ if(logMINOR)
+ Logger.minor(this, "Finishing opennet: relaying
reference from " + rs.successFrom());
// Send it back to the handler, then wait for the ConnectReply
PeerNode dataSource = rs.successFrom();
-
+
try {
om.sendOpennetRef(false, uid, source, noderef, this);
- } catch (NotConnectedException e) {
+ } catch(NotConnectedException e) {
// Lost contact with request source, nothing we can do
return;
}
-
+
// Now wait for reply from the request source.
-
+
byte[] newNoderef = om.waitForOpennetNoderef(true, source, uid,
this);
-
- if(newNoderef == null) {
+
+ if(newNoderef == null)
// Already sent a ref, no way to tell upstream that we
didn't receive one. :(
return;
- }
-
+
// Send it forward to the data source, if it is valid.
-
- if(om.validateNoderef(newNoderef, 0, newNoderef.length, source,
false) != null) {
+
+ if(om.validateNoderef(newNoderef, 0, newNoderef.length, source,
false) != null)
try {
om.sendOpennetRef(true, uid, dataSource,
newNoderef, this);
- } catch (NotConnectedException e) {
+ } catch(NotConnectedException e) {
// How sad
return;
}
- }
}
-
private int sentBytes;
private int receivedBytes;
private volatile Object bytesSync = new Object();
-
+
public void sentBytes(int x) {
synchronized(bytesSync) {
sentBytes += x;
}
node.nodeStats.requestSentBytes(key instanceof NodeSSK, x);
- if(logMINOR) Logger.minor(this, "sentBytes("+x+") on "+this);
+ if(logMINOR)
+ Logger.minor(this, "sentBytes(" + x + ") on " + this);
}
public void receivedBytes(int x) {
@@ -660,11 +653,11 @@
*/
node.sentPayload(x);
node.nodeStats.requestSentBytes(key instanceof NodeSSK, -x);
- if(logMINOR) Logger.minor(this, "sentPayload("+x+") on "+this);
+ if(logMINOR)
+ Logger.minor(this, "sentPayload(" + x + ") on " + this);
}
public int getPriority() {
return NativeThread.HIGH_PRIORITY;
}
-
}
Modified: branches/saltedhashstore/freenet/src/freenet/node/RequestStarter.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/RequestStarter.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/RequestStarter.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -254,6 +254,9 @@
public void run() {
try {
freenet.support.Logger.OSThread.logPID(this);
+ // FIXME ? key is not known for inserts here
+ if (key != null)
+
stats.reportOutgoingLocalRequestLocation(key.toNormalizedDouble());
if(!req.send(core, sched, keyNum)) {
if(!req.isCancelled())
Logger.error(this, "run() not able to
send a request on "+req);
Modified:
branches/saltedhashstore/freenet/src/freenet/node/RequestStarterGroup.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/RequestStarterGroup.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/RequestStarterGroup.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -7,6 +7,7 @@
import freenet.config.Config;
import freenet.config.SubConfig;
import freenet.crypt.RandomSource;
+import freenet.keys.Key;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
import freenet.support.TimeUtil;
@@ -34,9 +35,10 @@
public final ClientRequestScheduler sskFetchScheduler;
public final ClientRequestScheduler sskPutScheduler;
+ private final NodeStats stats;
RequestStarterGroup(Node node, NodeClientCore core, int portNumber,
RandomSource random, Config config, SimpleFieldSet fs) {
SubConfig schedulerConfig = new SubConfig("node.scheduler",
config);
- NodeStats stats = core.nodeStats;
+ this.stats = core.nodeStats;
throttleWindow = new ThrottleWindowManager(2.0, fs == null ?
null : fs.subset("ThrottleWindow"), node);
throttleWindowCHK = new ThrottleWindowManager(2.0, fs == null ?
null : fs.subset("ThrottleWindowCHK"), node);
@@ -139,10 +141,11 @@
return sskInsertThrottle;
}
- public void requestCompleted(boolean isSSK, boolean isInsert) {
+ public void requestCompleted(boolean isSSK, boolean isInsert, Key key) {
throttleWindow.requestCompleted();
(isSSK ? throttleWindowSSK :
throttleWindowCHK).requestCompleted();
(isInsert ? throttleWindowInsert :
throttleWindowRequest).requestCompleted();
+ stats.reportOutgoingRequestLocation(key.toNormalizedDouble());
}
public void rejectedOverload(boolean isSSK, boolean isInsert) {
Modified:
branches/saltedhashstore/freenet/src/freenet/node/ResettingHTLProbeRequestSender.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/ResettingHTLProbeRequestSender.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/ResettingHTLProbeRequestSender.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -122,15 +122,10 @@
return;
}
- double nextValue=next.getLocation();
-
if(logMINOR) Logger.minor(this, "Routing request to "+next);
nodesRoutedTo.add(next);
- if(Location.distance(target, nextValue, true) >
Location.distance(target, nearestLoc, true)) {
- htl = node.decrementHTL((hasForwarded ? next : source),
htl);
- if(logMINOR) Logger.minor(this, "Backtracking:
target="+target+" next="+nextValue+" closest="+nearestLoc+" so htl="+htl);
- }
+ htl = node.decrementHTL((hasForwarded ? next : source), htl);
Message req = createDataRequest();
Modified:
branches/saltedhashstore/freenet/src/freenet/node/SeedClientPeerNode.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/SeedClientPeerNode.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/SeedClientPeerNode.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -92,8 +92,14 @@
if(!isConnected()) {
// SeedClientPeerNode's always start off unverified.
// If it doesn't manage to connect in 60 seconds, dump
it.
- if(System.currentTimeMillis() -
lastReceivedPacketTime() > 60*1000)
+ // However, we don't want to be dumped *before* we
connect,
+ // so we need to check that first.
+ // Synchronize to avoid messy races.
+ synchronized(this) {
+ if(timeLastConnectionCompleted() > 0 &&
+ System.currentTimeMillis() -
lastReceivedPacketTime() > 60*1000)
return true;
+ }
}
return false;
}
Added:
branches/saltedhashstore/freenet/src/freenet/node/SeedServerTestPeerNode.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/SeedServerTestPeerNode.java
(rev 0)
+++
branches/saltedhashstore/freenet/src/freenet/node/SeedServerTestPeerNode.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -0,0 +1,75 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.node;
+
+import freenet.io.comm.PeerParseException;
+import freenet.io.comm.ReferenceSignatureVerificationException;
+import freenet.support.SimpleFieldSet;
+
+/**
+ *
+ * @author nextgens
+ */
+public class SeedServerTestPeerNode extends SeedServerPeerNode {
+
+ public SeedServerTestPeerNode(SimpleFieldSet fs, Node node2, NodeCrypto
crypto, PeerManager peers, boolean fromLocal, OutgoingPacketMangler mangler)
throws FSParseException, PeerParseException,
ReferenceSignatureVerificationException {
+ super(fs, node2, crypto, peers, fromLocal, mangler);
+ }
+
+ public SimpleFieldSet exportFieldSet() {
+ SimpleFieldSet sfs = super.exportFieldSet();
+ sfs.putOverwrite("opennet", "true");
+ return sfs;
+ }
+
+ public boolean shouldDisconnectAndRemoveNow() {
+ return false;
+ }
+
+ protected void sendInitialMessages() {}
+
+ public enum FATE {
+ // Never connected
+ NEVER_CONNECTED,
+ // Connected but no packets received yet
+ CONNECTED_NO_PACKETS_RECEIVED,
+ // Connected but TOO_OLD
+ CONNECTED_TOO_OLD,
+ // Connected and received packets
+ CONNECTED_SUCCESS,
+ // Connected but timed out after no packets received
+ CONNECTED_TIMEOUT_NO_PACKETS_RECEIVED,
+ // Connected but then disconnected for no known reason
+ CONNECTED_DISCONNECTED_UNKNOWN
+ }
+
+ public void onRemove() {
+ long lastReceivedDataPacketTime = lastReceivedDataPacketTime();
+ if(lastReceivedDataPacketTime <= 0 &&
timeLastConnectionCompleted() > 0)
+ System.err.println(this.getIdentityString()+" :
REMOVED: TIMEOUT: NO PACKETS RECEIVED AFTER SUCCESSFUL CONNECTION SETUP");
+ else if(timeLastConnectionCompleted() <= 0)
+ System.err.println(this.getIdentityString()+" :
REMOVED: NEVER CONNECTED");
+ else
+ System.err.println(this.getIdentityString()+" :
REMOVED: UNKNOWN CAUSE");
+ super.onRemove();
+ }
+
+ public FATE getFate() {
+ long lastReceivedDataPacketTime = lastReceivedDataPacketTime();
+ if(isConnected()) {
+ if(lastReceivedDataPacketTime <= 0)
+ return FATE.CONNECTED_NO_PACKETS_RECEIVED;
+ else if(this.isUnroutableOlderVersion())
+ return FATE.CONNECTED_TOO_OLD;
+ else
+ return FATE.CONNECTED_SUCCESS;
+ }
+ long lastConnectionTime = timeLastConnectionCompleted();
+ if(lastConnectionTime <= 0)
+ return FATE.NEVER_CONNECTED;
+ if(lastReceivedDataPacketTime <= 0)
+ return FATE.CONNECTED_TIMEOUT_NO_PACKETS_RECEIVED;
+ return FATE.CONNECTED_DISCONNECTED_UNKNOWN;
+ }
+}
Modified:
branches/saltedhashstore/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/TextModeClientInterface.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/TextModeClientInterface.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -899,14 +899,24 @@
} else {
probeAll(Fields.parseInt(uline,
NodeDispatcher.PROBE_TYPE_RESETTING_HTL));
}
- } else if(uline.startsWith("PLUGLOAD:")) {
- if (line.substring("PLUGLOAD:".length()).trim().equals("?")) {
- outsb.append(" PLUGLOAD: pluginName - Load
official plugin from freenetproject.org\r\n");
- outsb.append(" PLUGLOAD: file://<filename> - Load
plugin from file\r\n");
- outsb.append(" PLUGLOAD: http://... - Load
plugin from online file\r\n");
+ } else if(uline.startsWith("PLUGLOAD")) {
+ if(uline.startsWith("PLUGLOAD:O:")) {
+ String name =
line.substring("PLUGLOAD:O:".length()).trim();
+ n.pluginManager.startPluginOfficial(name, true);
+ } else if(uline.startsWith("PLUGLOAD:F:")) {
+ String name =
line.substring("PLUGLOAD:F:".length()).trim();
+ n.pluginManager.startPluginFile(name, true);
+ } else if(uline.startsWith("PLUGLOAD:U:")) {
+ String name =
line.substring("PLUGLOAD:U:".length()).trim();
+ n.pluginManager.startPluginURL(name, true);
+ } else if(uline.startsWith("PLUGLOAD:K:")) {
+ String name =
line.substring("PLUGLOAD:K:".length()).trim();
+ n.pluginManager.startPluginFreenet(name, true);
} else {
- String name =
line.substring("PLUGLOAD:".length()).trim();
- n.pluginManager.startPlugin(name, true);
+ outsb.append(" PLUGLOAD:O: pluginName - Load
official plugin from freenetproject.org\r\n");
+ outsb.append(" PLUGLOAD:F: file://<filename> - Load
plugin from file\r\n");
+ outsb.append(" PLUGLOAD:U: http://... - Load
plugin from online file\r\n");
+ outsb.append(" PLUGLOAD:K: freenet key - Load
plugin from freenet uri\r\n");
}
} else if(uline.startsWith("PLUGLIST")) {
outsb.append(n.pluginManager.dumpPlugins());
Modified: branches/saltedhashstore/freenet/src/freenet/node/UptimeEstimator.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/UptimeEstimator.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/UptimeEstimator.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -15,6 +15,7 @@
import freenet.support.Fields;
import freenet.support.Logger;
import freenet.support.io.Closer;
+import java.text.DecimalFormat;
/**
* A class to estimate the node's average uptime. Every 5 minutes (with a
fixed offset), we write
@@ -46,6 +47,8 @@
/** We write to disk every 5 minutes. The offset is derived from the
node's identity. */
private long timeOffset;
+
+ private final DecimalFormat fix1p2 = new DecimalFormat("0.00");
public UptimeEstimator(File nodeDir, Ticker ticker, byte[] bs) {
this.ticker = ticker;
@@ -64,7 +67,7 @@
readData(prevFile, base);
readData(logFile, base);
schedule(System.currentTimeMillis());
- System.err.println("Created uptime estimator, time offset is
"+timeOffset+" uptime at startup is "+getUptime());
+ System.out.println("Created uptime estimator, time offset is
"+timeOffset+" uptime at startup is "+fix1p2.format(getUptime())+'%');
}
private void readData(File file, int base) {
Modified: branches/saltedhashstore/freenet/src/freenet/node/Version.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Version.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/Version.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -24,17 +24,17 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 1154;
+ private static final int buildNumber = 1155;
/** Oldest build of Fred we will talk to */
- private static final int oldLastGoodBuild = 1145;
- private static final int newLastGoodBuild = 1153;
+ private static final int oldLastGoodBuild = 1154;
+ private static final int newLastGoodBuild = 1155;
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.JULY, 9, 0, 0, 0 );
+ _cal.set( 2008, Calendar.AUGUST, 13, 0, 0, 0 );
transitionTime = _cal.getTimeInMillis();
}
Modified:
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeBusyNetworkTest.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeBusyNetworkTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeBusyNetworkTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -75,7 +75,7 @@
Executor executor = new PooledExecutor();
for(int i=0;i<NUMBER_OF_NODES;i++) {
nodes[i] =
- NodeStarter.createTestNode(5001+i, name, false, true, false,
MAX_HTL, 20 /* 5% */, random, executor, 500*NUMBER_OF_NODES,
(CHKBlock.DATA_LENGTH+CHKBlock.TOTAL_HEADERS_LENGTH)*100, true,
ENABLE_SWAPPING, false, ENABLE_ULPRS, ENABLE_PER_NODE_FAILURE_TABLES,
ENABLE_SWAP_QUEUEING, ENABLE_PACKET_COALESCING, 8000, ENABLE_FOAF);
+ NodeStarter.createTestNode(5001+i, 0, name, false, true, false,
MAX_HTL, 20 /* 5% */, random, executor, 500*NUMBER_OF_NODES,
(CHKBlock.DATA_LENGTH+CHKBlock.TOTAL_HEADERS_LENGTH)*100, true,
ENABLE_SWAPPING, false, ENABLE_ULPRS, ENABLE_PER_NODE_FAILURE_TABLES,
ENABLE_SWAP_QUEUEING, ENABLE_PACKET_COALESCING, 8000, ENABLE_FOAF, false);
Logger.normal(RealNodeRoutingTest.class, "Created node "+i);
}
Modified:
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeNetworkColoringTest.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeNetworkColoringTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeNetworkColoringTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -79,21 +79,21 @@
for(int i=0;i<NUMBER_OF_NODES;i++) {
allNodes[totalNodes] =
subnetA[i] =
- NodeStarter.createTestNode(5001+totalNodes, wd, false, true,
true, MAX_HTL, 0 /* no dropped packets */, random, executor,
500*NUMBER_OF_NODES, storeSize, true, true, false, false, false, false, true,
0, ENABLE_FOAF);
+ NodeStarter.createTestNode(5001+totalNodes, 0, wd, false, true,
true, MAX_HTL, 0 /* no dropped packets */, random, executor,
500*NUMBER_OF_NODES, storeSize, true, true, false, false, false, false, true,
0, ENABLE_FOAF, false);
totalNodes++;
Logger.normal(RealNodeRoutingTest.class, "Created 'A' node
"+totalNodes);
}
for(int i=0;i<NUMBER_OF_NODES;i++) {
allNodes[totalNodes] =
subnetB[i] =
- NodeStarter.createTestNode(5001+totalNodes, wd, false,
true, true, MAX_HTL, 0 /* no dropped packets */, random, executor,
500*NUMBER_OF_NODES, storeSize, true, true, false, false, false, false, true,
0, ENABLE_FOAF);
+ NodeStarter.createTestNode(5001+totalNodes, 0, wd,
false, true, true, MAX_HTL, 0 /* no dropped packets */, random, executor,
500*NUMBER_OF_NODES, storeSize, true, true, false, false, false, false, true,
0, ENABLE_FOAF, false);
totalNodes++;
Logger.normal(RealNodeRoutingTest.class, "Created 'B' node
"+totalNodes);
}
for(int i=0;i<BRIDGES;i++) {
allNodes[totalNodes] =
bridges[i] =
- NodeStarter.createTestNode(5001+totalNodes, wd, false,
true, true, MAX_HTL, 0 /* no dropped packets */, random, executor,
500*NUMBER_OF_NODES, storeSize, true, true, false, false, false, false, true,
0,ENABLE_FOAF);
+ NodeStarter.createTestNode(5001+totalNodes, 0, wd,
false, true, true, MAX_HTL, 0 /* no dropped packets */, random, executor,
500*NUMBER_OF_NODES, storeSize, true, true, false, false, false, false, true,
0,ENABLE_FOAF, false);
totalNodes++;
Logger.normal(RealNodeRoutingTest.class, "Created bridge node
"+totalNodes);
}
Modified:
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodePingTest.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodePingTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodePingTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -33,8 +33,8 @@
RandomSource random = NodeStarter.globalTestInit("pingtest", false,
Logger.ERROR, "");
// Create 2 nodes
Executor executor = new PooledExecutor();
- Node node1 = NodeStarter.createTestNode(5001, "pingtest", false,
false, true, Node.DEFAULT_MAX_HTL, 0, random, executor, 1000, 65536, true,
false, false, false, false, false, true, 0, false);
- Node node2 = NodeStarter.createTestNode(5002, "pingtest", false,
false, true, Node.DEFAULT_MAX_HTL, 0, random, executor, 1000, 65536, true,
false, false, false, false, false, true, 0, false);
+ Node node1 = NodeStarter.createTestNode(5001, 0, "pingtest", false,
false, true, Node.DEFAULT_MAX_HTL, 0, random, executor, 1000, 65536, true,
false, false, false, false, false, true, 0, false, false);
+ Node node2 = NodeStarter.createTestNode(5002, 0, "pingtest", false,
false, true, Node.DEFAULT_MAX_HTL, 0, random, executor, 1000, 65536, true,
false, false, false, false, false, true, 0, false, false);
// Connect
node1.connect(node2);
node2.connect(node1);
Modified:
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeRequestInsertTest.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeRequestInsertTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeRequestInsertTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -75,7 +75,7 @@
Executor executor = new PooledExecutor();
for(int i=0;i<NUMBER_OF_NODES;i++) {
nodes[i] =
- NodeStarter.createTestNode(5001+i, name, false, true, false,
MAX_HTL, 20 /* 5% */, random, executor, 500*NUMBER_OF_NODES, 256*1024, true,
ENABLE_SWAPPING, false, ENABLE_ULPRS, ENABLE_PER_NODE_FAILURE_TABLES,
ENABLE_SWAP_QUEUEING, ENABLE_PACKET_COALESCING, 12000, ENABLE_FOAF);
+ NodeStarter.createTestNode(5001+i, 0, name, false, true, false,
MAX_HTL, 20 /* 5% */, random, executor, 500*NUMBER_OF_NODES, 256*1024, true,
ENABLE_SWAPPING, false, ENABLE_ULPRS, ENABLE_PER_NODE_FAILURE_TABLES,
ENABLE_SWAP_QUEUEING, ENABLE_PACKET_COALESCING, 12000, ENABLE_FOAF, false);
Logger.normal(RealNodeRoutingTest.class, "Created node "+i);
}
Modified:
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeRoutingTest.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeRoutingTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeRoutingTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -56,7 +56,7 @@
Executor executor = new PooledExecutor();
for(int i = 0; i < NUMBER_OF_NODES; i++) {
System.err.println("Creating node " + i);
- nodes[i] = NodeStarter.createTestNode(5001 + i, dir,
false, true, true, MAX_HTL, 0 /* no dropped packets */, random, executor, 500 *
NUMBER_OF_NODES, 65536, true, ENABLE_SWAPPING, false, false, false,
ENABLE_SWAP_QUEUEING, true, 0, ENABLE_FOAF);
+ nodes[i] = NodeStarter.createTestNode(5001 + i, 0, dir,
false, true, true, MAX_HTL, 0 /* no dropped packets */, random, executor, 500 *
NUMBER_OF_NODES, 65536, true, ENABLE_SWAPPING, false, false, false,
ENABLE_SWAP_QUEUEING, true, 0, ENABLE_FOAF, false);
Logger.normal(RealNodeRoutingTest.class, "Created node
" + i);
}
Logger.normal(RealNodeRoutingTest.class, "Created " +
NUMBER_OF_NODES + " nodes");
Modified:
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeSecretPingTest.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeSecretPingTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeSecretPingTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -66,7 +66,7 @@
for(int i=0;i<NUMBER_OF_NODES;i++) {
nodes[i] =
- NodeStarter.createTestNode(5001+i, wd, false, true, true,
MAX_HTL, 0 /* no dropped packets */, random, executor, 500*NUMBER_OF_NODES,
storeSize, true, true, false, false, false, true, true, 0, true);
+ NodeStarter.createTestNode(5001+i, 0, wd, false, true, true,
MAX_HTL, 0 /* no dropped packets */, random, executor, 500*NUMBER_OF_NODES,
storeSize, true, true, false, false, false, true, true, 0, true, false);
Logger.normal(RealNodeRoutingTest.class, "Created node "+i);
}
Logger.normal(RealNodeRoutingTest.class, "Created "+NUMBER_OF_NODES+"
nodes");
Modified:
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeULPRTest.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeULPRTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/simulator/RealNodeULPRTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -93,7 +93,7 @@
Executor executor = new PooledExecutor();
for(int i=0;i<NUMBER_OF_NODES;i++) {
nodes[i] =
- NodeStarter.createTestNode(5000+i, testName, false, true, true,
MAX_HTL, 20 /* 5% */, random, executor, 500*NUMBER_OF_NODES, 1024*1024, true,
ENABLE_SWAPPING, false, ENABLE_ULPRS, ENABLE_PER_NODE_FAILURE_TABLES, true,
true, 0, ENABLE_FOAF);
+ NodeStarter.createTestNode(5000+i, 0, testName, false, true,
true, MAX_HTL, 20 /* 5% */, random, executor, 500*NUMBER_OF_NODES, 1024*1024,
true, ENABLE_SWAPPING, false, ENABLE_ULPRS, ENABLE_PER_NODE_FAILURE_TABLES,
true, true, 0, ENABLE_FOAF, false);
Logger.normal(RealNodeRoutingTest.class, "Created node "+i);
}
SimpleFieldSet refs[] = new SimpleFieldSet[NUMBER_OF_NODES];
Added:
branches/saltedhashstore/freenet/src/freenet/node/simulator/SeednodePingTest.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/simulator/SeednodePingTest.java
(rev 0)
+++
branches/saltedhashstore/freenet/src/freenet/node/simulator/SeednodePingTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -0,0 +1,114 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.node.simulator;
+
+import freenet.crypt.RandomSource;
+import freenet.io.comm.NotConnectedException;
+import freenet.io.comm.PeerParseException;
+import freenet.io.comm.ReferenceSignatureVerificationException;
+import freenet.node.Announcer;
+import freenet.node.FSParseException;
+import freenet.node.Node;
+import freenet.node.NodeCrypto;
+import freenet.node.NodeInitException;
+import freenet.node.NodeStarter;
+import freenet.node.OpennetDisabledException;
+import freenet.node.SeedServerPeerNode;
+import freenet.node.SeedServerTestPeerNode;
+import freenet.node.SeedServerTestPeerNode.FATE;
+import freenet.support.Executor;
+import freenet.support.Logger;
+import freenet.support.PooledExecutor;
+import freenet.support.LoggerHook.InvalidThresholdException;
+import freenet.support.SimpleFieldSet;
+import freenet.support.TimeUtil;
+import java.io.File;
+import java.io.IOException;
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.Vector;
+
+/**
+ * @author Florent Daignière <nextgens at freenetproject.org>
+ */
+public class SeednodePingTest extends RealNodeTest {
+
+ public static void main(String[] args) throws FSParseException,
IOException, OpennetDisabledException, PeerParseException,
InterruptedException, ReferenceSignatureVerificationException,
NodeInitException, InvalidThresholdException {
+ RandomSource random = NodeStarter.globalTestInit("seednode-pingtest",
false, Logger.ERROR, "");
+ // Create one node
+ Executor executor = new PooledExecutor();
+ Node node = NodeStarter.createTestNode(5000, 5001, "seednode-pingtest",
true, false, false, Node.DEFAULT_MAX_HTL, 0, random, executor, 1000,
5*1024*1024, true, false, false, false, false, false, false, 0, false, false);
+ NodeCrypto.DISABLE_GROUP_STRIP = true;
+ // Connect & ping
+ Vector<SeedServerTestPeerNode> seedNodes = new
Vector<SeedServerTestPeerNode>();
+ Vector<SimpleFieldSet> seedNodesAsSFS = Announcer.readSeednodes(new
File("/tmp/"));
+ int numberOfNodesInTheFile = 0;
+ for(SimpleFieldSet sfs : seedNodesAsSFS) {
+ numberOfNodesInTheFile++;
+ SeedServerTestPeerNode seednode =
node.createNewSeedServerTestPeerNode(sfs);
+ try {
+ node.connectToSeednode(seednode);
+ seedNodes.add(seednode);
+ } catch (Exception fse) {
+ System.out.println("ERROR adding "+seednode.toString()+
" "+fse.getMessage());
+ }
+ }
+ // Start it
+ node.start(true);
+ //Logger.setupStdoutLogging(Logger.MINOR,
"freenet:NORMAL,freenet.node.NodeDispatcher:MINOR,freenet.node.FNPPacketMangler:MINOR");
+ Logger.getChain().setThreshold(32); // kill logging
+ Thread.sleep(2000);
+ if(seedNodes.size() != numberOfNodesInTheFile)
+ System.out.println("ERROR ADDING SOME OF THE SEEDNODES!!");
+ System.out.println("Let some time for the "+ seedNodes.size() +" nodes
to connect...");
+ Thread.sleep(8000);
+
+ int pingID = 0;
+ long deadline = System.currentTimeMillis() + 2*60*1000;
+ while(System.currentTimeMillis() < deadline) {
+ int countConnectedSeednodes = 0;
+ for(SeedServerPeerNode seednode :
node.peers.getConnectedSeedServerPeersVector(null)) {
+ try {
+ double pingTime = seednode.averagePingTime();
+ int uptime = seednode.getUptime();
+ long timeDelta = seednode.getClockDelta();
+ if(seednode.isRealConnection())
+ continue;
+ countConnectedSeednodes++;
+ boolean ping = seednode.ping(pingID++);
+ if(ping)
+
System.out.println(seednode.getIdentityString()+
+ " uptime="+uptime+
+ " ping="+ping+
+ " pingTime="+pingTime+
+ " uptime="+seednode.getUptime()+
+ "
timeDelta="+TimeUtil.formatTime(timeDelta));
+ // sanity check
+ if(seednode.isRoutable())
+ System.out.println(seednode + " is
routable!");
+ } catch (NotConnectedException e) {
+ System.out.println(seednode.getIdentityString()
+ " is not connected "+seednode.getHandshakeCount());
+ }
+ }
+ Map<FATE, Integer> totals = new
EnumMap(SeedServerTestPeerNode.FATE.class);
+ for(SeedServerTestPeerNode seednode : seedNodes) {
+ FATE fate = seednode.getFate();
+ Integer x = totals.get(fate);
+ if(x == null)
+ totals.put(fate, 1);
+ else
+ totals.put(fate, x+1);
+ System.out.println(seednode.getIdentityString() + " :
"+fate+ " : "+seednode.getPeerNodeStatusString());
+ }
+ System.out.println("TOTALS:");
+ for(FATE fate : totals.keySet()) {
+ System.out.println(fate + " : "+totals.get(fate));
+ }
+ System.out.println("##################
("+node.peers.countConnectedPeers()+")
"+countConnectedSeednodes+'/'+node.peers.countSeednodes());
+ Thread.sleep(5000);
+ }
+ System.out.println("Completed seednodes scan.");
+ System.exit(0);
+ }
+}
Modified:
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdateManager.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdateManager.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdateManager.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -734,6 +734,12 @@
return hasNewExtJar;
}
+ /**
+ * What version has been fetched?
+ *
+ * This includes jar's fetched via UOM, because the UOM code feeds
+ * its results through the mainUpdater.
+ */
public int newMainJarVersion() {
if(mainUpdater == null) return -1;
return mainUpdater.getFetchedVersion();
@@ -770,6 +776,9 @@
return revocationChecker.getRevocationDNFCounter();
}
+ /**
+ * What version is the node currently running?
+ */
public int getMainVersion() {
return Version.buildNumber();
}
@@ -908,4 +917,7 @@
disabledThisSession = true;
}
+ protected long getStartedFetchingNextMainJarTimestamp() {
+ return startedFetchingNextMainJar;
+ }
}
Modified:
branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdater.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdater.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/node/updater/NodeUpdater.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -21,6 +21,7 @@
import freenet.node.Ticker;
import freenet.node.Version;
import freenet.support.Logger;
+import freenet.support.api.Bucket;
import freenet.support.io.BucketTools;
import freenet.support.io.FileBucket;
@@ -81,16 +82,20 @@
}
}
- public synchronized void onFoundEdition(long l, USK key){
+ public void onFoundEdition(long l, USK key){
logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Found edition "+l);
System.err.println("Found "+(extUpdate?"freenet-ext.jar " :
"")+"update edition "+l);
+ synchronized(this) {
if(!isRunning) return;
int found = (int)key.suggestedEdition;
- if(found > availableVersion) {
+ if(found <= availableVersion){
+ return;
+ }
Logger.minor(this, "Updating availableVersion from " +
availableVersion + " to " + found + " and queueing an update");
this.availableVersion = found;
+ }
ticker.queueTimedJob(new Runnable() {
public void run() {
@@ -99,7 +104,6 @@
}, 60 * 1000); // leave some time in case we get later
editions
// LOCKING: Always take the NodeUpdater lock *BEFORE*
the NodeUpdateManager lock
manager.onStartFetching(extUpdate);
- }
}
public void maybeUpdate(){
@@ -110,7 +114,7 @@
if(logMINOR)
Logger.minor(this, "maybeUpdate:
isFetching="+isFetching+", isRunning="+isRunning+",
availableVersion="+availableVersion);
if(isFetching || (!isRunning)) return;
- if(availableVersion == fetchedVersion) return;
+ if(availableVersion <= fetchedVersion) return;
fetchingVersion = availableVersion;
if(availableVersion > currentVersion) {
@@ -183,9 +187,13 @@
void onSuccess(FetchResult result, ClientGetter state, File
tempBlobFile, int fetchedVersion) {
logMINOR = Logger.shouldLog(Logger.MINOR, this);
synchronized(this) {
- if(fetchedVersion < this.fetchedVersion) {
+ if(fetchedVersion <= this.fetchedVersion) {
tempBlobFile.delete();
- result.asBucket().free();
+ if(result != null) {
+ Bucket toFree = result.asBucket();
+ if(toFree != null)
+ toFree.free();
+ }
return;
}
if(result == null || result.asBucket() == null ||
result.asBucket().size() == 0) {
Modified:
branches/saltedhashstore/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -46,6 +46,7 @@
import freenet.support.HTMLNode;
import freenet.support.Logger;
import freenet.support.SizeUtil;
+import freenet.support.TimeUtil;
import freenet.support.io.FileBucket;
import freenet.support.io.RandomAccessFileWrapper;
import java.io.FileFilter;
@@ -77,6 +78,8 @@
static final int MAX_NODES_SENDING_MAIN_JAR = 2;
/** Maximum time between asking for the main jar and it starting to
transfer */
static final int REQUEST_MAIN_JAR_TIMEOUT = 60*1000;
+ //** Grace time before we use UoM to update */
+ public static final int GRACE_TIME = 60*60*1000; // 1h
private boolean logMINOR;
private UserAlert alert;
@@ -206,29 +209,83 @@
if(!updateManager.isEnabled()) return true; // Don't care if
not enabled, except for the revocation URI
+ long now = System.currentTimeMillis();
+ long started =
updateManager.getStartedFetchingNextMainJarTimestamp();
+ long whenToTakeOverTheNormalUpdater;
+ if(started > 0) whenToTakeOverTheNormalUpdater = started +
GRACE_TIME;
+ else whenToTakeOverTheNormalUpdater =
System.currentTimeMillis() + GRACE_TIME;
+ boolean isOutdated = updateManager.node.isOudated();
+ // if the new build is self-mandatory or if the "normal"
updater has been trying to update for more than one hour
+ Logger.normal(this, "We received a valid UOMAnnounce :
(isOutdated="+isOutdated+" version="+mainJarVersion +"
whenToTakeOverTheNormalUpdater="+TimeUtil.formatTime(whenToTakeOverTheNormalUpdater-now)+")
file length "+mainJarFileLength+" updateManager version
"+updateManager.newMainJarVersion());
if(mainJarVersion > Version.buildNumber() && mainJarFileLength
> 0 &&
mainJarVersion >
updateManager.newMainJarVersion()) {
- // Fetch it
- try {
- FreenetURI mainJarURI = new
FreenetURI(jarKey).setSuggestedEdition(mainJarVersion);
-
if(mainJarURI.equals(updateManager.updateURI.setSuggestedEdition(mainJarVersion)))
{
- sendUOMRequestMain(source, true);
- } else {
- System.err.println("Node
"+source.userToString()+" offered us a new main jar (version
"+mainJarVersion+") but his key was different to ours:\n"+
- "our key:
"+updateManager.updateURI+"\nhis key:"+mainJarURI);
+ source.setMainJarOfferedVersion(mainJarVersion);
+ // Offer is valid.
+ if(logMINOR) Logger.minor(this, "Offer is valid");
+ if((isOutdated) || whenToTakeOverTheNormalUpdater <
now) {
+ // Take up the offer, subject to limits on
number of simultaneous downloads.
+ // If we have fetches running already, then
sendUOMRequestMain() will add the offer to nodesOfferedMainJar,
+ // so that if all our fetches fail, we can
fetch from this node.
+ if(!isOutdated) {
+ Logger.error(this, "The update
process seems to have been stuck for over an hour; let's switch to UoM! SHOULD
NOT HAPPEN! (1)");
+ System.out.println("The update
process seems to have been stuck for over an hour; let's switch to UoM! SHOULD
NOT HAPPEN! (1)");
+ } else
+ if(logMINOR) Logger.minor(this,
"Fetching via UOM as our build is deprecated");
+ // Fetch it
+ try {
+ FreenetURI mainJarURI = new
FreenetURI(jarKey).setSuggestedEdition(mainJarVersion);
+
if(mainJarURI.equals(updateManager.updateURI.setSuggestedEdition(mainJarVersion)))
+
sendUOMRequestMain(source, true);
+ else
+
System.err.println("Node " + source.userToString() + " offered us a new main
jar (version " + mainJarVersion + ") but his key was different to ours:\n" +
+ "our
key: " + updateManager.updateURI + "\nhis key:" + mainJarURI);
+ } catch(MalformedURLException e) {
+ // Should maybe be a useralert?
+ Logger.error(this, "Node " +
source + " sent us a UOMAnnounce claiming to have a new jar, but it had an
invalid URI: " + revocationKey + " : " + e, e);
+ System.err.println("Node " +
source.userToString() + " sent us a UOMAnnounce claiming to have a new jar, but
it had an invalid URI: " + revocationKey + " : " + e);
+ }
+ } else {
+ // Don't take up the offer. Add to
nodesOfferedMainJar, so that we know where to fetch it from when we need it.
+ synchronized(this) {
+ nodesOfferedMainJar.add(source);
}
- } catch (MalformedURLException e) {
- // Should maybe be a useralert?
- Logger.error(this, "Node "+source+" sent us a
UOMAnnounce claiming to have a new jar, but it had an invalid URI:
"+revocationKey+" : "+e, e);
- System.err.println("Node
"+source.userToString()+" sent us a UOMAnnounce claiming to have a new jar, but
it had an invalid URI: "+revocationKey+" : "+e);
+
updateManager.node.getTicker().queueTimedJob(new Runnable() {
+
+ public void run() {
+ if(updateManager.isBlown())
return;
+ if(!updateManager.isEnabled())
return;
+
if(updateManager.hasNewMainJar()) return;
+
if(!updateManager.node.isOudated()) {
+ Logger.error(this, "The
update process seems to have been stuck for over an hour; let's switch to UoM!
SHOULD NOT HAPPEN! (2)");
+ System.out.println("The
update process seems to have been stuck for over an hour; let's switch to UoM!
SHOULD NOT HAPPEN! (2)");
+ }
+ maybeRequestMainJar();
+ }
+
+ }, whenToTakeOverTheNormalUpdater - now);
}
}
return true;
}
- protected void sendUOMRequestMain(final PeerNode source, boolean
addOnFail) {
+ private void sendUOMRequestMain(final PeerNode source, boolean
addOnFail) {
+ if(logMINOR)
+ Logger.minor(this,
"sendUOMRequestMain("+source+","+addOnFail+")");
synchronized(this) {
+ long offeredVersion = source.getMainJarOfferedVersion();
+ if(offeredVersion < updateManager.newMainJarVersion()) {
+ if(offeredVersion <= 0)
+ Logger.error(this, "Not sending UOM
request to "+source+" because it hasn't offered anything!");
+ else {
+ if(logMINOR) Logger.minor(this, "Not
sending UOM request to "+source+" because we already have its offered version
"+offeredVersion);
+ }
+ return;
+ }
+ if(updateManager.getMainVersion() >= offeredVersion) {
+ if(logMINOR) Logger.minor(this, "Not fetching
from "+source+" because current jar version "+updateManager.getMainVersion()+"
is more recent than "+source.getMainJarOfferedVersion());
+ return;
+ }
if(nodesAskedSendMainJar.contains(source)) {
if(logMINOR) Logger.minor(this, "Recently asked
node "+source+" so not re-asking yet.");
return;
@@ -320,7 +377,7 @@
updateManager.node.clientCore.alerts.register(alert);
}
- class PeersSayKeyBlownAlert extends AbstractUserAlert {
+ private class PeersSayKeyBlownAlert extends AbstractUserAlert {
public PeersSayKeyBlownAlert() {
super(false, null, null, null, null,
UserAlert.CRITICAL_ERROR, true, null, false, null);
Added:
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoader.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoader.java
(rev 0)
+++
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoader.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -0,0 +1,35 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * load a plugin from wherever
+ * @author saces
+ *
+ */
+public abstract class PluginDownLoader<T> {
+
+ private T source;
+
+ public String setSource(String source) throws PluginNotFoundException {
+ this.source = checkSource(source);
+ return getPluginName(source);
+ }
+
+ public T getSource() {
+ return source;
+ }
+
+ abstract InputStream getInputStream() throws IOException,
PluginNotFoundException;
+
+ abstract T checkSource(String source) throws PluginNotFoundException;
+
+ abstract String getPluginName(String source) throws
PluginNotFoundException;
+
+ abstract String getSHA1sum() throws PluginNotFoundException;
+
+}
Added:
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
(rev 0)
+++
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -0,0 +1,32 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class PluginDownLoaderFile extends PluginDownLoader<File> {
+
+ public File checkSource(String source) {
+ return new File(source);
+ }
+
+ @Override
+ InputStream getInputStream() throws IOException {
+ return new FileInputStream(getSource());
+ }
+
+ @Override
+ String getPluginName(String source) throws PluginNotFoundException {
+ return source.substring(source.lastIndexOf('/') + 1);
+ }
+
+ @Override
+ String getSHA1sum() throws PluginNotFoundException {
+ return null;
+ }
+
+}
Added:
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
(rev 0)
+++
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -0,0 +1,64 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+
+import freenet.client.FetchException;
+import freenet.client.FetchResult;
+import freenet.client.HighLevelSimpleClient;
+import freenet.keys.FreenetURI;
+import freenet.support.Logger;
+
+public class PluginDownLoaderFreenet extends PluginDownLoader<FreenetURI> {
+
+ private boolean logMINOR;
+
+ final HighLevelSimpleClient hlsc;
+
+ PluginDownLoaderFreenet(HighLevelSimpleClient hlsc) {
+ logMINOR = Logger.shouldLog(Logger.MINOR, this);
+ this.hlsc = hlsc;
+ }
+
+ public FreenetURI checkSource(String source) throws
PluginNotFoundException {
+ try {
+ return new FreenetURI(source);
+ } catch (MalformedURLException e) {
+ Logger.error(this, "not a valid freenet key: " +
source, e);
+ throw new PluginNotFoundException("not a valid freenet
key: " + source, e);
+ }
+ }
+
+ @Override
+ InputStream getInputStream() throws IOException,
PluginNotFoundException {
+ FreenetURI uri = getSource();
+ while (true) {
+ try {
+ FetchResult fres = hlsc.fetch(uri);
+ return fres.asBucket().getInputStream();
+ } catch (FetchException e) {
+ if ((e.getMode() ==
FetchException.PERMANENT_REDIRECT) || (e.getMode() ==
FetchException.TOO_MANY_PATH_COMPONENTS)) {
+ uri = e.newURI;
+ continue;
+ }
+ Logger.error(this, "error while fetching
plugin: " + getSource(), e);
+ throw new PluginNotFoundException("error while
fetching plugin: " + getSource(), e);
+ }
+ }
+ }
+
+ @Override
+ String getPluginName(String source) throws PluginNotFoundException {
+ return source.substring(source.lastIndexOf('/') + 1);
+ }
+
+ @Override
+ String getSHA1sum() throws PluginNotFoundException {
+ return null;
+ }
+
+}
Added:
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
(rev 0)
+++
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -0,0 +1,104 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
+import java.util.Collection;
+import java.util.Iterator;
+
+import freenet.support.io.Closer;
+import freenet.support.io.FileUtil;
+
+public class PluginDownLoaderOfficial extends PluginDownLoaderURL {
+
+ private static final String certurl =
"freenet/clients/http/staticfiles/startssl.pem";
+ private static final String certfile = "startssl.pem";
+
+ public URL checkSource(String source) throws PluginNotFoundException {
+ return
super.checkSource("https://checksums.freenetproject.org/latest/" +
+ source + ".jar");
+ }
+
+ @Override
+ String getPluginName(String source) throws PluginNotFoundException {
+ return source + ".jar";
+ }
+
+ @Override
+ String getSHA1sum() throws PluginNotFoundException {
+ return null;
+ }
+
+ @Override
+ InputStream getInputStream() throws IOException {
+ File TMP_KEYSTORE = null;
+ FileInputStream fis = null;
+ InputStream is = null;
+ try {
+ TMP_KEYSTORE = File.createTempFile("keystore", ".tmp");
+ TMP_KEYSTORE.deleteOnExit();
+
+ KeyStore ks = KeyStore.getInstance("JKS");
+ ks.load(null, new char[0]);
+
+ is = getCert();
+
+ CertificateFactory cf =
CertificateFactory.getInstance("X.509");
+ Collection c = cf.generateCertificates(is);
+ Iterator it = c.iterator();
+ while(it.hasNext()) {
+ Certificate cert = (Certificate) it.next();
+
ks.setCertificateEntry(cert.getPublicKey().toString(), cert);
+ }
+ ks.store(new FileOutputStream(TMP_KEYSTORE), new
char[0]);
+ System.out.println("The CA has been imported into the
trustStore");
+ } catch(Exception e) {
+ System.err.println("Error while handling the CA :" +
e.getMessage());
+ throw new IOException("Error while handling the CA :
"+e);
+ } finally {
+ Closer.close(fis);
+ }
+
+ System.setProperty("javax.net.ssl.trustStore",
TMP_KEYSTORE.toString());
+
+ return super.getInputStream();
+ }
+
+ private InputStream getCert() throws IOException {
+
+ // normal the file should be here,
+ // left by installer or update script
+ File certFile = new File(certfile).getAbsoluteFile();
+
+ if (certFile.exists()) {
+ return new FileInputStream(certFile);
+ }
+
+ // try to create pem file
+ ClassLoader loader = ClassLoader.getSystemClassLoader();
+ InputStream in = loader.getResourceAsStream(certurl);
+ if(in != null) {
+ FileUtil.writeTo(in, certFile);
+ if (certFile.exists()) {
+ System.err.println("Nodes certfile created, use
it");
+ return new FileInputStream(certFile);
+ }
+ System.err.println("Nodes certfile couldnt created, try
direct");
+ // couldnt write the file, maybe paranoid selinux or
hardware node ;)
+ return in;
+ }
+
+ System.err.println("Certficate file '"+certfile+"' not found on
disk nor buildin.");
+ throw new IOException("Certficate file '"+certfile+"' not found
on disk nor buildin.");
+ }
+
+}
Added:
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
(rev 0)
+++
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -0,0 +1,98 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import freenet.support.Logger;
+
+public class PluginDownLoaderURL extends PluginDownLoader<URL> {
+
+ public URL checkSource(String source) throws PluginNotFoundException {
+ try {
+ return new URL(source);
+ } catch (MalformedURLException e) {
+ Logger.error(this, "could not build plugin url for " +
source, e);
+ throw new PluginNotFoundException("could not build
plugin url for " + source, e);
+ }
+ }
+
+ @Override
+ InputStream getInputStream() throws IOException {
+ URLConnection urlConnection = getSource().openConnection();
+ urlConnection.setUseCaches(false);
+ urlConnection.setAllowUserInteraction(false);
+ //urlConnection.connect();
+ return openConnectionCheckRedirects(urlConnection);
+ }
+
+ @Override
+ String getPluginName(String source) throws PluginNotFoundException {
+ String name = source.substring(source.lastIndexOf('/') + 1);
+ if (name.endsWith(".url")) {
+ name = name.substring(0, name.length() - 4);
+ }
+ return name;
+ }
+
+ @Override
+ String getSHA1sum() throws PluginNotFoundException {
+ return null;
+ }
+
+ static InputStream openConnectionCheckRedirects(URLConnection c) throws
IOException
+ {
+ boolean redir;
+ int redirects = 0;
+ InputStream in = null;
+ do
+ {
+ if (c instanceof HttpURLConnection)
+ {
+ ((HttpURLConnection)
c).setInstanceFollowRedirects(false);
+ }
+ // We want to open the input stream before getting
headers
+ // because getHeaderField() et al swallow IOExceptions.
+ in = c.getInputStream();
+ redir = false;
+ if (c instanceof HttpURLConnection)
+ {
+ HttpURLConnection http = (HttpURLConnection) c;
+ int stat = http.getResponseCode();
+ if (stat >= 300 && stat <= 307 && stat != 306 &&
+ stat !=
HttpURLConnection.HTTP_NOT_MODIFIED)
+ {
+ URL base = http.getURL();
+ String loc =
http.getHeaderField("Location");
+ URL target = null;
+ if (loc != null)
+ {
+ target = new URL(base, loc);
+ }
+ http.disconnect();
+ // Redirection should be allowed only
for HTTP and HTTPS
+ // and should be limited to 5
redirections at most.
+ if (target == null ||
!(target.getProtocol().equals("http")
+ ||
target.getProtocol().equals("https")
+ ||
target.getProtocol().equals("ftp"))
+ || redirects >= 5)
+ {
+ throw new
SecurityException("illegal URL redirect");
+ }
+ redir = true;
+ c = target.openConnection();
+ redirects++;
+ }
+ }
+ }
+ while (redir);
+ return in;
+ }
+}
+
Modified:
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginManager.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/src/freenet/pluginmanager/PluginManager.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -3,7 +3,10 @@
* http://www.gnu.org/ for further details of the GPL. */
package freenet.pluginmanager;
+import java.io.BufferedInputStream;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -11,9 +14,13 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
import java.util.Vector;
import java.util.jar.Attributes;
@@ -22,18 +29,23 @@
import java.util.jar.Manifest;
import java.util.zip.ZipException;
+import freenet.client.HighLevelSimpleClient;
import freenet.config.InvalidConfigValueException;
import freenet.config.SubConfig;
+import freenet.keys.FreenetURI;
import freenet.l10n.L10n;
import freenet.node.Node;
import freenet.node.NodeClientCore;
+import freenet.node.RequestStarter;
import freenet.node.Ticker;
import freenet.node.useralerts.SimpleUserAlert;
import freenet.node.useralerts.UserAlert;
+import freenet.support.HexUtil;
import freenet.support.JarClassLoader;
import freenet.support.Logger;
import freenet.support.api.HTTPRequest;
import freenet.support.api.StringArrCallback;
+import freenet.support.api.StringCallback;
import freenet.support.io.Closer;
import freenet.support.io.FileUtil;
@@ -49,6 +61,9 @@
*
*/
+ private String configFile;
+ private String installDir;
+
private final HashMap toadletList;
/* All currently starting plugins. */
@@ -59,15 +74,55 @@
private final NodeClientCore core;
SubConfig pmconfig;
private boolean logMINOR;
+ private boolean logDEBUG;
+ private final HighLevelSimpleClient client;
public PluginManager(Node node) {
+
+ logMINOR = Logger.shouldLog(Logger.MINOR, this);
+ logDEBUG = Logger.shouldLog(Logger.DEBUG, this);
+ // config
+
toadletList = new HashMap();
pluginWrappers = new Vector();
this.node = node;
this.core = node.clientCore;
- logMINOR = Logger.shouldLog(Logger.MINOR, this);
+
+ if(logMINOR) Logger.minor(this, "Starting Plugin Manager");
+
+ if(logDEBUG) Logger.debug(this, "Initialize Plugin Manager
config");
+
+ client =
core.makeClient(RequestStarter.INTERACTIVE_PRIORITY_CLASS, true);
+
pmconfig = new SubConfig("pluginmanager", node.config);
+// pmconfig.register("configfile", "fplugins.ini", 9, true, true,
"PluginConfig.configFile", "PluginConfig.configFileLong",
+// new StringCallback() {
+// public String get() {
+// return configFile;
+// }
+//
+// public void set(String val) throws
InvalidConfigValueException {
+// configFile = val;
+// }
+// });
+// configFile = pmconfig.getString("configfile");
+// pmconfig.register("installdir", "fplugins", 9, true, true,
"PluginConfig.installDir", "PluginConfig.installDirLong",
+// new StringCallback() {
+// public String get() {
+// return installDir;
+// //return getConfigLoadString();
+// }
+//
+// public void set(String val) throws
InvalidConfigValueException {
+// installDir = val;
+// //if(storeDir.equals(new File(val))) return;
+// // FIXME
+// //throw new
InvalidConfigValueException(L10n.getString("PluginManager.cannotSetOnceLoaded"));
+// }
+// });
+// installDir = pmconfig.getString("installdir");
+
// Start plugins in the config
pmconfig.register("loadplugin", null, 9, true, false,
"PluginManager.loadedOnStartup", "PluginManager.loadedOnStartupLong",
new StringArrCallback() {
@@ -85,17 +140,10 @@
String fns[] = pmconfig.getStringArr("loadplugin");
if (fns != null) {
for (String name : fns)
- startPlugin(name, false);
+ startPluginAuto(name, false);
}
pmconfig.finishedInitialization();
- /*System.err.println("=================================");
- pmconfig.finishedInitialization();
- fns = pmconfig.getStringArr("loadplugin");
- for (int i = 0 ; i < fns.length ; i++)
- System.err.println("Load: " + StringArrOption.decode(fns[i]));
- System.err.println("=================================");
- */
}
private String[] getConfigLoadString() {
@@ -126,8 +174,52 @@
return new HashSet/* <PluginProgress>
*/(startingPlugins);
}
}
+
+
+ // try to guess around...
+ public void startPluginAuto(final String pluginname, boolean store) {
+
+ if (isOfficialPlugin(pluginname)) {
+ startPluginOfficial(pluginname, store);
+ return;
+ }
+
+ try {
+ FreenetURI uri = new FreenetURI(pluginname);
+ startPluginFreenet(pluginname, store);
+ return;
+ } catch (MalformedURLException e) {
+ // not a freenet key
+ }
+
+ File[] roots = File.listRoots();
+ for (File f: roots) {
+ if (pluginname.startsWith(f.getName())) {
+ startPluginFile(pluginname, store);
+ return;
+ }
+ }
- public void startPlugin(final String filename, final boolean store) {
+ startPluginURL(pluginname, store);
+ }
+
+ public void startPluginOfficial(final String pluginname, boolean store)
{
+ realStartPlugin(new PluginDownLoaderOfficial(), pluginname,
store);
+ }
+
+ public void startPluginFile(final String filename, boolean store) {
+ realStartPlugin(new PluginDownLoaderFile(), filename, store);
+ }
+
+ public void startPluginURL(final String filename, boolean store) {
+ realStartPlugin(new PluginDownLoaderURL(), filename, store);
+ }
+
+ public void startPluginFreenet(final String filename, boolean store) {
+ realStartPlugin(new PluginDownLoaderFreenet(client), filename,
true);
+ }
+
+ private void realStartPlugin(final PluginDownLoader pdl, final String
filename, final boolean store) {
if (filename.trim().length() == 0)
return;
final PluginProgress pluginProgress = new
PluginProgress(filename);
@@ -140,7 +232,7 @@
Logger.normal(this, "Loading plugin: " +
filename);
FredPlugin plug;
try {
- plug = loadPlugin(filename);
+ plug = loadPlugin(pdl, filename);
pluginProgress.setProgress(PluginProgress.STARTING);
PluginInfoWrapper pi =
PluginHandler.startPlugin(PluginManager.this, filename, plug, new
PluginRespirator(node, PluginManager.this));
synchronized (pluginWrappers) {
@@ -259,6 +351,7 @@
} else {
pluginFile = new File(pluginDirectory,
pluginSpecification.substring(lastSlash + 1));
}
+ if(logDEBUG) Logger.minor(this, "Delete plugin - plugname: " +
pluginSpecification + "filename: " + pluginFile.getAbsolutePath() , new
Exception("debug"));
if (pluginFile.exists()) {
pluginFile.delete();
}
@@ -369,6 +462,22 @@
}
return null;
}
+
+ /**
+ * look for a Plugin with given classname
+ * @param plugname
+ * @return the true if not found
+ */
+ public boolean isPluginLoaded(String plugname) {
+ synchronized (pluginWrappers) {
+ for(int i=0;i<pluginWrappers.size();i++) {
+ PluginInfoWrapper pi = (PluginInfoWrapper)
pluginWrappers.get(i);
+ if (pi.getPluginClassName().equals(plugname))
+ return true;
+ }
+ }
+ return false;
+ }
public String handleHTTPGet(String plugin, HTTPRequest request) throws
PluginHTTPException {
FredPlugin handler = null;
@@ -432,6 +541,40 @@
pi.stopPlugin(this, maxWaitTime);
}
}
+
+ /**
+ * Returns a list of the names of all available official plugins. Right
now
+ * this list is hardcoded but in future we could retrieve this list
from emu
+ * or from freenet itself.
+ *
+ * @return A list of all available plugin names
+ */
+ public List<String> findAvailablePlugins() {
+ List<String> availablePlugins = new ArrayList<String> ();
+ availablePlugins.add("Echo");
+ availablePlugins.add("Freemail");
+ availablePlugins.add("HelloWorld");
+ availablePlugins.add("HelloFCP");
+ availablePlugins.add("JSTUN");
+ availablePlugins.add("KeyExplorer");
+ availablePlugins.add("MDNSDiscovery");
+ availablePlugins.add("SNMP");
+ availablePlugins.add("TestGallery");
+ availablePlugins.add("ThawIndexBrowser");
+ availablePlugins.add("UPnP");
+ availablePlugins.add("XMLLibrarian");
+ availablePlugins.add("XMLSpider");
+ return availablePlugins;
+ }
+
+ public boolean isOfficialPlugin(String name) {
+ if ((name == null) || (name.trim().length() == 0)) return false;
+ List<String> availablePlugins = findAvailablePlugins();
+ for(String n:availablePlugins) {
+ if (n.equals(name)) return true;
+ }
+ return false;
+ }
/**
* Tries to load a plugin from the given name. If the name only
contains the
@@ -440,6 +583,7 @@
* complete url and the short file already exists in the plugin
directory
* it's loaded from the plugin directory, otherwise it's retrieved from
the
* remote server.
+ * @param pdl
*
* @param name
* The specification of the plugin
@@ -447,32 +591,10 @@
* @throws PluginNotFoundException
* If anything goes wrong.
*/
- private FredPlugin loadPlugin(String name) throws
PluginNotFoundException {
- URL pluginUrl = null;
- /* check if name is a local file. */
- File pluginFile = new File(name);
- if (pluginFile.exists() && pluginFile.isFile()) {
- try {
- pluginUrl = pluginFile.toURI().toURL();
- } catch (MalformedURLException e) {
- throw new PluginNotFoundException("can not
convert local path");
- }
- } else {
- /* check if name contains a URL. */
- try {
- pluginUrl = new URL(name);
- } catch (MalformedURLException mue1) {
- }
- }
- if (pluginUrl == null) {
- try {
- pluginUrl = new
URL("http://downloads.freenetproject.org/alpha/plugins/" + name + ".jar.url");
- } catch (MalformedURLException mue1) {
- Logger.error(this, "could not build plugin url
for " + name, mue1);
- throw new PluginNotFoundException("could not
build plugin url for " + name, mue1);
- }
- }
-
+ private FredPlugin loadPlugin(PluginDownLoader pdl, String name) throws
PluginNotFoundException {
+
+ pdl.setSource(name);
+
/* check for plugin directory. */
File pluginDirectory = new File(node.getNodeDir(), "plugins");
if ((pluginDirectory.exists() &&
!pluginDirectory.isDirectory()) || (!pluginDirectory.exists() &&
!pluginDirectory.mkdirs())) {
@@ -481,14 +603,8 @@
}
/* get plugin filename. */
- String completeFilename = pluginUrl.getPath();
- String filename =
completeFilename.substring(completeFilename.lastIndexOf('/') + 1);
- // The URL to the JAR file might end with .url because of the
insane download server that redirects to a JAR file
- // in response to a request for a file ending '.url'. Strip it
off if so, since we want our JAR to end with '.jar'.
- if (filename.endsWith(".url")) {
- filename = filename.substring(0, filename.length() - 4);
- }
- pluginFile = new File(pluginDirectory, filename);
+ String filename = pdl.getPluginName(name);
+ File pluginFile = new File(pluginDirectory, filename);
/* check if file needs to be downloaded. */
if (logMINOR) {
@@ -500,16 +616,14 @@
try {
File tempPluginFile = null;
OutputStream pluginOutputStream = null;
- URLConnection urlConnection = null;
InputStream pluginInputStream = null;
try {
tempPluginFile =
File.createTempFile("plugin-", ".jar", pluginDirectory);
+ tempPluginFile.deleteOnExit();
+
+
pluginOutputStream = new
FileOutputStream(tempPluginFile);
- urlConnection =
pluginUrl.openConnection();
-
urlConnection.setUseCaches(false);
-
urlConnection.setAllowUserInteraction(false);
- urlConnection.connect();
- pluginInputStream =
urlConnection.getInputStream();
+ pluginInputStream =
pdl.getInputStream();
byte[] buffer = new byte[1024];
int read;
while ((read =
pluginInputStream.read(buffer)) != -1) {
@@ -522,6 +636,16 @@
Logger.error(this,
"could not rename temp file to plugin file");
throw new
PluginNotFoundException("could not rename temp file to plugin file");
}
+
+ String digest =
pdl.getSHA1sum();
+ if (digest != null) {
+ String testsum =
getFileSHA1(pluginFile);
+ if
(!(digest.equalsIgnoreCase(testsum))) {
+
Logger.error(this, "Checksum verification failed, should be " +digest+ " but
was " + testsum);
+ throw new
PluginNotFoundException("Checksum verification failed, should be " +digest+ "
but was " + testsum);
+ }
+ }
+
} catch (IOException ioe1) {
Logger.error(this, "could not
load plugin", ioe1);
if (tempPluginFile != null) {
@@ -617,6 +741,32 @@
}
}
+ private String getFileSHA1(File file) throws PluginNotFoundException {
+ final int BUFFERSIZE = 4096;
+ MessageDigest hash = null;
+ FileInputStream fis = null;
+ BufferedInputStream bis = null;
+
+ try {
+ hash = MessageDigest.getInstance("SHA-1");
+ // We compute the hash
+ //
http://java.sun.com/developer/TechTips/1998/tt0915.html#tip2
+ fis = new FileInputStream(file);
+ bis = new BufferedInputStream(fis);
+ int len = 0;
+ byte[] buffer = new byte[BUFFERSIZE];
+ while((len = bis.read(buffer)) > -1) {
+ hash.update(buffer, 0, len);
+ }
+ } catch (Exception e) {
+ throw new PluginNotFoundException("Error while
computing sha1 hash of the downloaded plugin: "+e, e);
+ } finally {
+ Closer.close(bis);
+ Closer.close(fis);
+ }
+ return HexUtil.bytesToHex(hash.digest());
+ }
+
Ticker getTicker() {
return node.getTicker();
}
Modified:
branches/saltedhashstore/freenet/src/freenet/support/FileLoggerHook.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/FileLoggerHook.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/support/FileLoggerHook.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -815,7 +815,7 @@
}
sb.append('\n');
- if (e != null) {
+ for(int j=0;j<20 && e != null;j++) {
sb.append(e.toString());
@@ -833,6 +833,10 @@
sb.append('\n');
}
}
+
+ Throwable cause = e.getCause();
+ if(cause != e) e = cause;
+ else break;
}
logString(sb.toString().getBytes());
Modified:
branches/saltedhashstore/freenet/src/freenet/support/PooledExecutor.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/PooledExecutor.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/src/freenet/support/PooledExecutor.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -184,6 +184,8 @@
// Run the job
try {
job.run();
+ } catch (OutOfMemoryError e) {
+ OOMHandler.handleOOM(e);
} catch(Throwable t) {
Logger.error(this, "Caught " + t + "
running job " + job, t);
}
Modified:
branches/saltedhashstore/freenet/test/freenet/clients/http/filter/ContentFilterTest.java
===================================================================
---
branches/saltedhashstore/freenet/test/freenet/clients/http/filter/ContentFilterTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++
branches/saltedhashstore/freenet/test/freenet/clients/http/filter/ContentFilterTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -32,8 +32,8 @@
// @see bug #710
private static final String ANCHOR_TEST = "<a href=\"#test\" />";
// @see bug #2451
- private static final String POUNT_CHARACTER_ENCODING_TEST = "<a
href=\"/CHK at
nvrrZF-qG7gInnxb2PUFNcNfgmdg2QHFQUsJGUzvUdE,nzsrkOSwJDP5lMod~kNDChDh96f1vIqGejOcMZpmIq0,AAEC--8/Ward
Churchill - [2001] In a Pig's Eye - CD 2 - 07 - #1 Security Threat.ogg\" />";
- private static final String POUNT_CHARACTER_ENCODING_TEST_RESULT = "<a
href=\"/CHK at
nvrrZF-qG7gInnxb2PUFNcNfgmdg2QHFQUsJGUzvUdE,nzsrkOSwJDP5lMod~kNDChDh96f1vIqGejOcMZpmIq0,AAEC--8/Ward%20Churchill%20-%20%5b2001%5d%20In%20a%20Pig%27s%20Eye%20-%20CD%202%20-%2007%20-%20%231%20Security%20Threat.ogg\"
/>";
+ private static final String POUNT_CHARACTER_ENCODING_TEST = "<a
href=\"/CHK at
DUiGC5D1ZsnFpH07WGkNVDujNlxhtgGxXBKrMT-9Rkw,~GrAWp02o9YylpxL1Fr4fPDozWmebhGv4qUoFlrxnY4,AAIC--8/Testing
- [blah] Apostrophe' - gratuitous #1 AND CAPITAL LETTERS!!!!.ogg\" />";
+ private static final String POUNT_CHARACTER_ENCODING_TEST_RESULT = "<a
href=\"/CHK at
DUiGC5D1ZsnFpH07WGkNVDujNlxhtgGxXBKrMT-9Rkw,~GrAWp02o9YylpxL1Fr4fPDozWmebhGv4qUoFlrxnY4,AAIC--8/Testing%20-%20%5bblah%5d%20Apostrophe%27%20-%20gratuitous%20%231%20AND%20CAPITAL%20LETTERS%21%21%21%21.ogg\"
/>";
// @see bug #2297
private static final String PREVENT_FPROXY_ACCESS = "<a
href=\""+BASE_URI+"\"/>";
private static final String WHITELIST_STATIC_CONTENT = "<a
href=\"/static/themes/clean/theme.css\" />";
Modified: branches/saltedhashstore/freenet/test/freenet/config/ConfigTest.java
===================================================================
--- branches/saltedhashstore/freenet/test/freenet/config/ConfigTest.java
2008-08-10 09:05:13 UTC (rev 21697)
+++ branches/saltedhashstore/freenet/test/freenet/config/ConfigTest.java
2008-08-10 09:16:13 UTC (rev 21698)
@@ -15,8 +15,6 @@
*/
package freenet.config;
-import freenet.config.Config;
-import freenet.config.SubConfig;
import freenet.utils.UTFUtil;
import junit.framework.TestCase;
@@ -71,5 +69,4 @@
public void testGet() {
assertSame(sc, conf.get("testing"));
}
-
}