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