rendered paste bodyIndex: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/clients/http/N2NTMToadlet.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/clients/http/N2NTMToadlet.java (revision 9477)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/clients/http/N2NTMToadlet.java (working copy)@@ -164,7 +164,7 @@ buf.append("PeerNode.hashCode '"+request.getParam("hashcode")+"' not found.<br /><br />\n"); buf.append("</div>"); buf.append("</div>");- } else if(!pn.isConnected() && !pn.isVerifiedIncompatibleNewerVersion() && !pn.isVerifiedIncompatibleOlderVersion()) {+ } else if(!pn.isConnected()) { ctx.getPageMaker().makeHead(buf, "Node To Node Text Message Failed"); buf.append("<div class=\"infobox infobox-error\">");Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/comm/DummyPeerContext.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/comm/DummyPeerContext.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/comm/DummyPeerContext.java (working copy)@@ -22,8 +22,11 @@ // Do nothing } + public boolean isReallyConnected() {+ return false;+ }+ public boolean isConnected() { return false; }- }Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/comm/PeerContext.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/comm/PeerContext.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/comm/PeerContext.java (working copy)@@ -14,5 +14,7 @@ void forceDisconnect(); /** Is the peer connected? If we can't tell, return true. */+ boolean isReallyConnected();+ boolean isConnected(); }Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/xfer/BlockTransmitter.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/xfer/BlockTransmitter.java (revision 9466)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/xfer/BlockTransmitter.java (working copy)@@ -399,7 +399,7 @@ msg = null; } Logger.minor(this, "Got "+msg);- if(!_destination.isConnected()) {+ if(!_destination.isReallyConnected()) { Logger.normal(this, "Terminating send "+_uid+" to "+_destination+" from "+_usm.getPortNumber()+" because node disconnected while waiting"); synchronized(_senderThread) { _sendComplete = true;Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/CHKInsertSender.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/CHKInsertSender.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/CHKInsertSender.java (working copy)@@ -637,7 +637,7 @@ MessageFilter mf = null; for(int i=0;i<waiters.length;i++) { AwaitingCompletion awc = waiters[i];- if(!awc.pn.isConnected()) {+ if(!awc.pn.isReallyConnected()) { Logger.normal(this, "Disconnected: "+awc.pn+" in "+CHKInsertSender.this); continue; }@@ -668,7 +668,7 @@ } if(noTimeLeft) { for(int i=0;i<waiters.length;i++) {- if(!waiters[i].pn.isConnected()) continue;+ if(!waiters[i].pn.isReallyConnected()) continue; if(!waiters[i].completedTransfer) { waiters[i].completedTransfer(false); }@@ -734,7 +734,7 @@ if(noTimeLeft) { Logger.minor(this, "Overall timeout on "+CHKInsertSender.this); for(int i=0;i<waiters.length;i++) {- if(!waiters[i].pn.isConnected()) continue;+ if(!waiters[i].pn.isReallyConnected()) continue; if(!waiters[i].receivedCompletionNotice) waiters[i].completed(false, false); if(!waiters[i].completedTransfer)@@ -758,7 +758,7 @@ boolean completedTransfers = true; synchronized(nodesWaitingForCompletion) { for(int i=0;i<waiters.length;i++) {- if(!waiters[i].pn.isConnected()) continue;+ if(!waiters[i].pn.isReallyConnected()) continue; if(!waiters[i].completedTransfer) { completedTransfers = false; break;@@ -773,7 +773,7 @@ } completedTransfers = true; for(int i=0;i<waiters.length;i++) {- if(!waiters[i].pn.isConnected()) continue;+ if(!waiters[i].pn.isReallyConnected()) continue; if(!waiters[i].completedTransfer) { completedTransfers = false; break;Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/InsertHandler.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/InsertHandler.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/InsertHandler.java (working copy)@@ -103,7 +103,7 @@ if(msg == null) { try {- if(source.isConnected() && startTime > (source.timeLastConnected()+Node.HANDSHAKE_TIMEOUT*4))+ if(source.isReallyConnected() && startTime > (source.timeLastConnected()+Node.HANDSHAKE_TIMEOUT*4)) Logger.error(this, "Did not receive DataInsert on "+uid+" from "+source+" !"); Message tooSlow = DMT.createFNPRejectedTimeout(uid); source.sendAsync(tooSlow, null);Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/KeyTracker.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/KeyTracker.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/KeyTracker.java (working copy)@@ -634,7 +634,7 @@ */ public int allocateOutgoingPacketNumber() throws KeyChangedException, NotConnectedException { int packetNumber;- if(!pn.isConnected()) throw new NotConnectedException();+ if(!pn.isReallyConnected()) throw new NotConnectedException(); synchronized(this) { if(isDeprecated) throw new KeyChangedException(); packetNumber = nextPacketNumber++;@@ -658,7 +658,7 @@ */ public int allocateOutgoingPacketNumberNeverBlock() throws KeyChangedException, NotConnectedException, WouldBlockException { int packetNumber;- if(!pn.isConnected()) throw new NotConnectedException();+ if(!pn.isReallyConnected()) throw new NotConnectedException(); synchronized(this) { packetNumber = nextPacketNumber; if(isDeprecated) throw new KeyChangedException();Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/LocationManager.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/LocationManager.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/LocationManager.java (working copy)@@ -124,7 +124,7 @@ PeerNode[] peers = node.peers.connectedPeers; for(int i=0;i<peers.length;i++) { PeerNode pn = peers[i];- if(pn.isConnected()) {+ if(pn.isReallyConnected()) { double ploc = pn.getLocation().getValue(); if(ploc == myLoc) { myFlag = true;@@ -386,7 +386,7 @@ } if(reply == null) {- if(pn.isConnected() && System.currentTimeMillis() - pn.timeLastConnected() > TIMEOUT*2) {+ if(pn.isReallyConnected() && System.currentTimeMillis() - pn.timeLastConnected() > TIMEOUT*2) { // Timed out! Abort... Logger.error(this, "Timed out waiting for SwapRejected/SwapReply on "+uid); }@@ -421,7 +421,7 @@ } if(reply == null) {- if(pn.isConnected() && System.currentTimeMillis() - pn.timeLastConnected() > TIMEOUT*2) {+ if(pn.isReallyConnected() && System.currentTimeMillis() - pn.timeLastConnected() > TIMEOUT*2) { // Hrrrm! Logger.error(this, "Timed out waiting for SwapComplete - malicious node?? on "+uid); }Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/NodeDispatcher.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/NodeDispatcher.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/NodeDispatcher.java (working copy)@@ -100,6 +100,7 @@ return true; } else if(spec == DMT.nodeToNodeTextMessage) { node.receivedNodeToNodeTextMessage(m);+ System.out.println("AABBgot "+m); return true; } return false;Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PacketSender.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PacketSender.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PacketSender.java (working copy)@@ -151,15 +151,15 @@ PeerNode pn = nodes[i]; lastReceivedPacketFromAnyNode = Math.max(pn.lastReceivedPacketTime(), lastReceivedPacketFromAnyNode);+ if(pn.isConnected()) {- - if(pn.shouldDisconnectNow()) {- pn.forceDisconnect();- continue;- }+ //if(pn.shouldDisconnectNow()) {+ // pn.forceDisconnect();+ //continue;+ //} // Is the node dead?- if(now - pn.lastReceivedPacketTime() > pn.maxTimeBetweenReceivedPackets()) {+ if(((now - pn.lastReceivedPacketTime() > pn.maxTimeBetweenReceivedPackets()))&&pn.isReallyConnected()) { Logger.error(this, "Disconnecting from "+pn+" - haven't received packets recently"); pn.disconnected(); continue;@@ -252,7 +252,7 @@ pn.addToLocalNodeSentMessagesToStatistic(m); node.packetMangler.processOutgoingOrRequeue(new MessageItem[] { new MessageItem(m, null) }, pn, true, true); }- } else {+ }else{ // Not connected // Send handshake if necessary long beforeHandshakeTime = System.currentTimeMillis();Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PeerManager.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PeerManager.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PeerManager.java (working copy)@@ -294,7 +294,7 @@ for(int i=0;i<5;i++) { PeerNode pn = connectedPeers[node.random.nextInt(connectedPeers.length)]; if(pn == exclude) continue;- if(pn.isConnected()) return pn;+ if(pn.isReallyConnected()) return pn; } // None of them worked // Move the un-connected ones out@@ -304,7 +304,7 @@ for(int i=0;i<myPeers.length;i++) { PeerNode pn = myPeers[i]; if(pn == exclude) continue;- if(pn.isConnected()) {+ if(pn.isReallyConnected()) { v.add(pn); } else { Logger.minor(this, "Excluding "+pn+" because is disconnected");@@ -311,7 +311,7 @@ } } int lengthWithoutExcluded = v.size();- if(exclude != null && exclude.isConnected())+ if(exclude != null && exclude.isReallyConnected()) v.add(exclude); PeerNode[] newConnectedPeers = new PeerNode[v.size()]; newConnectedPeers = (PeerNode[]) v.toArray(newConnectedPeers);@@ -348,7 +348,7 @@ PeerNode best = null; for(int i=0;i<peers.length;i++) { PeerNode p = peers[i];- if(!p.isConnected()) continue;+ if(!p.isReallyConnected()) continue; double diff = distance(p, loc); if(diff < bestDiff) { best = p;@@ -423,7 +423,7 @@ Logger.minor(this, "Skipping (req came from): "+p.getPeer()); continue; }- if(!p.isConnected()) {+ if(!p.isReallyConnected()) { Logger.minor(this, "Skipping (not connected): "+p.getPeer()); continue; }@@ -580,7 +580,7 @@ public boolean anyConnectedPeers() { PeerNode[] conns = connectedPeers; for(int i=0;i<conns.length;i++) {- if(conns[i].isConnected()) return true;+ if(conns[i].isReallyConnected()) return true; } return false; }Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PeerNode.java===================================================================--- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PeerNode.java (revision 9476)+++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PeerNode.java (working copy)@@ -112,8 +112,7 @@ /** Are we connected? If not, we need to start trying to * handshake. */- private boolean isConnected;- + private boolean isReallyConnected; /** * ARK fetcher. */@@ -368,7 +367,7 @@ swapRequestsInterval = new SimpleRunningAverage(50, Node.MIN_INTERVAL_BETWEEN_INCOMING_SWAP_REQUESTS); // Not connected yet; need to handshake- isConnected = false;+ isReallyConnected = false; node.addPeerNodeStatus(Node.PEER_NODE_STATUS_DISCONNECTED, this); messagesToSendNow = new LinkedList();@@ -680,10 +679,26 @@ * Note possible deadlocks! PeerManager calls this, we call * PeerManager in e.g. verified. */+ public boolean isReallyConnected() {+ return isReallyConnected;+ }+ public boolean isConnected() {- return isConnected;+ return isReallyConnected || (hasCompletedHandshake() && (isVerifiedIncompatibleNewerVersion() || isVerifiedIncompatibleOlderVersion())); }-+ + private synchronized boolean isSendable(Message msg){+ // The easy case+ if(isReallyConnected) return true;+ + String mt = msg.getSpec().getName();+ if((hasCompletedHandshake()&& (isVerifiedIncompatibleNewerVersion()||isVerifiedIncompatibleOlderVersion())) &&+ (mt.equals(DMT.pong)|| mt.equals(DMT.ping)|| mt.equals(DMT.NODE_TO_NODE_MESSAGE_TYPE) || mt.equals(DMT.PING_SEQNO)))+ return true;+ + return false;+ }+ /** * Send a message, off-thread, to this node. * @param msg The message to be sent.@@ -690,7 +705,11 @@ */ public void sendAsync(Message msg, AsyncMessageCallback cb) throws NotConnectedException { Logger.minor(this, "Sending async: "+msg+" : "+cb+" on "+this);- if(!isConnected) throw new NotConnectedException();+ if(!isConnected()) throw new NotConnectedException();+ if(!isSendable(msg)){+ Logger.minor(this, "The message can't be processed, we are connected to an incompatible version, discarding.");+ return;+ } MessageItem item = new MessageItem(msg, cb == null ? null : new AsyncMessageCallback[] {cb}); synchronized(routingBackoffSync) { reportBackoffStatus(System.currentTimeMillis());@@ -727,7 +746,7 @@ node.peers.disconnected(this); synchronized(this) { // Force renegotiation.- isConnected = false;+ isReallyConnected = false; setPeerNodeStatus(now); // Prevent sending packets to the node until that happens. if(currentTracker != null)@@ -791,7 +810,11 @@ synchronized(messagesToSendNow) { for(int i=offset;i<offset+length;i++) if(messages[i] != null)- messagesToSendNow.add(messages[i]);+ if(isSendable(messages[i].msg)){+ messagesToSendNow.add(messages[i]);+ }else{+ Logger.error(this,"Unable to requeue the message "+messages[i].msg+", discarding");+ } } } @@ -825,8 +848,8 @@ */ public boolean shouldSendHandshake() { long now = System.currentTimeMillis();- return (!isConnected) &&- (!isDisabled) && // don't connect to disabled peers+ return (!isConnected()) &&+ (!isDisabled) && // don't connect to disabled peers (!isListenOnly) && // don't send handshake requests to isListenOnly peers (handshakeIPs != null) && (now > sendHandshakeTime) &&@@ -850,11 +873,7 @@ long now = -1; synchronized(this) { now = System.currentTimeMillis();- if(verifiedIncompatibleOlderVersion || verifiedIncompatibleNewerVersion) { - // Let them know we're here, but have no hope of connecting- sendHandshakeTime = now + Node.MIN_TIME_BETWEEN_VERSION_SENDS- + node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_VERSION_SENDS);- } else if(invalidVersion() && !firstHandshake) {+ if(invalidVersion() && !firstHandshake) { sendHandshakeTime = now + Node.MIN_TIME_BETWEEN_VERSION_PROBES + node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_VERSION_PROBES); } else {@@ -947,7 +966,7 @@ */ public void send(Message req) throws NotConnectedException { synchronized (this) {- if(!isConnected()) {+ if(!isSendable(req)) { Logger.error(this, "Tried to send "+req+" but not connected to "+this, new Exception("debug")); return; }@@ -1045,7 +1064,7 @@ * can be used in handshaking when the connection hasn't been verified yet. */ synchronized void receivedPacket(boolean dontLog) throws NotConnectedException {- if(isConnected == false && !dontLog) {+ if(!isConnected() && !dontLog) { if(unverifiedTracker == null && currentTracker == null) { Logger.error(this, "Received packet while disconnected!: "+this, new Exception("error")); throw new NotConnectedException();@@ -1108,10 +1127,8 @@ } Logger.normal(this, "Not connecting to "+this+" - reverse invalid version "+Version.getVersionString()+" for peer's lastGoodversion: "+lastGoodVersion); verifiedIncompatibleNewerVersion = true;- isConnected = false;+ isReallyConnected = false; setPeerNodeStatus(now);- node.peers.disconnected(this);- return false; } else { verifiedIncompatibleNewerVersion = false; setPeerNodeStatus(now);@@ -1119,10 +1136,8 @@ if(invalidVersion()) { Logger.normal(this, "Not connecting to "+this+" - invalid version "+version); verifiedIncompatibleOlderVersion = true;- isConnected = false;+ isReallyConnected = false; setPeerNodeStatus(now);- node.peers.disconnected(this);- return false; } else { verifiedIncompatibleOlderVersion = false; setPeerNodeStatus(now);@@ -1132,7 +1147,7 @@ if(thisBootID != this.bootID) { connectedTime = System.currentTimeMillis(); Logger.minor(this, "Changed boot ID from "+bootID+" to "+thisBootID+" for "+getPeer());- isConnected = false; // Will be reset below+ isReallyConnected = false; // Will be reset below setPeerNodeStatus(now); if(previousTracker != null) { KeyTracker old = previousTracker;@@ -1160,7 +1175,8 @@ unverifiedTracker = null; if(previousTracker != null) previousTracker.deprecated();- isConnected = true;+ if((!isVerifiedIncompatibleNewerVersion())&&(!isVerifiedIncompatibleOlderVersion()))+ isReallyConnected = true; neverConnected = false; peerAddedTime = 0; // don't store anymore setPeerNodeStatus(now);@@ -1166,7 +1182,7 @@ setPeerNodeStatus(now); ctx = null; }- if(!isConnected)+ if(!isConnected()) node.peers.disconnected(this); Logger.normal(this, "Completed handshake with "+this+" on "+replyTo+" - current: "+currentTracker+" old: "+previousTracker+" unverified: "+unverifiedTracker+" bootID: "+thisBootID+" myName: "+myName); try {@@ -1175,7 +1191,7 @@ Logger.error(this, "Disconnected in completedHandshake with "+this); return true; // i suppose }- if(isConnected)+ if(isConnected()) node.peers.addConnectedPeer(this); sentInitialMessages = false; return true;@@ -1192,6 +1208,7 @@ else return; if(unverifiedTracker != null) return; }+ sendInitialMessages(); } @@ -1228,7 +1245,7 @@ previousTracker.deprecated(); currentTracker = unverifiedTracker; unverifiedTracker = null;- isConnected = true;+ isReallyConnected = true; neverConnected = false; peerAddedTime = 0; // don't store anymore setPeerNodeStatus(now);@@ -1449,8 +1466,16 @@ } public String getStatus() {+ String status;+ if(isReallyConnected)+ status = new String("CONNECTED");+ else if(isConnected())+ status = new String("INCOMPATIBLE");+ else+ status = new String("DISCONNECTED");+ return - (isConnected ? "CONNECTED " : "DISCONNECTED") + " " + getPeer()+" "+myName+" "+currentLocation.getValue()+" "+getVersion()+" backoff: "+routingBackoffLength+" ("+(Math.max(routingBackedOffUntil - System.currentTimeMillis(),0))+")";+ status + " " + getPeer()+" "+myName+" "+currentLocation.getValue()+" "+getVersion()+" backoff: "+routingBackoffLength+" ("+(Math.max(routingBackedOffUntil - System.currentTimeMillis(),0))+")"; } public String getTMCIPeerInfo() {@@ -1771,7 +1796,7 @@ Logger.minor(this, "Reporting ping time to "+this+" : "+(now - startTime)); } if(verifiedIncompatibleOlderVersion)- forceDisconnect();+ isReallyConnected=false; } public double averagePingTime() {@@ -1961,7 +1986,7 @@ public synchronized void setPeerNodeStatus(long now) { int oldPeerNodeStatus = peerNodeStatus;- if(isConnected) {+ if(isReallyConnected) { peerNodeStatus = Node.PEER_NODE_STATUS_CONNECTED; if(now < routingBackedOffUntil) { peerNodeStatus = Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF;@@ -1991,7 +2016,7 @@ } else { peerNodeStatus = Node.PEER_NODE_STATUS_DISCONNECTED; }- if(!isConnected && previousRoutingBackoffReason != null) {+ if(!isReallyConnected && previousRoutingBackoffReason != null) { node.removePeerNodeRoutingBackoffReason(previousRoutingBackoffReason, this); previousRoutingBackoffReason = null; }@@ -2020,7 +2045,7 @@ } public void disablePeer() {- if(isConnected) {+ if(isConnected()) { forceDisconnect(); } isDisabled = true;