/** * Remove a PeerNode status from the map. Used internally when a peer is removed. * @param isInPeers If true, complain if the node is not in the peers list; if false, complain if it is. */ private void removePeerNodeStatus(int pnStatus, PeerNode peerNode, boolean noLog) { Integer peerNodeStatus = Integer.valueOf(pnStatus); this.allPeersStatuses.removeStatus(peerNodeStatus, peerNode, noLog); if(!peerNode.isOpennet()) this.darknetPeersStatuses.removeStatus(peerNodeStatus, peerNode, noLog); }
/** * Add a PeerNode status to the map. Used internally when a peer is added. */ private void addPeerNodeStatus(int pnStatus, PeerNode peerNode, boolean noLog) { Integer peerNodeStatus = Integer.valueOf(pnStatus); this.allPeersStatuses.addStatus(peerNodeStatus, peerNode, noLog); if(!peerNode.isOpennet()) this.darknetPeersStatuses.addStatus(peerNodeStatus, peerNode, noLog); }
public boolean addPeerConnection(PeerNode pn) { boolean retval = peers.addPeer(pn); peers.writePeersUrgent(pn.isOpennet()); return retval; }
void done() { synchronized(this) { if(done) return; done = true; } if(remove) { if(removePeer(pn) && !pn.isSeed()) writePeersUrgent(pn.isOpennet()); } } }, ctrDisconn);
public void changePeerNodeStatus(PeerNode peerNode, int oldPeerNodeStatus, int peerNodeStatus, boolean noLog) { Integer newStatus = Integer.valueOf(peerNodeStatus); Integer oldStatus = Integer.valueOf(oldPeerNodeStatus); this.allPeersStatuses.changePeerNodeStatus(peerNode, oldStatus, newStatus, noLog); if(!peerNode.isOpennet()) this.darknetPeersStatuses.changePeerNodeStatus(peerNode, oldStatus, newStatus, noLog); node.executor.execute(new Runnable() { @Override public void run() { updatePMUserAlert(); } }); }
public int countAlmostConnectedDarknetPeers() { int count = 0; PeerNode[] peers = myPeers(); for(PeerNode peer: peers) { if(peer == null) continue; if(!(peer instanceof DarknetPeerNode)) continue; if(peer.isOpennet()) continue; if(!peer.isConnected()) continue; count++; } return count; }
public PeerNode containsPeer(PeerNode pn) { PeerNode[] peers = pn.isOpennet() ? getOpennetAndSeedServerPeers() : getDarknetPeers(); for(PeerNode peer: peers) if(Arrays.equals(pn.getPubKeyHash(), peer.getPubKeyHash())) return peer; return null; }
public int countConnectedDarknetPeers() { int count = 0; PeerNode[] peers = myPeers(); for(PeerNode peer: peers) { if(peer == null) continue; if(!(peer instanceof DarknetPeerNode)) continue; if(peer.isOpennet()) continue; if(!peer.isRoutable()) continue; count++; } if(logMINOR) Logger.minor(this, "countConnectedDarknetPeers() returning "+count); return count; }
public int countCompatibleDarknetPeers() { int count = 0; PeerNode[] peers = myPeers(); for(PeerNode peer: peers) { if(peer == null) continue; if(!(peer instanceof DarknetPeerNode)) continue; if(peer.isOpennet()) continue; if(!peer.isConnected()) continue; if(!peer.isRoutingCompatible()) continue; count++; } return count; }
/** * There is no noderef to pass downstream. If we want a connection, send our * noderef and wait for a reply, otherwise just send an ack. */ private void finishOpennetNoRelay() throws NotConnectedException { OpennetManager om = node.getOpennet(); if(om != null && (source.isOpennet() || node.passOpennetRefsThroughDarknet())) { finishOpennetNoRelayInner(om); } else { ackOpennet(); } }
@Override public void run() { if(pn.isDisconnecting()) { if(remove) { if(removePeer(pn)) { if(!pn.isSeed()) { writePeersUrgent(pn.isOpennet()); } } } pn.disconnected(true, true); } } }, timeout);
/** * Asynchronously send a differential node reference to every isConnected() peer. */ public void locallyBroadcastDiffNodeRef(SimpleFieldSet fs, boolean toDarknetOnly, boolean toOpennetOnly) { // myPeers not connectedPeers as connectedPeers only contains // ROUTABLE peers and we want to also send to non-routable peers PeerNode[] peers = myPeers(); for(PeerNode peer: peers) { if(!peer.isConnected()) continue; if(toDarknetOnly && !peer.isDarknet()) continue; if(toOpennetOnly && !peer.isOpennet()) continue; peer.sendNodeToNodeMessage(fs, Node.N2N_MESSAGE_TYPE_DIFFNODEREF, false, 0, false); } }
/** * Either send an ack, indicating we've finished and aren't interested in opennet, * or wait for a noderef and relay it and wait for a response and relay that, * or send our own noderef and wait for a response and add that. * * One way or another this method must call applyByteCounts; unregisterRequestHandlerWithNode. * This happens asynchronously via ackOpennet() if we are unable to send a noderef. It * happens explicitly otherwise. */ private void finishOpennetChecked() throws NotConnectedException { OpennetManager om = node.getOpennet(); if(om != null && (node.passOpennetRefsThroughDarknet() || source.isOpennet())) { finishOpennetInner(om); } else { ackOpennet(); } }
/** If oneConnectionPerAddress is not set, but there are peers with the same * IP for which it is set, disconnect them. * @param peerNode * @param address */ public void maybeBootConnection(PeerNode peerNode, FreenetInetAddress address) { if(detector.includes(address)) return; if(!address.isRealInternetAddress(false, false, false)) return; ArrayList<PeerNode> possibleMatches = node.peers.getAllConnectedByAddress(address, true); if(possibleMatches == null) return; for(PeerNode pn : possibleMatches) { if(pn == peerNode) continue; if(pn.equals(peerNode)) continue; if(pn.crypto.config.oneConnectionPerAddress()) { if(pn instanceof DarknetPeerNode) { if(!(peerNode instanceof DarknetPeerNode)) { // Darknet is only affected by other darknet peers. // Opennet peers with the same IP will NOT cause darknet peers to be dropped, even if one connection per IP is set for darknet, and even if it isn't set for opennet. // (Which would be a perverse configuration anyway!) // FIXME likewise, FOAFs should not boot darknet connections. continue; } Logger.error(this, "Dropping peer "+pn+" because don't want connection due to others on the same IP address!"); System.out.println("Disconnecting permanently from your friend \""+((DarknetPeerNode)pn).getName()+"\" because your friend \""+((DarknetPeerNode)peerNode).getName()+"\" is using the same IP address "+address+"!"); } node.peers.disconnectAndRemove(pn, true, true, pn.isOpennet()); } } }
this.routable = peerNode.isRoutable(); this.isFetchingARK = peerNode.isFetchingARK(); this.isOpennet = peerNode.isOpennet(); this.averagePingTime = peerNode.averagePingTime(); this.averagePingTimeCorrected = peerNode.averagePingTimeCorrected();
final FileRandomAccessBuffer raf; if (source.isOpennet() && updateManager.dontAllowUOM()) { Logger.normal(this, "Peer " + source + " asked us for the blob file for " + name
if((OpennetManager.MAX_PEERS_FOR_SCALING < locs.length) && (source.isOpennet())) { if(locs.length > OpennetManager.PANIC_MAX_PEERS) {