diff --git a/htroot/Network.html b/htroot/Network.html index 260b782e8..03452deea 100644 --- a/htroot/Network.html +++ b/htroot/Network.html @@ -31,10 +31,12 @@ ::

Showing #[num]# entries from a total of #[total]# peers.

-
- Search for a peername (RegExp allowed): - -
+
+ : + + + +
diff --git a/source/de/anomic/yacy/yacySeed.java b/source/de/anomic/yacy/yacySeed.java index 430868466..7a087ca95 100644 --- a/source/de/anomic/yacy/yacySeed.java +++ b/source/de/anomic/yacy/yacySeed.java @@ -72,6 +72,8 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import com.sun.org.apache.bcel.internal.generic.LLOAD; + import de.anomic.kelondro.kelondroBase64Order; import de.anomic.net.natLib; import de.anomic.plasma.plasmaCondenser; @@ -235,16 +237,37 @@ public class yacySeed { this.available = 0; } - /** generate a default peer name */ + /** + * Generate a default peer name assembled of the following fragments in order: + * + * @return a default peer name following the above pattern whereas dots, underscores and colons are replaced by minus signs + */ public static String makeDefaultPeerName() { String name = serverCore.publicIP() + "-" + yacyCore.speedKey + "dpn" + serverSystem.infoKey() + (System.currentTimeMillis() & 99); name = name.replace('.', '-'); name = name.replace('_', '-'); + name = name.replace(':', '-'); return name; } - + + /** + * Checks for the static fragments of a generated default peer name, such as the string 'dpn' + * @see #makeDefaultPeerName() + * @param name the peer name to check for default peer name compliance + * @return whether the given peer name may be a default generated peer name + */ public static boolean isDefaultPeerName(String name) { - return name != null && name.length() > 10 && name.charAt(0) <= '9' && name.charAt(name.length() - 1) <= '9' && name.indexOf("dpn") > 0; + return (name != null && + name.length() > 10 && + name.charAt(0) <= '9' && + name.charAt(name.length() - 1) <= '9' && + name.indexOf("dpn") > 0); } /** @@ -313,7 +336,7 @@ public class yacySeed { } } - /** return the DNA-map of this peer */ + /** @return the DNA-map of this peer */ public final Map getMap() { return this.dna; } @@ -350,35 +373,62 @@ public class yacySeed { dna.put(yacySeed.URL_IN, Integer.toString(Integer.parseInt(v) + count)); } - // 12 * 6 bit = 72 bit = 24 characters octal-hash - // octal hashes are used for cache-dumps that are DHT-ready - // cause: the natural order of octal hashes are the same as the b64-order of b64Hashes - // a hexhash cannot be used in such cases, and b64Hashes are not appropriate for file names + /** + * 12 * 6 bit = 72 bit = 24 characters octal-hash + *

Octal hashes are used for cache-dumps that are DHT-ready

+ *

+ * Cause: the natural order of octal hashes are the same as the b64-order of b64Hashes. + * a hexhash cannot be used in such cases, and b64Hashes are not appropriate for file names + *

