Author: toad
Date: 2007-07-28 21:10:18 +0000 (Sat, 28 Jul 2007)
New Revision: 14415
Modified:
trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/RequestHandler.java
trunk/freenet/src/freenet/node/RequestSender.java
Log:
New option passOpennetPeersThroughDarknet - defaults to TRUE.
If enabled, we relay opennet noderefs through darknet nodes. We never expose
our darknet ref or any other node's darknet ref, but it does mean we can get
opennet peers from our darknet/hybrid peers e.g. after downtime.
Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2007-07-28
20:56:14 UTC (rev 14414)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2007-07-28
21:10:18 UTC (rev 14415)
@@ -488,6 +488,8 @@
N2NTMUserAlert.header=From: ${from} (composed ${composed} | sent ${sent} |
received ${received})
N2NTMUserAlert.reply=Reply
N2NTMUserAlert.title=Node to Node Text Message ${number} from ${peername}
(${peer})
+Node.alwaysAllowLocalAddresses=Always allow connecting to nodes via local
addresses?
+Node.alwaysAllowLocalAddressesLong=If true, the node will attempt to connect
to nodes via their local (localhost, LAN) addresses as well as their public
IPs. If this is not set, you can still enable it for specific darknet peers
(but not opennet peers). Set this if you want to connect to other nodes on the
same LAN or computer, and don't mind that bogus references can cause your node
to send UDP packets to machines on your LAN.
Node.bandwidthLimitMustBePositiveOrMinusOne=Bandwidth limit must be positive
or -1
Node.bindTo=IP address to bind to
Node.bindToLong=IP address to bind to
@@ -528,6 +530,8 @@
Node.opennetEnabledLong=Enable promiscuous mode? If this is enabled, the node
will automatically exchange node references with other untrusted nodes
(Strangers as opposed to Friends). But this means that the fact that you are
running a node is no longer private, and many attacks are much easier. If you
know enough people running Freenet, you should stick to trusted (Friends)
connections to them.
Node.outBWLimit=Output bandwidth limit (bytes per second)
Node.outBWLimitLong=Hard output bandwidth limit (bytes/sec); the node should
almost never exceed this
+Node.passOpennetPeersThroughDarknet=Relay opennet noderefs through darknet
peers?
+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.storeDirectory=Store directory
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2007-07-28 20:56:14 UTC (rev
14414)
+++ trunk/freenet/src/freenet/node/Node.java 2007-07-28 21:10:18 UTC (rev
14415)
@@ -320,6 +320,7 @@
private final NodeCryptoConfig opennetCryptoConfig;
private OpennetManager opennet;
+ private boolean passOpennetRefsThroughDarknet;
// General stuff
@@ -814,6 +815,23 @@
opennetConfig.finishedInitialization();
+ nodeConfig.register("passOpennetPeersThroughDarknet", true,
sortOrder++, true, false, "Node.passOpennetPeersThroughDarknet",
"Node.passOpennetPeersThroughDarknetLong",
+ new BooleanCallback() {
+
+ public boolean get() {
+ synchronized(Node.this) {
+ return
passOpennetRefsThroughDarknet;
+ }
+ }
+
+ public void set(boolean val) throws
InvalidConfigValueException {
+ synchronized(Node.this) {
+
passOpennetRefsThroughDarknet = val;
+ }
+ }
+
+ });
+
// Extra Peer Data Directory
nodeConfig.register("extraPeerDataDir", new File(nodeDir,
"extra-peer-data-"+getDarknetPortNumber()).toString(), sortOrder++, true,
false, "Node.extraPeerDir", "Node.extraPeerDirLong",
new StringCallback() {
@@ -2656,5 +2674,9 @@
OpennetManager getOpennet() {
return opennet;
}
+
+ public synchronized boolean passOpennetRefsThroughDarknet() {
+ return passOpennetRefsThroughDarknet;
+ }
}
Modified: trunk/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestHandler.java 2007-07-28 20:56:14 UTC
(rev 14414)
+++ trunk/freenet/src/freenet/node/RequestHandler.java 2007-07-28 21:10:18 UTC
(rev 14415)
@@ -260,7 +260,7 @@
}
private void finishOpennet(RequestSender rs) {
- if(!source.isOpennet()) return;
+ if(!node.passOpennetRefsThroughDarknet()) return;
byte[] noderef = rs.waitForOpennetNoderef();
if(noderef == null) {
finishOpennetNoRelay();
Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java 2007-07-28 20:56:14 UTC
(rev 14414)
+++ trunk/freenet/src/freenet/node/RequestSender.java 2007-07-28 21:10:18 UTC
(rev 14415)
@@ -627,7 +627,8 @@
next.onSuccess(false, key instanceof NodeSSK);
}
- if(key instanceof NodeCHK && next != null && next.isOpennet()) {
+ if(key instanceof NodeCHK && next != null &&
+ (next.isOpennet() ||
node.passOpennetRefsThroughDarknet()) ) {
finishOpennet(next);
}
}