package com.limegroup.gnutella.util; import com.limegroup.gnutella.ManagedConnection; import com.limegroup.gnutella.messages.BadPacketException; import com.limegroup.gnutella.messages.Message; import com.limegroup.gnutella.messages.QueryRequest; import com.limegroup.gnutella.routing.PatchTableMessage; import com.limegroup.gnutella.routing.QueryRouteTable; import com.limegroup.gnutella.routing.ResetTableMessage; /** * Helper class that overrides getNumIntraUltrapeerConnections for * testing the horizon calculation and testing the new search * architecture. */ public abstract class TestConnection extends ManagedConnection { private boolean _queriesMustBeInRoutingTables; private final int CONNECTIONS; private int _numQueries = 0; private int _totalTTL = 0; private boolean _receivedQuery; /** * Constant for the <tt>QueryRouteTable</tt> for this * connection -- can be used by subclasses. */ protected QueryRouteTable QRT; TestConnection(int connections) { super("60.76.5.3", 4444); CONNECTIONS = connections; } /** * @param connections2 * @param b */ public TestConnection(int connections, boolean b) { this(connections); _queriesMustBeInRoutingTables = b; // TODO Auto-generated constructor stub } public int getNumIntraUltrapeerConnections() { return CONNECTIONS; } public boolean isUltrapeerQueryRoutingConnection() { return false; } /** * Override the stability check method -- assume we're always stable. */ public boolean isStable(long time) { return true; } /** * Accessor for the <tt>QueryRouteTable</tt> instance. */ public QueryRouteTable getQueryRouteTable() { return QRT; } public void originateQuery(QueryRequest query) { send(query); } /** * Overridden to keep track of messages sent. */ public void send(Message msg) { if(msg instanceof ResetTableMessage) { QRT.reset((ResetTableMessage)msg); } else if(msg instanceof PatchTableMessage) { try { QRT.patch((PatchTableMessage)msg); } catch (BadPacketException e) { throw new IllegalArgumentException("should not have received a bad packet"); } } if(!(msg instanceof QueryRequest)) return; _receivedQuery = true; _numQueries++; QueryRequest qr = (QueryRequest)msg; if(_queriesMustBeInRoutingTables && !shouldForwardQuery(qr)) { throw new IllegalArgumentException("received query that's not in table1: "+qr+" "+this); } int ttl = qr.getTTL(); _totalTTL += ttl; } public int getNumQueries() { return _numQueries; } public int getTotalTTL() { return _totalTTL; } public boolean receivedQuery() { return _receivedQuery; } }