+ * @param b64Hash a base64 hash + * @return the octal representation of the given base64 hash + */ public static String b64Hash2octalHash(String b64Hash) { return serverCodings.encodeOctal(kelondroBase64Order.enhancedCoder.decode(b64Hash)); } - // 12 * 6 bit = 72 bit = 18 characters hex-hash + /** + * 12 * 6 bit = 72 bit = 18 characters hex-hash + * @param b64Hash a base64 hash + * @return the hexadecimal representation of the given base64 hash + */ public static String b64Hash2hexHash(String b64Hash) { // the hash string represents 12 * 6 bit = 72 bits. This is too much for a long integer. return serverCodings.encodeHex(kelondroBase64Order.enhancedCoder.decode(b64Hash)); } - + + /** + * @param hexHash a hexadecimal hash + * @return the base64 representation of the given hex hash + */ public static String hexHash2b64Hash(String hexHash) { return kelondroBase64Order.enhancedCoder.encode(serverCodings.decodeHex(hexHash)); } - // 12 * 6 bit = 72 bit = 9 byte + /** + * 12 * 6 bit = 72 bit = 9 byte + * @param b64Hash a base64 hash + * @return returns a base256 - a byte - representation of the given base64 hash + */ public static byte[] b64Hash2b256Hash(String b64Hash) { assert b64Hash.length() == 12; return kelondroBase64Order.enhancedCoder.decode(b64Hash); } - + + /** + * @param b256Hash a base256 hash - normal byte number system + * @return the base64 representation of the given base256 hash + */ public static String b256Hash2b64Hash(byte[] b256Hash) { assert b256Hash.length == 9; return kelondroBase64Order.enhancedCoder.encode(b256Hash); } - + + /** + * The returned version follows this pattern: MAJORVERSION . MINORVERSION 0 SVN REVISION + * @return the YaCy version of this peer as a float or 0 if no valid value could be retrieved + * from this yacySeed object + */ public final float getVersion() { try { return Float.parseFloat(get(yacySeed.VERSION, yacySeed.ZERO)); @@ -386,9 +436,12 @@ public class yacySeed { return 0; } } - + + /** + * @return the public address of the peer as IP:port string or null if no valid values for + * either the IP or the port could be retrieved from this yacySeed object + */ public final String getPublicAddress() { - // returns an ip:port string String ip = (String) this.dna.get(yacySeed.IP); if (ip == null) { return null; } if (ip.length() < 8) { return null; } // 10.0.0.0 @@ -401,11 +454,14 @@ public class yacySeed { return ip + ":" + port; } + /** + * If this seed is part of a cluster, the peer has probably the {@linkplain #alternativeIP} object set to + * a local IP. If this is present and the public IP of this peer is identical to the public IP of the own seed, + * construct an address using this IP; otherwise return the public address + * @see #getPublicAddress() + * @return the alternative IP:port if present, else the public address + */ public final String getClusterAddress() { - // if this seed is part of a cluster, the peer has probably the - // alternativeIP object set to a local ip - // if this is present and the public ip of this peer is identical to the public ip of the own seed, - // construct an address using this ip; othervise return the public address if (this.alternativeIP == null) return getPublicAddress(); final String port = (String) this.dna.get(yacySeed.PORT); @@ -413,13 +469,15 @@ public class yacySeed { return this.alternativeIP + ":" + port; } - + + /** + * @return the IP address of the peer represented by this yacySeed object as {@link InetAddress} + */ public final InetAddress getInetAddress() { - // returns the ip address return natLib.getInetAddress((String) this.dna.get(yacySeed.IP)); } - /** Get the portnumber of this seed */ + /** @return the portnumber of this seed or -1 if not present */ public final int getPort() { final String port = (String) this.dna.get(yacySeed.PORT); if (port == null) return -1; @@ -427,24 +485,32 @@ public class yacySeed { return Integer.parseInt(port); } + /** + * To synchronize peer pings the local time differential must be included in calculations. + * @return the difference to UTC (universal time coordinated) in milliseconds of this yacySeed, + * the difference to +0130 if not present or 0 if an error occured during conversion + */ public final long getUTCDiff() { String utc = (String) this.dna.get(yacySeed.UTC); if (utc == null) { utc = "+0130"; } try { return serverDate.UTCDiff(utc); - } catch (RuntimeException e) { + } catch (IllegalArgumentException e) { return 0; } } + /** puts the current time into the lastseen field and cares about the time differential to UTC */ public final void setLastSeenUTC() { - // we put the current time into the lastseen field // because java thinks it must apply the UTC offset to the current time, // to create a string that looks like our current time, it adds the local UTC offset to the // time. To create a corrected UTC Date string, we first subtract the local UTC offset. dna.put(yacySeed.LASTSEEN, yacyCore.universalDateShortString(new Date(System.currentTimeMillis() - serverDate.UTCDiff())) ); } + /** + * @return the last seen time converted to UTC in milliseconds + */ public final long getLastSeenUTC() { try { final long t = yacyCore.parseUniversalDate(get(yacySeed.LASTSEEN, "20040101000000")).getTime(); @@ -462,11 +528,16 @@ public class yacySeed { } } + /** + * @see #getLastSeenUTC() + * @return the last seen value as string representation in the following format: YearMonthDayHoursMinutesSeconds + * or 20040101000000 if not present + */ public final String getLastSeenString() { return get(yacySeed.LASTSEEN, "20040101000000"); } - /** returns the age of the seed in number of days */ + /** @return the age of the seed in number of days */ public final int getAge() { try { final long t = yacyCore.parseUniversalDate(get(yacySeed.BDATE, "20040101000000")).getTime();