move comparators to their own class

This commit is contained in:
zzz
2015-01-29 12:52:46 +00:00
parent 5bf515441e
commit 17939036bc
2 changed files with 306 additions and 293 deletions

View File

@ -0,0 +1,304 @@
package net.i2p.router.transport.udp;
import java.io.Serializable;
import java.util.Collections;
import java.util.Comparator;
import net.i2p.data.DataHelper;
/**
* Comparators for various columns
*
* @since 0.9.18 moved from UDPTransport
*/
class Sorters {
static final int FLAG_ALPHA = 0;
static final int FLAG_IDLE_IN = 1;
static final int FLAG_IDLE_OUT = 2;
static final int FLAG_RATE_IN = 3;
static final int FLAG_RATE_OUT = 4;
static final int FLAG_SKEW = 5;
static final int FLAG_CWND= 6;
static final int FLAG_SSTHRESH = 7;
static final int FLAG_RTT = 8;
// static final int FLAG_DEV = 9;
static final int FLAG_RTO = 10;
static final int FLAG_MTU = 11;
static final int FLAG_SEND = 12;
static final int FLAG_RECV = 13;
static final int FLAG_RESEND = 14;
static final int FLAG_DUP = 15;
static final int FLAG_UPTIME = 16;
static final int FLAG_DEBUG = 99;
static Comparator<PeerState> getComparator(int sortFlags) {
Comparator<PeerState> rv;
switch (Math.abs(sortFlags)) {
case FLAG_IDLE_IN:
rv = new IdleInComparator();
break;
case FLAG_IDLE_OUT:
rv = new IdleOutComparator();
break;
case FLAG_RATE_IN:
rv = new RateInComparator();
break;
case FLAG_RATE_OUT:
rv = new RateOutComparator();
break;
case FLAG_UPTIME:
rv = new UptimeComparator();
break;
case FLAG_SKEW:
rv = new SkewComparator();
break;
case FLAG_CWND:
rv = new CwndComparator();
break;
case FLAG_SSTHRESH:
rv = new SsthreshComparator();
break;
case FLAG_RTT:
rv = new RTTComparator();
break;
//case FLAG_DEV:
// rv = new DevComparator();
// break;
case FLAG_RTO:
rv = new RTOComparator();
break;
case FLAG_MTU:
rv = new MTUComparator();
break;
case FLAG_SEND:
rv = new SendCountComparator();
break;
case FLAG_RECV:
rv = new RecvCountComparator();
break;
case FLAG_RESEND:
rv = new ResendComparator();
break;
case FLAG_DUP:
rv = new DupComparator();
break;
case FLAG_ALPHA:
default:
rv = new AlphaComparator();
break;
}
if (sortFlags < 0)
rv = Collections.reverseOrder(rv);
return rv;
}
static class AlphaComparator extends PeerComparator {
}
static class IdleInComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = r.getLastReceiveTime() - l.getLastReceiveTime();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
static class IdleOutComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = r.getLastSendTime() - l.getLastSendTime();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
static class RateInComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getReceiveBps() - r.getReceiveBps();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
static class RateOutComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getSendBps() - r.getSendBps();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
static class UptimeComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = r.getKeyEstablishedTime() - l.getKeyEstablishedTime();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
static class SkewComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = Math.abs(l.getClockSkew()) - Math.abs(r.getClockSkew());
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
static class CwndComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getSendWindowBytes() - r.getSendWindowBytes();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
static class SsthreshComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getSlowStartThreshold() - r.getSlowStartThreshold();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
static class RTTComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getRTT() - r.getRTT();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
/***
static class DevComparator extends PeerComparator {
static final DevComparator _instance = new DevComparator();
public static final DevComparator instance() { return _instance; }
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getRTTDeviation() - r.getRTTDeviation();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
****/
/** */
static class RTOComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getRTO() - r.getRTO();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
static class MTUComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getMTU() - r.getMTU();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
static class SendCountComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getPacketsTransmitted() - r.getPacketsTransmitted();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
static class RecvCountComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getPacketsReceived() - r.getPacketsReceived();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
static class ResendComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getPacketsRetransmitted() - r.getPacketsRetransmitted();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
static class DupComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getPacketsReceivedDuplicate() - r.getPacketsReceivedDuplicate();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
static class PeerComparator implements Comparator<PeerState>, Serializable {
public int compare(PeerState l, PeerState r) {
return DataHelper.compareTo(l.getRemotePeer().getData(), r.getRemotePeer().getData());
}
}
static void appendSortLinks(StringBuilder buf, String urlBase, int sortFlags, String descr, int ascending) {
if (ascending == FLAG_ALPHA) { // 0
buf.append(" <a href=\"").append(urlBase).append("?sort=0" +
"#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/inbound.png\" alt=\"V\"></a>");
} else if (sortFlags == ascending) {
buf.append(" <a href=\"").append(urlBase).append("?sort=").append(0-ascending);
buf.append("#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/inbound.png\" alt=\"V\"></a>" +
"<b><img src=\"/themes/console/images/outbound.png\" alt=\"^\"></b>");
} else if (sortFlags == 0 - ascending) {
buf.append(" <b><img src=\"/themes/console/images/inbound.png\" alt=\"V\"></b><a href=\"").append(urlBase).append("?sort=").append(ascending);
buf.append("#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/outbound.png\" alt=\"^\"></a>");
} else {
buf.append(" <a href=\"").append(urlBase).append("?sort=").append(0-ascending);
buf.append("#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/inbound.png\" alt=\"V\"></a>" +
"<a href=\"").append(urlBase).append("?sort=").append(ascending);
buf.append("#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/outbound.png\" alt=\"^\"></a>");
}
}
}

