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);
                }
         }


Reply via email to