@Override public String userToString() { return ""+getPeer()+" : "+getName(); }
@Override public boolean isValid() { DarknetPeerNode pn = (DarknetPeerNode) peerRef.get(); if(pn != null) { sourceNodeName = pn.getName(); sourcePeer = pn.getPeer().toString(); } return true; }
/** * Check for a peer of the node given its ip and port, name or identity, as a String * Report peer existence as boolean */ private boolean havePeer(String nodeIdentifier) { for(DarknetPeerNode pn: n.peers.getDarknetPeers()) { Peer peer = pn.getPeer(); String nodeIpAndPort = ""; if(peer != null) { nodeIpAndPort = peer.toString(); } String name = pn.myName; String identity = pn.getIdentityString(); if(identity.equals(nodeIdentifier) || nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier)) { return true; } } return false; }
public void deleteExtraPeerDataFile(int fileNumber) { String extraPeerDataDirPath = node.getExtraPeerDataDir(); File extraPeerDataPeerDir = new File(extraPeerDataDirPath, getIdentityString()); if(!extraPeerDataPeerDir.exists()) { Logger.error(this, "Extra peer data directory for peer does not exist: "+extraPeerDataPeerDir.getPath()); return; } if(!extraPeerDataPeerDir.isDirectory()) { Logger.error(this, "Extra peer data directory for peer not a directory: "+extraPeerDataPeerDir.getPath()); return; } File extraPeerDataFile = new File(extraPeerDataPeerDir, Integer.toString(fileNumber)); if(!extraPeerDataFile.exists()) { Logger.error(this, "Extra peer data file for peer does not exist: "+extraPeerDataFile.getPath()); return; } synchronized(extraPeerDataFileNumbers) { extraPeerDataFileNumbers.remove(fileNumber); } if(!extraPeerDataFile.delete()) { if(extraPeerDataFile.exists()) { Logger.error(this, "Cannot delete file "+extraPeerDataFile+" after sending message to "+getPeer()+" - it may be resent on resting the node"); } else { Logger.normal(this, "File does not exist when deleting: "+extraPeerDataFile+" after sending message to "+getPeer()); } } }
/** * Remove a peer from the node given its ip and port, name or identity, as a String * Report peer removal successfulness as boolean */ private boolean removePeer(String nodeIdentifier) { System.out.println("Removing peer from node for: "+nodeIdentifier); for(DarknetPeerNode pn: n.peers.getDarknetPeers()) { Peer peer = pn.getPeer(); String nodeIpAndPort = ""; if(peer != null) { nodeIpAndPort = peer.toString(); } String name = pn.myName; String identity = pn.getIdentityString(); if(identity.equals(nodeIdentifier) || nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier)) { n.removePeerConnection(pn); return true; } } System.out.println("No node in peers list for: "+nodeIdentifier); return false; }
@Override public void fatalTimeout() { if(node.isStopping()) return; Logger.error(this, "Disconnecting from darknet node "+this+" because of fatal timeout", new Exception("error")); System.err.println("Your friend node \""+getName()+"\" ("+getPeer()+" version "+getVersion()+") is having severe problems. We have disconnected to try to limit the effect on us. It will reconnect soon."); // FIXME post a useralert // Disconnect. forceDisconnect(); }
/** * Disable connecting to a peer given its ip and port, name or identity, as a String * Report peer success as boolean */ private boolean disablePeer(String nodeIdentifier) { for(DarknetPeerNode pn: n.peers.getDarknetPeers()) { Peer peer = pn.getPeer(); String nodeIpAndPort = ""; if(peer != null) { nodeIpAndPort = peer.toString(); } String name = pn.myName; String identity = pn.getIdentityString(); if(identity.equals(nodeIdentifier) || nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier)) { pn.disablePeer(); return true; } } return false; }
/** * Enable connecting to a peer given its ip and port, name or identity, as a String * Report peer success as boolean */ private boolean enablePeer(String nodeIdentifier) { for(DarknetPeerNode pn: n.peers.getDarknetPeers()) { Peer peer = pn.getPeer(); String nodeIpAndPort = ""; if(peer != null) { nodeIpAndPort = peer.toString(); } String name = pn.myName; String identity = pn.getIdentityString(); if(identity.equals(nodeIdentifier) || nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier)) { pn.enablePeer(); return true; } } return false; }
public N2NTMUserAlert(DarknetPeerNode sourcePeerNode, String message, int fileNumber, long composedTime, long sentTime, long receivedTime) { super(true, null, null, null, null, UserAlert.MINOR, true, null, true, null); this.messageText = message; this.fileNumber = fileNumber; this.composedTime = composedTime; this.sentTime = sentTime; this.receivedTime = receivedTime; peerRef = sourcePeerNode.getWeakRef(); sourceNodeName = sourcePeerNode.getName(); sourcePeer = sourcePeerNode.getPeer().toString(); }
Logger.normal(this, "Received N2NTM from '"+darkSource.getPeer()+"'"); SimpleFieldSet fs = null; try { int fileNumber = darkSource.writeNewExtraPeerDataFile( fs, EXTRA_PEER_DATA_TYPE_N2NTM); if( fileNumber == -1 ) { Logger.error( this, "Failed to write N2NTM to extra peer data file for peer "+darkSource.getPeer());
/** * Handle a node to node text message SimpleFieldSet * @throws FSParseException */ public void handleNodeToNodeTextMessageSimpleFieldSet(SimpleFieldSet fs, DarknetPeerNode source, int fileNumber) throws FSParseException { if(logMINOR) Logger.minor(this, "Got node to node message: \n"+fs); int overallType = fs.getInt("n2nType"); fs.removeValue("n2nType"); if(overallType == Node.N2N_MESSAGE_TYPE_FPROXY) { handleFproxyNodeToNodeTextMessageSimpleFieldSet(fs, source, fileNumber); } else { Logger.error(this, "Received unknown node to node message type '"+overallType+"' from "+source.getPeer()); } }
@Override protected void sendInitialMessages() { super.sendInitialMessages(); try { sendVisibility(); } catch(NotConnectedException e) { Logger.error(this, "Completed handshake with " + getPeer() + " but disconnected: "+e, e); } if(!dontKeepFullFieldSet()) { try { sendAsync(DMT.createFNPGetYourFullNoderef(), null, node.nodeStats.foafCounter); } catch (NotConnectedException e) { // Ignore } } }
private void handleFproxyNodeToNodeTextMessageSimpleFieldSet(SimpleFieldSet fs, DarknetPeerNode source, int fileNumber) throws FSParseException { int type = fs.getInt("type"); if(type == Node.N2N_TEXT_MESSAGE_TYPE_USERALERT) { source.handleFproxyN2NTM(fs, fileNumber); } else if(type == Node.N2N_TEXT_MESSAGE_TYPE_FILE_OFFER) { source.handleFproxyFileOffer(fs, fileNumber); } else if(type == Node.N2N_TEXT_MESSAGE_TYPE_FILE_OFFER_ACCEPTED) { source.handleFproxyFileOfferAccepted(fs, fileNumber); } else if(type == Node.N2N_TEXT_MESSAGE_TYPE_FILE_OFFER_REJECTED) { source.handleFproxyFileOfferRejected(fs, fileNumber); } else if(type == Node.N2N_TEXT_MESSAGE_TYPE_BOOKMARK) { source.handleFproxyBookmarkFeed(fs, fileNumber); } else if(type == Node.N2N_TEXT_MESSAGE_TYPE_DOWNLOAD) { source.handleFproxyDownloadFeed(fs, fileNumber); } else { Logger.error(this, "Received unknown fproxy node to node message sub-type '"+type+"' from "+source.getPeer()); } }