View File

@ -1,7 +1,6 @@
package net.i2p.router.transport.udp;
import java.io.IOException;
import java.io.Serializable;
import java.io.Writer;
import java.net.InetAddress;
import java.net.SocketException;
@ -9,8 +8,6 @@ import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@ -42,8 +39,9 @@ import net.i2p.router.transport.TransportBid;
import net.i2p.router.transport.TransportImpl;
import net.i2p.router.transport.TransportUtil;
import static net.i2p.router.transport.TransportUtil.IPv6Config.*;
import static net.i2p.router.transport.udp.PeerTestState.Role.*;
import net.i2p.router.transport.crypto.DHSessionKeyBuilder;
import static net.i2p.router.transport.udp.PeerTestState.Role.*;
import static net.i2p.router.transport.udp.Sorters.*;
import net.i2p.router.util.EventLog;
import net.i2p.router.util.RandomIterator;
import net.i2p.util.Addresses;
@ -2255,295 +2253,6 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
return _dhFactory;
}
private static final int FLAG_ALPHA = 0;
private static final int FLAG_IDLE_IN = 1;
private static final int FLAG_IDLE_OUT = 2;
private static final int FLAG_RATE_IN = 3;
private static final int FLAG_RATE_OUT = 4;
private static final int FLAG_SKEW = 5;
private static final int FLAG_CWND= 6;
private static final int FLAG_SSTHRESH = 7;
private static final int FLAG_RTT = 8;
//private static final int FLAG_DEV = 9;
private static final int FLAG_RTO = 10;
private static final int FLAG_MTU = 11;
private static final int FLAG_SEND = 12;
private static final int FLAG_RECV = 13;
private static final int FLAG_RESEND = 14;
private static final int FLAG_DUP = 15;
private static final int FLAG_UPTIME = 16;
private static final int FLAG_DEBUG = 99;
private static Comparator<PeerState> getComparator(int sortFlags) {
Comparator<PeerState> rv;
switch (Math.abs(sortFlags)) {
case FLAG_IDLE_IN:
rv = new IdleInComparator();
break;
case FLAG_IDLE_OUT:
rv = new IdleOutComparator();
break;
case FLAG_RATE_IN:
rv = new RateInComparator();
break;
case FLAG_RATE_OUT:
rv = new RateOutComparator();
break;
case FLAG_UPTIME:
rv = new UptimeComparator();
break;
case FLAG_SKEW:
rv = new SkewComparator();
break;
case FLAG_CWND:
rv = new CwndComparator();
break;
case FLAG_SSTHRESH:
rv = new SsthreshComparator();
break;
case FLAG_RTT:
rv = new RTTComparator();
break;
//case FLAG_DEV:
// rv = new DevComparator();
// break;
case FLAG_RTO:
rv = new RTOComparator();
break;
case FLAG_MTU:
rv = new MTUComparator();
break;
case FLAG_SEND:
rv = new SendCountComparator();
break;
case FLAG_RECV:
rv = new RecvCountComparator();
break;
case FLAG_RESEND:
rv = new ResendComparator();
break;
case FLAG_DUP:
rv = new DupComparator();
break;
case FLAG_ALPHA:
default:
rv = new AlphaComparator();
break;
}
if (sortFlags < 0)
rv = Collections.reverseOrder(rv);
return rv;
}
private static class AlphaComparator extends PeerComparator {
}
private static class IdleInComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = r.getLastReceiveTime() - l.getLastReceiveTime();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
private static class IdleOutComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = r.getLastSendTime() - l.getLastSendTime();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
private static class RateInComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getReceiveBps() - r.getReceiveBps();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
private static class RateOutComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getSendBps() - r.getSendBps();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
private static class UptimeComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = r.getKeyEstablishedTime() - l.getKeyEstablishedTime();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
private static class SkewComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = Math.abs(l.getClockSkew()) - Math.abs(r.getClockSkew());
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
private static class CwndComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getSendWindowBytes() - r.getSendWindowBytes();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
private static class SsthreshComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getSlowStartThreshold() - r.getSlowStartThreshold();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
private static class RTTComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getRTT() - r.getRTT();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
/***
private static class DevComparator extends PeerComparator {
private static final DevComparator _instance = new DevComparator();
public static final DevComparator instance() { return _instance; }
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getRTTDeviation() - r.getRTTDeviation();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
****/
/** */
private static class RTOComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getRTO() - r.getRTO();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
private static class MTUComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
int rv = l.getMTU() - r.getMTU();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return rv;
}
}
private static class SendCountComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getPacketsTransmitted() - r.getPacketsTransmitted();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
private static class RecvCountComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getPacketsReceived() - r.getPacketsReceived();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
private static class ResendComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getPacketsRetransmitted() - r.getPacketsRetransmitted();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
private static class DupComparator extends PeerComparator {
@Override
public int compare(PeerState l, PeerState r) {
long rv = l.getPacketsReceivedDuplicate() - r.getPacketsReceivedDuplicate();
if (rv == 0) // fallback on alpha
return super.compare(l, r);
else
return (int)rv;
}
}
private static class PeerComparator implements Comparator<PeerState>, Serializable {
public int compare(PeerState l, PeerState r) {
return DataHelper.compareTo(l.getRemotePeer().getData(), r.getRemotePeer().getData());
}
}
private static void appendSortLinks(StringBuilder buf, String urlBase, int sortFlags, String descr, int ascending) {
if (ascending == FLAG_ALPHA) { // 0
buf.append(" <a href=\"").append(urlBase).append("?sort=0" +
"#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/inbound.png\" alt=\"V\"></a>");
} else if (sortFlags == ascending) {
buf.append(" <a href=\"").append(urlBase).append("?sort=").append(0-ascending);
buf.append("#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/inbound.png\" alt=\"V\"></a>" +
"<b><img src=\"/themes/console/images/outbound.png\" alt=\"^\"></b>");
} else if (sortFlags == 0 - ascending) {
buf.append(" <b><img src=\"/themes/console/images/inbound.png\" alt=\"V\"></b><a href=\"").append(urlBase).append("?sort=").append(ascending);
buf.append("#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/outbound.png\" alt=\"^\"></a>");
} else {
buf.append(" <a href=\"").append(urlBase).append("?sort=").append(0-ascending);
buf.append("#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/inbound.png\" alt=\"V\"></a>" +
"<a href=\"").append(urlBase).append("?sort=").append(ascending);
buf.append("#udpcon\" title=\"").append(descr).append("\"><img src=\"/themes/console/images/outbound.png\" alt=\"^\"></a>");
}
}
@Override
public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException {
TreeSet<PeerState> peers = new TreeSet<PeerState>(getComparator(sortFlags));