Author: zothar
Date: 2008-01-09 01:54:55 +0000 (Wed, 09 Jan 2008)
New Revision: 16976
Modified:
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Locally broadcast a differential node reference to the node's connected darknet
peers when the node's name changes. Fix a bug in the differential node
reference handling changes of parseARK()
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-01-09 01:08:43 UTC (rev
16975)
+++ trunk/freenet/src/freenet/node/Node.java 2008-01-09 01:54:55 UTC (rev
16976)
@@ -149,6 +149,10 @@
else if("".equals(val))
val = "~none~";
myName = val;
+ // We'll broadcast the new name to our connected
darknet peers via a differential node reference
+ SimpleFieldSet fs = new SimpleFieldSet(true);
+ fs.putSingle("myName", myName);
+ peers.locallyBroadcastDiffNodeRef(fs, true);
// We call the callback once again to ensure
MeaningfulNodeNameUserAlert
// has been unregistered ... see #1595
get();
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2008-01-09 01:08:43 UTC
(rev 16975)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2008-01-09 01:54:55 UTC
(rev 16976)
@@ -615,6 +615,23 @@
}
}
+ /**
+ * Asynchronously send a differential node reference to every
isConnected() peer.
+ */
+ public void locallyBroadcastDiffNodeRef(SimpleFieldSet fs, boolean
toDarknetOnly) {
+ PeerNode[] peers;
+ synchronized (this) {
+ // myPeers not connectedPeers as connectedPeers only
contains
+ // ROUTABLE peers and we want to also send to
non-routable peers
+ peers = myPeers;
+ }
+ for(int i=0;i<peers.length;i++) {
+ if(!peers[i].isConnected()) continue;
+ if(toDarknetOnly && !peers[i].isDarknet()) continue;
+ peers[i].sendNodeToNodeMessage(fs,
Node.N2N_MESSAGE_TYPE_DIFFNODEREF, false, 0, false);
+ }
+ }
+
public PeerNode getRandomPeer() {
return getRandomPeer(null);
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2008-01-09 01:08:43 UTC
(rev 16975)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2008-01-09 01:54:55 UTC
(rev 16976)
@@ -660,12 +660,12 @@
FreenetURI uri = new FreenetURI(arkPubKey);
ClientSSK ssk = new ClientSSK(uri);
ark = new USK(ssk, arkNo);
- } else if(forDiffNodeRef && arkPubKey == null && myARK
!= null) {
+ } else if(forDiffNodeRef && arkPubKey == null && myARK
!= null && arkNo != -1) {
// get the ARK URI from the previous ARK and
the edition from the SFS
FreenetURI uri = myARK.getURI();
ClientSSK ssk = new ClientSSK(uri);
ark = new USK(ssk, arkNo);
- } else if(forDiffNodeRef && arkPubKey != null && myARK
!= null) {
+ } else if(forDiffNodeRef && arkPubKey != null && myARK
!= null && arkNo != -1) {
// the SFS must contain an edition if it
contains a arkPubKey
Logger.error(this, "Got a differential node
reference from " + this + " with an arkPubKey but no ARK edition");
return false;
@@ -3502,7 +3502,7 @@
private int handshakeIPAlternator;
public void sendNodeToNodeMessage(SimpleFieldSet fs, int n2nType,
boolean includeSentTime, long now, boolean queueOnNotConnected) {
- fs.put("n2nType", n2nType);
+ fs.putOverwrite("n2nType", Integer.toString(n2nType));
if(includeSentTime) {
fs.put("sentTime", now);
}