public boolean isLowCapacity(boolean isRealtime) { PeerLoadStats stats = outputLoadTracker(isRealtime).getLastIncomingLoadStats(); if(stats == null) return false; NodePinger pinger = node.nodeStats.nodePinger; if(pinger == null) return false; // FIXME possible? if(pinger.capacityThreshold(isRealtime, true) > stats.peerLimit(true)) return true; if(pinger.capacityThreshold(isRealtime, false) > stats.peerLimit(false)) return true; return false; }
/** * 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(); } }
public void testEmptyCreation() throws BlockedTooLongException { NewPacketFormat npf = new NewPacketFormat(null, 0, 0); PeerMessageQueue pmq = new PeerMessageQueue(); SessionKey s = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); NPFPacket p = npf.createPacket(1400, pmq, s, false); if(p != null) fail("Created packet from nothing"); }
public void testSendPacketWithFragment() { NPFPacket p = new NPFPacket(); p.setSequenceNumber(100); p.addMessageFragment(new MessageFragment(true, false, true, 0, 8, 8, 0, new byte[] {(byte)0x01, (byte)0x23, (byte)0x45, (byte)0x67, (byte)0x89, (byte)0xAB, (byte)0xCD, (byte)0xEF}, null)); byte[] correctData = new byte[] {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x64, //Sequence number (100) (byte)0x00, (byte)0xB0, (byte)0x00, (byte)0x00, (byte)0x00, //Flags + messageID (byte)0x08, //Fragment length (byte)0x01, (byte)0x23, (byte)0x45, (byte)0x67, (byte)0x89, (byte)0xAB, (byte)0xCD, (byte)0xEF}; checkPacket(p, correctData); }
public void testLength() { NPFPacket p = new NPFPacket(); p.addMessageFragment(new MessageFragment(true, false, true, 0, 10, 10, 0, new byte[10], null)); assertEquals(20, p.getLength()); //Seqnum (4), numAcks (1), msgID (4), length (1), data (10) p.addMessageFragment(new MessageFragment(true, false, true, 5000, 10, 10, 0, new byte[10], null)); assertEquals(35, p.getLength()); // + msgID (4), length (1), data (10) //This fragment adds 13, but the next won't need a full message id anymore, so this should only add 11 //bytes p.addMessageFragment(new MessageFragment(true, false, true, 2500, 10, 10, 0, new byte[10], null)); assertEquals(46, p.getLength()); }
public void testFindClosestLocation() { for (double[] peers : PEER_LOCATIONS) { for (double target : TARGET_LOCATIONS) { int closest = PeerLocation.findClosestLocation(peers, target); double ref = trivialFindClosestDistance(peers, target); assertEquals(ref, Location.distance(peers[closest], target), EPSILON); } } }
@Override public boolean run(ClientContext context) { try { ((SendableInsert) request).onFailure(e, token, context); } finally { sched.removeRunningInsert((SendableInsert)(request), token.getKey()); // Something might be waiting for a request to complete (e.g. if we have two requests for the same key), // so wake the starter thread. } sched.wakeStarter(); return false; }
private void handleDataNotFound(Message msg, boolean wasFork, PeerNode next) { next.successNotOverload(realTimeFlag); node.failureTable.onFinalFailure(key, next, htl, origHTL, FailureTable.RECENTLY_FAILED_TIME, FailureTable.REJECT_TIME, source); if(!wasFork) finish(DATA_NOT_FOUND, next, false); else next.noLongerRoutingTo(origTag, false); }
@Override public boolean run(ClientContext context) { try { ((SendableInsert) request).onSuccess(token, key, context); } finally { sched.removeRunningInsert((SendableInsert)(request), token.getKey()); } // Something might be waiting for a request to complete (e.g. if we have two requests for the same key), // so wake the starter thread. sched.wakeStarter(); return false; }
@Override protected void onConnect() { OpennetManager om = node.getOpennet(); if(om != null) om.seedTracker.onConnectSeed(this); super.onConnect(); }
/** Notifies the listeners about status change*/ private void notifyPeerStatusChangeListeners(){ for(PeerStatusChangeListener l:listeners){ l.onPeerStatusChange(); for(PeerNode pn:myPeers()){ pn.registerPeerNodeStatusChangeListener(l); } } }
public boolean updateIsUrgent() { OpennetManager om = getOpennet(); if(om != null) { if(om.announcer != null && om.announcer.isWaitingForUpdater()) return true; } if(peers.getPeerNodeStatusSize(PeerManager.PEER_NODE_STATUS_TOO_NEW, true) > PeerManager.OUTDATED_MIN_TOO_NEW_DARKNET) return true; return false; }
@Override public boolean run(ClientContext context) { try { ((SendableGet) request).onFailure(e, token, context); } finally { sched.removeFetchingKey(key); } // Something might be waiting for a request to complete (e.g. if we have two requests for the same key), // so wake the starter thread. sched.wakeStarter(); return false; }
private void unregisterRequestHandlerWithNode() { RequestSender r; synchronized(this) { r = rs; } if(r != null) { PeerNode p = r.successFrom(); if(p != null) tag.finishedWaitingForOpennet(p); } tag.unlockHandler(); }
/** * Create a DarknetPeerNode or an OpennetPeerNode as appropriate * @throws PeerTooOldException */ public static PeerNode create(SimpleFieldSet fs, Node node2, NodeCrypto crypto, OpennetManager opennet, PeerManager manager) throws FSParseException, PeerParseException, ReferenceSignatureVerificationException, PeerTooOldException { if(crypto.isOpennet) return new OpennetPeerNode(fs, node2, crypto, opennet, true); else return new DarknetPeerNode(fs, node2, crypto, true, null, null); }
/** Caller should not hold locks while calling this. * @param exclude Only set this if you have already removed the slot waiter. */ void unregister(PeerNode exclude, PeerNode[] all) { if(all == null) return; for(PeerNode p : all) if(p != exclude) p.outputLoadTracker(realTime).unqueueSlotWaiter(this); }
private synchronized void enqueuePrioritizedMessageItem(MessageItem addMe) { //Assume it goes on the end, both the common case short prio = addMe.getPriority(); queuesByPriority[prio].addLast(addMe); if(addMe.sendLoadRT) mustSendLoadRT = true; if(addMe.sendLoadBulk) mustSendLoadBulk = true; }
@Override public boolean fullPacketQueued(int maxPacketSize) { return pn.getMessageQueue().mustSendSize(HMAC_LENGTH /* FIXME estimate headers */, maxPacketSize); } }
@Override public void sentPayload(int x) { node.sentPayload(x); node.nodeStats.requestSentBytes(isSSK, -x); }