Author: nextgens
Date: 2007-09-29 19:22:11 +0000 (Sat, 29 Sep 2007)
New Revision: 15394
Modified:
branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java
Log:
freenet-jfk: implement the opennet-promote-old-peer thingy in the branch so
that we can merge it back to trunk
Modified: branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java
===================================================================
--- branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java 2007-09-29
19:09:56 UTC (rev 15393)
+++ branches/freenet-jfk/src/freenet/node/FNPPacketMangler.java 2007-09-29
19:22:11 UTC (rev 15394)
@@ -434,7 +434,7 @@
* cached by the Responder.Receiving a
duplicate message simply causes
* the responder to Re-transmit the
corresponding message4
*/
- processJFKMessage3(payload, pn, replyTo);
+ processJFKMessage3(payload, pn, replyTo,
oldOpennetPeer);
}
else if(packetType==3){
/*
@@ -442,7 +442,7 @@
* using the same keys as in the previous
message.
* The signature is non-message recovering
*/
- processJFKMessage4(payload, pn, replyTo);
+ processJFKMessage4(payload, pn, replyTo,
oldOpennetPeer);
}
}
else {
@@ -686,7 +686,7 @@
* @param The peerNode we are talking to
* @return byte Message3
*/
- private void processJFKMessage3(byte[] payload, PeerNode pn,Peer
replyTo)
+ private void processJFKMessage3(byte[] payload, PeerNode pn,Peer
replyTo, boolean oldOpennetPeer)
{
final long t1 = System.currentTimeMillis();
if(logMINOR) Logger.minor(this, "Got a JFK(3) message,
processing it - "+pn);
@@ -816,9 +816,29 @@
// Send reply
sendJFKMessage4(1, 2, 3, nonceInitiator,
nonceResponder,initiatorExponential, responderExponential, c, Ke, Ka,
authenticator, pn, replyTo);
+ c.initialize(Ks);
- c.initialize(Ks);
- if(!pn.completedHandshake(bootID, data, 8, data.length-8, c,
Ks, replyTo, true)) {
+ // Promote if necessary
+ boolean dontWant = false;
+ if(oldOpennetPeer) {
+ OpennetManager opennet = node.getOpennet();
+ if(opennet == null) {
+ Logger.normal(this, "Dumping incoming
old-opennet peer as opennet just turned off: "+pn+".");
+ return;
+ }
+ if(!opennet.wantPeer(pn, true)) {
+ Logger.normal(this, "No longer want peer "+pn+"
- dumping it after connecting");
+ dontWant = true;
+ }
+ // wantPeer will call node.peers.addPeer(), we don't
have to.
+ }
+
+ if(pn.completedHandshake(bootID, data, 8, data.length-8, c, Ks,
replyTo, true)) {
+ if(dontWant)
+ node.peers.disconnect(pn, true, false);
+ else
+ pn.maybeSendInitialMessages();
+ } else {
Logger.error(this, "Handshake failure! with "+pn);
}
@@ -835,7 +855,7 @@
* @param The peerNode we are talking to
* @param replyTo the Peer we are replying to
*/
- private void processJFKMessage4(byte[] payload, PeerNode pn, Peer
replyTo)
+ private void processJFKMessage4(byte[] payload, PeerNode pn, Peer
replyTo, boolean oldOpennetPeer)
{
final long t1 = System.currentTimeMillis();
if(logMINOR) Logger.minor(this, "Got a JFK(4) message,
processing it - "+pn);
@@ -912,11 +932,32 @@
return;
}
+ // Promote if necessary
+ boolean dontWant = false;
+ if(oldOpennetPeer) {
+ OpennetManager opennet = node.getOpennet();
+ if(opennet == null) {
+ Logger.normal(this, "Dumping incoming
old-opennet peer as opennet just turned off: "+pn+".");
+ return;
+ }
+ if(!opennet.wantPeer(pn, true)) {
+ Logger.normal(this, "No longer want peer "+pn+"
- dumping it after connecting");
+ dontWant = true;
+ }
+ // wantPeer will call node.peers.addPeer(), we don't
have to.
+ }
+
// We change the key
c.initialize(pn.jfkKs);
- if(!pn.completedHandshake(bootID, data, 8, data.length - 8, c,
pn.jfkKs, replyTo, false)) {
+ if(pn.completedHandshake(bootID, data, 8, data.length - 8, c,
pn.jfkKs, replyTo, false)) {
+ if(dontWant)
+ node.peers.disconnect(pn, true, false);
+ else
+ pn.maybeSendInitialMessages();
+ } else {
Logger.error(this, "Handshake failed!");
}
+
// cleanup
pn.setJFKBuffer(null);
pn.jfkKa = null;