Index: /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 9509) +++ /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.

\n"); buf.append(""); buf.append(""); - } else if(!pn.isConnected() && !pn.isVerifiedIncompatibleNewerVersion() && !pn.isVerifiedIncompatibleOlderVersion()) { + } else if(!pn.isConnected()) { ctx.getPageMaker().makeHead(buf, "Node To Node Text Message Failed"); buf.append("
"); 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 9509) +++ /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 9509) +++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/io/comm/PeerContext.java (working copy) @@ -13,6 +13,9 @@ /** Force the peer to disconnect */ void forceDisconnect(); - /** Is the peer connected? If we can't tell, return true. */ + /** Is the peer connected? Have we established the session link? */ boolean isConnected(); + + /** Is the peer connected? are we able to route requests to it? */ + boolean isReallyConnected(); } 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 9509) +++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/CHKInsertSender.java (working copy) @@ -644,7 +644,7 @@ MessageFilter mf = null; for(int i=0;i= 1 ? String.valueOf(callbacks[0]) : "")); Logger.minor(this, log); } - if(tracker == null || (!tracker.pn.isConnected())) { + if(tracker == null || (!tracker.pn.isReallyConnected())) { throw new NotConnectedException(); } @@ -1398,6 +1398,11 @@ public boolean isDisconnected(PeerContext context) { if(context == null) return false; - return !((PeerNode)context).isConnected(); + return !((PeerNode)context).isReallyConnected(); + } + + public boolean isRestricted(PeerContext context) { + if(context == null) return false; + return (!((PeerNode)context).isReallyConnected() && ((PeerNode)context).isConnected()); } } Index: /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/IPDetectorPluginManager.java =================================================================== --- /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/IPDetectorPluginManager.java (revision 9509) +++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/IPDetectorPluginManager.java (working copy) @@ -153,7 +153,7 @@ // Unique IP address? Peer peer = p.getPeer(); InetAddress addr = peer.getAddress(false); - if(p.isConnected() && peer != null && addr != null && IPUtil.checkAddress(peer.getAddress())) { + if(p.isReallyConnected() && peer != null && addr != null && IPUtil.checkAddress(peer.getAddress())) { // Connected node, on a real internet IP address. // Is it internal? boolean internal = false; @@ -250,7 +250,7 @@ if(firstTimeMaybeFakePeers > 0) timeref = firstTimeMaybeFakePeers; for(int i=0;i (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, 0, 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 9509) +++ /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 9509) +++ /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 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 9509) +++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/NodeDispatcher.java (working copy) @@ -50,7 +50,32 @@ Logger.minor(this, "Lost connection replying to "+m); } return true; + }else if(spec == DMT.FNPLinkPing) { + long id = m.getLong(DMT.PING_SEQNO); + Message msg = DMT.createFNPLinkPong(id); + try { + source.sendAsync(msg, null, 0, null); + } catch (NotConnectedException e) { + // Ignore + } + return true; + } else if(spec == DMT.FNPLinkPong) { + long id = m.getLong(DMT.PING_SEQNO); + source.receivedLinkPong(id); + return true; + } else if(spec == DMT.FNPDetectedIPAddress) { + Peer p = (Peer) m.getObject(DMT.EXTERNAL_ADDRESS); + source.setRemoteDetectedPeer(p); + node.redetectAddress(); + } else if(spec == DMT.FNPVoid) { + return true; + } else if(spec == DMT.nodeToNodeTextMessage) { + node.receivedNodeToNodeTextMessage(m); + return true; } + + if(!source.isReallyConnected()) return false; + if(spec == DMT.FNPLocChangeNotification) { double newLoc = m.getDouble(DMT.LOCATION); source.updateLocation(newLoc); @@ -79,29 +104,7 @@ return handleInsertRequest(m, false); } else if(spec == DMT.FNPSSKInsertRequest) { return handleInsertRequest(m, true); - } else if(spec == DMT.FNPLinkPing) { - long id = m.getLong(DMT.PING_SEQNO); - Message msg = DMT.createFNPLinkPong(id); - try { - source.sendAsync(msg, null, 0, null); - } catch (NotConnectedException e) { - // Ignore - } - return true; - } else if(spec == DMT.FNPLinkPong) { - long id = m.getLong(DMT.PING_SEQNO); - source.receivedLinkPong(id); - return true; - } else if(spec == DMT.FNPDetectedIPAddress) { - Peer p = (Peer) m.getObject(DMT.EXTERNAL_ADDRESS); - source.setRemoteDetectedPeer(p); - node.redetectAddress(); - } else if(spec == DMT.FNPVoid) { - return true; - } else if(spec == DMT.nodeToNodeTextMessage) { - node.receivedNodeToNodeTextMessage(m); - return true; - } + } return false; } 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 9509) +++ /home/nextgens/src/eclipse/Freenet 0.7/src/freenet/node/PeerManager.java (working copy) @@ -180,7 +180,7 @@ } public void addConnectedPeer(PeerNode pn) { - if(!pn.isConnected()) { + if(!pn.isReallyConnected()) { Logger.minor(this, "Not connected: "+pn); return; } @@ -272,7 +272,7 @@ locs = new double[connectedPeers.length]; int x = 0; for(int i=0;i