I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 4a9bd84b authored by jrandom's avatar jrandom Committed by zzz
Browse files

check the delivery order and call out an error if a pong comes back in the wrong order

parent c02522b0
No related branches found
No related tags found
No related merge requests found
...@@ -27,7 +27,7 @@ public class PeerData { ...@@ -27,7 +27,7 @@ public class PeerData {
/** date sent (Long) to EventDataPoint containing the datapoints sent in the current period */ /** date sent (Long) to EventDataPoint containing the datapoints sent in the current period */
private Map _dataPoints; private Map _dataPoints;
/** date sent (Long) to EventDataPoint containing pings that haven't yet timed out or been ponged */ /** date sent (Long) to EventDataPoint containing pings that haven't yet timed out or been ponged */
private Map _pendingPings; private TreeMap _pendingPings;
private long _sessionStart; private long _sessionStart;
private long _lifetimeSent; private long _lifetimeSent;
private long _lifetimeReceived; private long _lifetimeReceived;
...@@ -208,14 +208,32 @@ public class PeerData { ...@@ -208,14 +208,32 @@ public class PeerData {
public void pongReceived(long dateSent, long pongSent) { public void pongReceived(long dateSent, long pongSent) {
long now = Clock.getInstance().now(); long now = Clock.getInstance().now();
synchronized (_updateLock) { synchronized (_updateLock) {
EventDataPoint data = (EventDataPoint) _pendingPings.remove(new Long(dateSent)); if (_pendingPings.size() <= 0) {
_log.warn("Pong received (sent at " + dateSent + ", " + (now-dateSent)
+ "ms ago, pong delay " + (pongSent-dateSent) + "ms, pong receive delay "
+ (now-pongSent) + "ms)");
return;
}
Long first = (Long)_pendingPings.firstKey();
EventDataPoint data = (EventDataPoint)_pendingPings.remove(new Long(dateSent));
if (data != null) { if (data != null) {
data.setPongReceived(now); data.setPongReceived(now);
data.setPongSent(pongSent); data.setPongSent(pongSent);
data.setWasPonged(true); data.setWasPonged(true);
locked_addDataPoint(data); locked_addDataPoint(data);
if (dateSent != first.longValue()) {
_log.error("Out of order delivery: received " + dateSent
+ " but the first pending is " + first.longValue()
+ " (delta " + (dateSent - first.longValue()) + ")");
} else {
_log.info("In order delivery for " + dateSent + " in ping "
+ _peer.getComment());
}
} else { } else {
_log.warn("Pong received, but no matching ping? ping sent at = " + dateSent); _log.warn("Pong received, but no matching ping? ping sent at = " + dateSent);
return;
} }
} }
_sendRate.addData(pongSent - dateSent, 0); _sendRate.addData(pongSent - dateSent, 0);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment