On Wednesday 21 May 2008 16:25, Daniel Cheng wrote: > 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
Yes but at some point we're going to have to support changing it. Also it's a bit low level imho; some transports may not have it as a short. > > On Tue, May 20, 2008 at 11:32 PM, <toad at freenetproject.org> 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 > > cvs at freenetproject.org > > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs > > > _______________________________________________ > Devl mailing list > Devl at freenetproject.org > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl > > -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available URL: <https://emu.freenetproject.org/pipermail/devl/attachments/20080522/9c19f7a5/attachment.pgp>
