From ec0c912c6f74d617a56d43e281d077169a906ad6 Mon Sep 17 00:00:00 2001
From: jrandom <jrandom>
Date: Tue, 10 Aug 2004 01:07:33 +0000
Subject: [PATCH] oOo's updates: * properly describe expired leaseSets (e.g.
 "30s ago" instead of "in -30s") * add a little table at the end of the netDb
 HTML summarizing the versions people claim to be running

---
 .../KademliaNetworkDatabaseFacade.java        | 48 ++++++++++++++++++-
 1 file changed, 46 insertions(+), 2 deletions(-)

diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
index a7ff6b73fa..7ffb4f3959 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java
@@ -19,6 +19,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 
 import net.i2p.data.DataFormatException;
 import net.i2p.data.DataHelper;
@@ -648,7 +649,10 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
             Hash key = ls.getDestination().calculateHash();
             buf.append("<b>LeaseSet: ").append(key.toBase64()).append("</b><br />\n");
             long exp = ls.getEarliestLeaseDate()-now;
-            buf.append("Earliest expiration date in: <i>").append(DataHelper.formatDuration(exp)).append("</i><br />\n");
+            if (exp > 0)
+                buf.append("Earliest expiration date in: <i>").append(DataHelper.formatDuration(exp)).append("</i><br />\n");
+            else
+                buf.append("Earliest expiration date was: <i>").append(DataHelper.formatDuration(0-exp)).append(" ago</i><br />\n");
             for (int i = 0; i < ls.getLeaseCount(); i++) {
                 buf.append("Lease ").append(i).append(": gateway <i>");
                 buf.append(ls.getLease(i).getRouterIdentity().getHash().toBase64().substring(0,6));
@@ -667,6 +671,10 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
         renderRouterInfo(buf, ourInfo, true);
         out.write(buf.toString().getBytes());
         buf.setLength(0);
+        
+        /* coreVersion to Map of routerVersion to Integer */
+        Map versions = new TreeMap();
+        
         for (Iterator iter = routers.iterator(); iter.hasNext(); ) {
             RouterInfo ri = (RouterInfo)iter.next();
             Hash key = ri.getIdentity().getHash();
@@ -675,9 +683,42 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
                 renderRouterInfo(buf, ri, false);
                 out.write(buf.toString().getBytes());
                 buf.setLength(0);
+                String coreVersion = ri.getOptions().getProperty("coreVersion");
+                String routerVersion = ri.getOptions().getProperty("router.version");
+                if ( (coreVersion != null) && (routerVersion != null) ) {
+                    Map routerVersions = (Map)versions.get(coreVersion);
+                    if (routerVersions == null) {
+                        routerVersions = new TreeMap();
+                        versions.put(coreVersion, routerVersions);
+                    }
+                    Integer val = (Integer)routerVersions.get(routerVersion);
+                    if (val == null)
+                        routerVersions.put(routerVersion, new Integer(1));
+                    else
+                        routerVersions.put(routerVersion, new Integer(val.intValue() + 1));
+                }
+            }
+        }
+            
+        if (versions.size() > 0) {
+            buf.append("<table border=\"1\">\n");
+            buf.append("<tr><td><b>Core version</b></td><td><b>Router version</b></td><td><b>Number</b></td></tr>\n");
+            for (Iterator iter = versions.keySet().iterator(); iter.hasNext(); ) {
+                String coreVersion = (String)iter.next();
+                Map routerVersions = (Map)versions.get(coreVersion);
+                for (Iterator routerIter = routerVersions.keySet().iterator(); routerIter.hasNext(); ) {
+                    String routerVersion = (String)routerIter.next();
+                    Integer num = (Integer)routerVersions.get(routerVersion);
+                    buf.append("<tr><td>").append(coreVersion);
+                    buf.append("</td><td>").append(routerVersion);
+                    buf.append("</td><td>").append(num.intValue()).append("</td></tr>\n");
+                }
             }
+            buf.append("</table>\n");
         }
+        out.write(buf.toString().getBytes());
     }
+    
     private void renderRouterInfo(StringBuffer buf, RouterInfo info, boolean isUs) {
         if (isUs) {
             buf.append("<b>Our info: </b><br />\n");
@@ -688,7 +729,10 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade {
         }
         
         long age = _context.clock().now() - info.getPublished();
-        buf.append("Published: <i>").append(DataHelper.formatDuration(age)).append(" ago</i><br />\n");
+        if (age > 0)
+            buf.append("Published: <i>").append(DataHelper.formatDuration(age)).append(" ago</i><br />\n");
+        else
+            buf.append("Published: <i>in ").append(DataHelper.formatDuration(age)).append("???</i><br />\n");
         buf.append("Address(es): <i>");
         for (Iterator iter = info.getAddresses().iterator(); iter.hasNext(); ) {
             RouterAddress addr = (RouterAddress)iter.next();
-- 
GitLab