forked from I2P_Developers/i2p.i2p
propagate from branch 'i2p.i2p' (head b4b595d294ace07f7fde583957d8e00e96af347c)
to branch 'i2p.i2p.zzz.test2' (head 90c482d231ea639bff8d37d390dac081e361f48f)
This commit is contained in:
@@ -18,10 +18,10 @@ public class RouterVersion {
|
||||
/** deprecated */
|
||||
public final static String ID = "Monotone";
|
||||
public final static String VERSION = CoreVersion.VERSION;
|
||||
public final static long BUILD = 6;
|
||||
public final static long BUILD = 10;
|
||||
|
||||
/** for example "-test" */
|
||||
public final static String EXTRA = "";
|
||||
public final static String EXTRA = "-rc";
|
||||
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
|
||||
public static void main(String args[]) {
|
||||
System.out.println("I2P Router version: " + FULL_VERSION);
|
||||
|
@@ -244,9 +244,10 @@ public class TunnelPoolSettings {
|
||||
String name = (String) e.getKey();
|
||||
String value = (String) e.getValue();
|
||||
if (name.startsWith(prefix)) {
|
||||
if (name.equalsIgnoreCase(prefix + PROP_ALLOW_ZERO_HOP))
|
||||
_allowZeroHop = getBoolean(value, DEFAULT_ALLOW_ZERO_HOP);
|
||||
else if (name.equalsIgnoreCase(prefix + PROP_BACKUP_QUANTITY))
|
||||
if (name.equalsIgnoreCase(prefix + PROP_ALLOW_ZERO_HOP)) {
|
||||
if (!_isExploratory)
|
||||
_allowZeroHop = getBoolean(value, DEFAULT_ALLOW_ZERO_HOP);
|
||||
} else if (name.equalsIgnoreCase(prefix + PROP_BACKUP_QUANTITY))
|
||||
_backupQuantity = getInt(value, DEFAULT_BACKUP_QUANTITY);
|
||||
//else if (name.equalsIgnoreCase(prefix + PROP_DURATION))
|
||||
// _duration = getInt(value, DEFAULT_DURATION);
|
||||
|
@@ -87,6 +87,10 @@ class FloodfillMonitorJob extends JobImpl {
|
||||
|
||||
if (getContext().commSystem().isInBadCountry())
|
||||
return false;
|
||||
String country = getContext().commSystem().getOurCountry();
|
||||
// anonymous proxy, satellite provider (not in bad country list)
|
||||
if ("a1".equals(country) || "a2".equals(country))
|
||||
return false;
|
||||
|
||||
// Only if up a while...
|
||||
if (getContext().router().getUptime() < MIN_UPTIME)
|
||||
|
@@ -70,9 +70,7 @@ public class Reseeder {
|
||||
* URLs are constructed, and because SSLEepGet doesn't follow redirects.
|
||||
*/
|
||||
public static final String DEFAULT_SEED_URL =
|
||||
//http://netdb.i2p2.de/" + "," +
|
||||
"http://reseed.i2p-projekt.de/" + "," +
|
||||
//"http://euve5653.vserver.de/netDb/" + "," +
|
||||
"http://cowpuncher.drollette.com/netdb/" + "," +
|
||||
"http://i2p.mooo.com/netDb/" + "," +
|
||||
"http://193.150.121.66/netDb/" + "," +
|
||||
@@ -83,14 +81,10 @@ public class Reseeder {
|
||||
"http://jp.reseed.i2p2.no/" + "," +
|
||||
"http://i2p-netdb.innovatio.no/" + "," +
|
||||
"http://ieb9oopo.mooo.com/";
|
||||
// Temp disabled since h2ik have been AWOL since 06-03-2013
|
||||
//"http://i2p.feared.eu/";
|
||||
|
||||
/** @since 0.8.2 */
|
||||
public static final String DEFAULT_SSL_SEED_URL =
|
||||
//"https://netdb.i2p2.de/" + "," +
|
||||
"https://reseed.i2p-projekt.de/" + "," +
|
||||
//"https://euve5653.vserver.de/netDb/" + "," +
|
||||
"https://cowpuncher.drollette.com/netdb/" + "," +
|
||||
"https://i2p.mooo.com/netDb/" + "," +
|
||||
"https://193.150.121.66/netDb/" + "," +
|
||||
@@ -101,9 +95,8 @@ public class Reseeder {
|
||||
"https://jp.reseed.i2p2.no:444/" + "," +
|
||||
"https://i2p-netdb.innovatio.no/" + "," +
|
||||
"https://ssl.webpack.de/ivae2he9.sg4.e-plaza.de/" + "," + // Only HTTPS and SU3 (v2) support
|
||||
"https://link.mx24.eu/" + "," + // Only HTTPS and SU3 (v3) support
|
||||
"https://ieb9oopo.mooo.com/";
|
||||
// Temp disabled since h2ik have been AWOL since 06-03-2013
|
||||
//"https://i2p.feared.eu/";
|
||||
|
||||
private static final String SU3_FILENAME = "i2pseeds.su3";
|
||||
|
||||
|
@@ -165,7 +165,10 @@ abstract class BuildRequestor {
|
||||
exec.buildComplete(cfg, pool);
|
||||
// Not even an exploratory tunnel? We are in big trouble.
|
||||
// Let's not spin through here too fast.
|
||||
try { Thread.sleep(250); } catch (InterruptedException ie) {}
|
||||
// But don't let a client tunnel waiting for exploratories slow things down too much,
|
||||
// as there may be other tunnel pools who can build
|
||||
int ms = pool.getSettings().isExploratory() ? 250 : 25;
|
||||
try { Thread.sleep(ms); } catch (InterruptedException ie) {}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -37,6 +37,10 @@ class ClientPeerSelector extends TunnelPeerSelector {
|
||||
Set<Hash> exclude = getExclude(settings.isInbound(), false);
|
||||
Set<Hash> matches = new HashSet<Hash>(length);
|
||||
if (length == 1) {
|
||||
// closest-hop restrictions
|
||||
Set<Hash> moreExclude = getClosestHopExclude(settings.isInbound());
|
||||
if (moreExclude != null)
|
||||
exclude.addAll(moreExclude);
|
||||
ctx.profileOrganizer().selectFastPeers(length, exclude, matches, 0);
|
||||
matches.remove(ctx.routerHash());
|
||||
rv = new ArrayList<Hash>(matches);
|
||||
@@ -47,10 +51,22 @@ class ClientPeerSelector extends TunnelPeerSelector {
|
||||
rv = new ArrayList<Hash>(length + 1);
|
||||
// OBEP or IB last hop
|
||||
// group 0 or 1 if two hops, otherwise group 0
|
||||
Set<Hash> firstHopExclude;
|
||||
if (!settings.isInbound()) {
|
||||
// exclude existing OBEPs to get some diversity
|
||||
// exclude existing OBEPs to get some diversity ?
|
||||
|
||||
// closest-hop restrictions
|
||||
Set<Hash> moreExclude = getClosestHopExclude(false);
|
||||
if (moreExclude != null) {
|
||||
moreExclude.addAll(exclude);
|
||||
firstHopExclude = moreExclude;
|
||||
} else {
|
||||
firstHopExclude = exclude;
|
||||
}
|
||||
} else {
|
||||
firstHopExclude = exclude;
|
||||
}
|
||||
ctx.profileOrganizer().selectFastPeers(1, exclude, matches, settings.getRandomKey(), length == 2 ? SLICE_0_1 : SLICE_0);
|
||||
ctx.profileOrganizer().selectFastPeers(1, firstHopExclude, matches, settings.getRandomKey(), length == 2 ? SLICE_0_1 : SLICE_0);
|
||||
matches.remove(ctx.routerHash());
|
||||
exclude.addAll(matches);
|
||||
rv.addAll(matches);
|
||||
@@ -74,7 +90,12 @@ class ClientPeerSelector extends TunnelPeerSelector {
|
||||
// IBGW or OB first hop
|
||||
// group 2 or 3 if two hops, otherwise group 1
|
||||
if (settings.isInbound()) {
|
||||
// exclude existing IBGWs to get some diversity
|
||||
// exclude existing IBGWs to get some diversity ?
|
||||
|
||||
// closest-hop restrictions
|
||||
Set<Hash> moreExclude = getClosestHopExclude(true);
|
||||
if (moreExclude != null)
|
||||
exclude.addAll(moreExclude);
|
||||
}
|
||||
ctx.profileOrganizer().selectFastPeers(1, exclude, matches, settings.getRandomKey(), length == 2 ? SLICE_2_3 : SLICE_1);
|
||||
matches.remove(ctx.routerHash());
|
||||
|
@@ -42,6 +42,13 @@ class ExploratoryPeerSelector extends TunnelPeerSelector {
|
||||
|
||||
Set<Hash> exclude = getExclude(settings.isInbound(), true);
|
||||
exclude.add(ctx.routerHash());
|
||||
// closest-hop restrictions
|
||||
// Since we're applying orderPeers() later, we don't know
|
||||
// which will be the closest hop, so just appply to all peers for now.
|
||||
Set<Hash> moreExclude = getClosestHopExclude(settings.isInbound());
|
||||
if (moreExclude != null)
|
||||
exclude.addAll(moreExclude);
|
||||
|
||||
// Don't use ff peers for exploratory tunnels to lessen exposure to netDb searches and stores
|
||||
// Hmm if they don't get explored they don't get a speed/capacity rating
|
||||
// so they don't get used for client tunnels either.
|
||||
|
@@ -14,6 +14,7 @@ import java.util.StringTokenizer;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.crypto.SHA256Generator;
|
||||
import net.i2p.crypto.SigType;
|
||||
import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.data.router.RouterInfo;
|
||||
@@ -327,6 +328,40 @@ public abstract class TunnelPeerSelector {
|
||||
return peers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick peers that we want to avoid for the first OB hop or last IB hop.
|
||||
* This is only filled in if our router sig type is not DSA.
|
||||
*
|
||||
* @param isInbound unused
|
||||
* @return null if none
|
||||
* @since 0.9.17
|
||||
*/
|
||||
protected Set<Hash> getClosestHopExclude(boolean isInbound) {
|
||||
RouterInfo ri = ctx.router().getRouterInfo();
|
||||
if (ri == null)
|
||||
return null;
|
||||
SigType type = ri.getIdentity().getSigType();
|
||||
if (type == SigType.DSA_SHA1)
|
||||
return null;
|
||||
Set<Hash> rv = new HashSet<Hash>(1024);
|
||||
FloodfillNetworkDatabaseFacade fac = (FloodfillNetworkDatabaseFacade)ctx.netDb();
|
||||
List<RouterInfo> known = fac.getKnownRouterData();
|
||||
if (known != null) {
|
||||
for (int i = 0; i < known.size(); i++) {
|
||||
RouterInfo peer = known.get(i);
|
||||
String v = peer.getOption("router.version");
|
||||
if (v == null)
|
||||
continue;
|
||||
// RI sigtypes added in 0.9.16
|
||||
// SSU inbound connection bug fixed in 0.9.17, but it won't bid, so NTCP only,
|
||||
// no need to check
|
||||
if (VersionComparator.comp(v, "0.9.16") < 0)
|
||||
rv.add(peer.getIdentity().calculateHash());
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/** warning, this is also called by ProfileOrganizer.isSelectable() */
|
||||
public static boolean shouldExclude(RouterContext ctx, RouterInfo peer) {
|
||||
Log log = ctx.logManager().getLog(TunnelPeerSelector.class);
|
||||
|
Reference in New Issue
Block a user