Why not just use the darknet port number?
I think each node have a different darknet port number even when they
are in the same VM

On Tue, May 20, 2008 at 11:32 PM,  <[EMAIL PROTECTED]> wrote:
> Author: toad
> Date: 2008-05-20 15:32:20 +0000 (Tue, 20 May 2008)
> New Revision: 19969
>
> Added:
>   branches/db4o/freenet/src/freenet/node/HandlePortTuple.java
> Modified:
>   branches/db4o/freenet/src/freenet/node/Node.java
>   branches/db4o/freenet/src/freenet/node/NodeCrypto.java
> Log:
> Create, store, and retrieve, a handle (random long value) which will be used 
> to find all other values related to a specific node.
>
> Added: branches/db4o/freenet/src/freenet/node/HandlePortTuple.java
> ===================================================================
> --- branches/db4o/freenet/src/freenet/node/HandlePortTuple.java               
>           (rev 0)
> +++ branches/db4o/freenet/src/freenet/node/HandlePortTuple.java 2008-05-20 
> 15:32:20 UTC (rev 19969)
> @@ -0,0 +1,10 @@
> +/* 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;
> +
> +/** Used to associate a port with a node database handle */
> +class HandlePortTuple {
> +       long handle;
> +       int portNumber;
> +}
>
> Modified: branches/db4o/freenet/src/freenet/node/Node.java
> ===================================================================
> --- branches/db4o/freenet/src/freenet/node/Node.java    2008-05-20 14:56:44 
> UTC (rev 19968)
> +++ branches/db4o/freenet/src/freenet/node/Node.java    2008-05-20 15:32:20 
> UTC (rev 19969)
> @@ -230,6 +230,10 @@
>         * ObjectContainer's from it. Be careful to refresh objects on any
>         * long-lived container! */
>        public final ObjectServer dbServer;
> +       /** A fixed random number which identifies the top-level objects 
> belonging to
> +        * this node, as opposed to any others that might be stored in the 
> same database
> +        * (e.g. because of many-nodes-in-one-VM). */
> +       public final long nodeDBHandle;
>
>        /** Stats */
>        public final NodeStats nodeStats;
> @@ -889,6 +893,13 @@
>                sortOrder += NodeCryptoConfig.OPTION_COUNT;
>
>                darknetCrypto = new NodeCrypto(this, false, darknetConfig, 
> startupTime, enableARKs);
> +
> +               ObjectContainer setupContainer = dbServer.openClient();
> +
> +               nodeDBHandle = darknetCrypto.getNodeHandle(setupContainer);
> +
> +               setupContainer.commit();
> +               setupContainer = null; // Don't reuse.
>
>                // Must be created after darknetCrypto
>                dnsr = new DNSRequester(this);
>
> Modified: branches/db4o/freenet/src/freenet/node/NodeCrypto.java
> ===================================================================
> --- branches/db4o/freenet/src/freenet/node/NodeCrypto.java      2008-05-20 
> 14:56:44 UTC (rev 19968)
> +++ branches/db4o/freenet/src/freenet/node/NodeCrypto.java      2008-05-20 
> 15:32:20 UTC (rev 19969)
> @@ -12,6 +12,10 @@
>  import java.util.Vector;
>  import java.util.zip.DeflaterOutputStream;
>
> +import com.db4o.ObjectContainer;
> +import com.db4o.ObjectSet;
> +import com.db4o.query.Predicate;
> +
>  import net.i2p.util.NativeBigInteger;
>  import freenet.crypt.BlockCipher;
>  import freenet.crypt.DSA;
> @@ -512,4 +516,36 @@
>        public FreenetInetAddress getBindTo() {
>                return config.getBindTo();
>        }
> +
> +       public long getNodeHandle(ObjectContainer setupContainer) {
> +               // Ignore warnings, this is db4o magic.
> +               ObjectSet result = setupContainer.query(new Predicate() {
> +                       public boolean match(HandlePortTuple tuple) {
> +                               return tuple.portNumber == portNumber;
> +                       }
> +               });
> +               long handle;
> +               if(result.hasNext()) {
> +                       handle = ((HandlePortTuple)result.next()).handle;
> +                       System.err.println("Retrieved database handle for 
> node on port "+portNumber+": "+handle);
> +                       return handle;
> +               } else {
> +                       while(true) {
> +                               handle = random.nextLong();
> +                               HandlePortTuple tuple = new HandlePortTuple();
> +                               tuple.handle = handle;
> +                               // Double-check with QBE, just in case the 
> RNG is broken (similar things have happened before!)
> +                               ObjectSet os = setupContainer.get(tuple);
> +                               if(os.hasNext()) {
> +                                       System.err.println("Generating 
> database handle for node: already taken: "+handle);
> +                                       continue;
> +                               }
> +                               tuple.portNumber = portNumber;
> +                               setupContainer.set(tuple);
> +                               System.err.println("Generated and stored 
> database handle for node on port "+portNumber+": "+handle);
> +                               return handle;
> +                       }
> +               }
> +       }
>  }
> +
>
> _______________________________________________
> cvs mailing list
> [EMAIL PROTECTED]
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
>
_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to