pull/1/head
Michael Peter Christen 11 years ago
parent 4e3375d983
commit 79771c60c0

@ -207,10 +207,6 @@ public class SettingsAck_p {
} else if (staticIP.startsWith("https://")) { } else if (staticIP.startsWith("https://")) {
if (staticIP.length() > 8) { staticIP = staticIP.substring(8); } else { staticIP = ""; } if (staticIP.length() > 8) { staticIP = staticIP.substring(8); } else { staticIP = ""; }
} }
// TODO IPv6 support!
if (staticIP.indexOf(':',0) > 0) {
staticIP = staticIP.substring(0, staticIP.indexOf(':',0));
}
if (staticIP.isEmpty()) { if (staticIP.isEmpty()) {
serverCore.useStaticIP = false; serverCore.useStaticIP = false;
} else { } else {

@ -638,7 +638,7 @@ public class Domains {
host = host.toLowerCase().trim(); host = host.toLowerCase().trim();
// try to simply parse the address // try to simply parse the address
InetAddress ip = parseInetAddress(host); InetAddress ip = InetAddress.getByName(host);
if (ip != null) return ip; if (ip != null) return ip;
// trying to resolve host by doing a name cache lookup // trying to resolve host by doing a name cache lookup
@ -716,8 +716,14 @@ public class Domains {
if (host0 == null || host0.isEmpty()) return null; if (host0 == null || host0.isEmpty()) return null;
final String host = host0.toLowerCase().trim(); final String host = host0.toLowerCase().trim();
// try to simply parse the address // try to simply parse the address
InetAddress ip = parseInetAddress(host); InetAddress ip;
if (ip != null) return ip; try {
ip = InetAddress.getByName(host);
return ip;
} catch (UnknownHostException e1) {
// we expected that InetAddress.getByName may fail if this is not a raw address.
// We silently ignore this and go on.
}
/* /*
if (MemoryControl.shortStatus()) { if (MemoryControl.shortStatus()) {
@ -835,30 +841,6 @@ public class Domains {
} catch (final IOException e) {} } catch (final IOException e) {}
} }
public static final InetAddress parseInetAddress(String ip) {
if (ip == null || ip.length() < 8) return null;
ip = ip.trim();
if (ip.charAt(0) == '[' && ip.charAt(ip.length() - 1) == ']') ip = ip.substring(1, ip.length() - 1);
if ("localhost".equals(ip)) ip = "127.0.0.1"; // normalize to IPv4 here since that is the way to calculate the InetAddress
final String[] ips = CommonPattern.DOT.split(ip);
if (ips.length != 4) return null; // TODO: parse IPv6 addresses
final byte[] ipb = new byte[4];
try {
ipb[0] = (byte) Integer.parseInt(ips[0]);
ipb[1] = (byte) Integer.parseInt(ips[1]);
ipb[2] = (byte) Integer.parseInt(ips[2]);
ipb[3] = (byte) Integer.parseInt(ips[3]);
} catch (final NumberFormatException e) {
return null;
}
try {
return InetAddress.getByAddress(ipb);
} catch (final UnknownHostException e) {
return null;
}
}
/** /**
* Returns the number of entries in the nameCacheHit map * Returns the number of entries in the nameCacheHit map
* *

@ -303,12 +303,17 @@ public class Seed implements Cloneable, Comparable<Seed>, Comparator<Seed>
if ( ipport == null ) { if ( ipport == null ) {
return; return;
} }
final int p = ipport.indexOf(':'); final int p = ipport.lastIndexOf(':');
if ( p < 0 ) { if ( p < 0 ) {
this.alternativeIP = ipport; this.alternativeIP = ipport;
} else { } else {
this.alternativeIP = ipport.substring(0, p); this.alternativeIP = ipport.substring(0, p);
} }
if (this.alternativeIP.charAt(0) == '[' && this.alternativeIP.charAt(this.alternativeIP.length() - 1) == ']') {
// IPv6 patch
this.alternativeIP = this.alternativeIP.substring(1, this.alternativeIP.length() - 1);
}
} }
/** /**
@ -574,19 +579,26 @@ public class Seed implements Cloneable, Comparable<Seed>, Comparator<Seed>
*/ */
public final String getPublicAddress() { public final String getPublicAddress() {
String ip = getIP(); String ip = getIP();
if ( ip == null || ip.length() < 8 || ip.length() > 60 ) { if (ip == null) ip = Domains.LOCALHOST; // that should not happen
ip = Domains.LOCALHOST;
}
final String port = this.dna.get(Seed.PORT); final String port = this.dna.get(Seed.PORT);
if ( port == null || port.length() < 2 || port.length() > 5 ) { if ( port == null || port.length() < 2 || port.length() > 5 ) {
return null; return null;
} }
final StringBuilder sb = new StringBuilder(ip.length() + port.length() + 1); final StringBuilder sb = new StringBuilder(ip.length() + port.length() + 3);
sb.append(ip); if (ip.indexOf(':') >= 0) {
sb.append(':'); // IPv6 Address!, see: http://en.wikipedia.org/wiki/IPv6_address#Literal_IPv6_addresses_in_network_resource_identifiers
sb.append(port); sb.append('[');
sb.append(ip);
sb.append(']');
sb.append(':');
sb.append(port);
} else {
sb.append(ip);
sb.append(':');
sb.append(port);
}
return sb.toString(); return sb.toString();
} }
@ -604,11 +616,24 @@ public class Seed implements Cloneable, Comparable<Seed>, Comparator<Seed>
} }
final String port = this.dna.get(Seed.PORT); final String port = this.dna.get(Seed.PORT);
if ( (port == null) || (port.length() < 2) ) { if ( port == null || port.length() < 2 || port.length() > 5 ) {
return null; return null;
} }
return this.alternativeIP + ":" + port; final StringBuilder sb = new StringBuilder(this.alternativeIP.length() + port.length() + 3);
if (this.alternativeIP.indexOf(':') >= 0) {
// IPv6 Address!, see: http://en.wikipedia.org/wiki/IPv6_address#Literal_IPv6_addresses_in_network_resource_identifiers
sb.append('[');
sb.append(this.alternativeIP);
sb.append(']');
sb.append(':');
sb.append(port);
} else {
sb.append(this.alternativeIP);
sb.append(':');
sb.append(port);
}
return sb.toString();
} }
/** /**
@ -618,7 +643,7 @@ public class Seed implements Cloneable, Comparable<Seed>, Comparator<Seed>
return Domains.dnsResolve(getIP()); return Domains.dnsResolve(getIP());
} }
/** @return the portnumber of this seed or <code>-1</code> if not present */ /** @return the port number of this seed or <code>-1</code> if not present */
public final int getPort() { public final int getPort() {
final String port = this.dna.get(Seed.PORT); final String port = this.dna.get(Seed.PORT);
if ( port == null ) { if ( port == null ) {

@ -717,7 +717,7 @@ public final class SeedDB implements AlternativeDomainNames {
try { try {
pw = new PrintWriter(new BufferedWriter(new FileWriter(seedFile))); pw = new PrintWriter(new BufferedWriter(new FileWriter(seedFile)));
List<Seed> seedlist = getSeedlist(Integer.MAX_VALUE, addMySeed); List<Seed> seedlist = getSeedlist(Integer.MAX_VALUE, addMySeed, false);
String line; String line;
for (Seed seed: seedlist) { for (Seed seed: seedlist) {
line = seed.genSeedStr(null); line = seed.genSeedStr(null);
@ -731,7 +731,7 @@ public final class SeedDB implements AlternativeDomainNames {
return v; return v;
} }
public ArrayList<Seed> getSeedlist(int maxcount, boolean addMySeed) { public ArrayList<Seed> getSeedlist(int maxcount, boolean addMySeed, boolean nodeonly) {
final ArrayList<Seed> v = new ArrayList<Seed>(this.seedActiveDB.size() + 1000); final ArrayList<Seed> v = new ArrayList<Seed>(this.seedActiveDB.size() + 1000);
// store own peer seed // store own peer seed
@ -742,7 +742,7 @@ public final class SeedDB implements AlternativeDomainNames {
Iterator<Seed> se = this.seedsConnected(true, false, null, (float) 0.0); Iterator<Seed> se = this.seedsConnected(true, false, null, (float) 0.0);
while (se.hasNext() && v.size() < maxcount) { while (se.hasNext() && v.size() < maxcount) {
ys = se.next(); ys = se.next();
if (ys != null) v.add(ys); if (ys != null && (!nodeonly || ys.getFlagRootNode())) v.add(ys);
} }
// store some of the not-so-old passive peer seeds (limit: 1 day) // store some of the not-so-old passive peer seeds (limit: 1 day)
@ -750,7 +750,7 @@ public final class SeedDB implements AlternativeDomainNames {
final long timeout = System.currentTimeMillis() - (1000L * 60L * 60L * 24L); final long timeout = System.currentTimeMillis() - (1000L * 60L * 60L * 24L);
while (se.hasNext() && v.size() < maxcount) { while (se.hasNext() && v.size() < maxcount) {
ys = se.next(); ys = se.next();
if (ys != null && ys.getLastSeenUTC() >= timeout) v.add(ys); if (ys != null && ys.getLastSeenUTC() >= timeout && (!nodeonly || ys.getFlagRootNode())) v.add(ys);
} }
final StringBuilder encoded = new StringBuilder(1024); final StringBuilder encoded = new StringBuilder(1024);

Loading…
Cancel
Save