Changeset 011a32f


Ignore:
Timestamp:
Oct 17, 2009 11:16:53 PM (11 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
10b8441
Parents:
2190954
Message:

move NetDb? renderStatusHTML() to routerconsole

Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java

    r2190954 r011a32f  
    1818   
    1919    public String getNetDbSummary() {
     20        NetDbRenderer renderer = new NetDbRenderer(_context);
    2021        try {
    2122            if (_out != null) {
    2223                if (_routerPrefix != null)
    23                     _context.netDb().renderRouterInfoHTML(_out, _routerPrefix);
     24                    renderer.renderRouterInfoHTML(_out, _routerPrefix);
    2425                else if (_lease)
    25                     _context.netDb().renderLeaseSetHTML(_out);
     26                    renderer.renderLeaseSetHTML(_out);
    2627                else
    27                     _context.netDb().renderStatusHTML(_out, _full);
     28                    renderer.renderStatusHTML(_out, _full);
    2829                return "";
    2930            } else {
    3031                ByteArrayOutputStream baos = new ByteArrayOutputStream(32*1024);
    3132                if (_routerPrefix != null)
    32                     _context.netDb().renderRouterInfoHTML(new OutputStreamWriter(baos), _routerPrefix);
     33                    renderer.renderRouterInfoHTML(new OutputStreamWriter(baos), _routerPrefix);
    3334                else if (_lease)
    34                     _context.netDb().renderLeaseSetHTML(new OutputStreamWriter(baos));
     35                    renderer.renderLeaseSetHTML(new OutputStreamWriter(baos));
    3536                else
    36                     _context.netDb().renderStatusHTML(new OutputStreamWriter(baos), _full);
     37                    renderer.renderStatusHTML(new OutputStreamWriter(baos), _full);
    3738                return new String(baos.toByteArray());
    3839            }
  • router/java/src/net/i2p/router/DummyNetworkDatabaseFacade.java

    r2190954 r011a32f  
    6161    public Set<Hash> getAllRouters() { return new HashSet(_routers.keySet()); }
    6262    public Set findNearestRouters(Hash key, int maxNumRouters, Set peersToIgnore) { return new HashSet(_routers.values()); }
    63 
    64     public void renderStatusHTML(Writer out) throws IOException {}
    6563}
  • router/java/src/net/i2p/router/NetworkDatabaseFacade.java

    r2190954 r011a32f  
    1111import java.io.IOException;
    1212import java.io.Writer;
     13import java.util.Collections;
    1314import java.util.Set;
    1415
     
    6162    public boolean isInitialized() { return true; }
    6263    public void rescan() {}
    63     public void renderRouterInfoHTML(Writer out, String s) throws IOException {}
    64     public void renderLeaseSetHTML(Writer out) throws IOException {}
    65     public void renderStatusHTML(Writer out, boolean b) throws IOException {}
     64    /** @deprecated moved to router console */
     65    public void renderStatusHTML(Writer out) throws IOException {}
     66    /** public for NetDbRenderer in routerconsole */
     67    public Set<LeaseSet> getLeases() { return Collections.EMPTY_SET; }
     68    /** public for NetDbRenderer in routerconsole */
     69    public Set<RouterInfo> getRouters() { return Collections.EMPTY_SET; }
    6670}
  • router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java

    r2190954 r011a32f  
    849849    }
    850850   
    851     private Set getLeases() {
     851    /** public for NetDbRenderer in routerconsole */
     852    @Override
     853    public Set<LeaseSet> getLeases() {
    852854        if (!_initialized) return null;
    853855        Set leases = new HashSet();
     
    861863        return leases;
    862864    }
    863     private Set<RouterInfo> getRouters() {
     865    /** public for NetDbRenderer in routerconsole */
     866    @Override
     867    public Set<RouterInfo> getRouters() {
    864868        if (!_initialized) return null;
    865869        Set routers = new HashSet();
     
    898902        _context.jobQueue().addJob(new StoreJob(_context, this, key, ds, onSuccess, onFailure, sendTimeout, toIgnore));
    899903    }
    900    
    901     class LeaseSetComparator implements Comparator {
    902          public int compare(Object l, Object r) {
    903              Destination dl = ((LeaseSet)l).getDestination();
    904              Destination dr = ((LeaseSet)r).getDestination();
    905              boolean locall = _context.clientManager().isLocal(dl);
    906              boolean localr = _context.clientManager().isLocal(dr);
    907              if (locall && !localr) return -1;
    908              if (localr && !locall) return 1;
    909              return dl.calculateHash().toBase64().compareTo(dr.calculateHash().toBase64());
    910         }
    911     }
    912 
    913     class RouterInfoComparator implements Comparator {
    914          public int compare(Object l, Object r) {
    915              return ((RouterInfo)l).getIdentity().getHash().toBase64().compareTo(((RouterInfo)r).getIdentity().getHash().toBase64());
    916         }
    917     }
    918 
    919     @Override
    920     public void renderRouterInfoHTML(Writer out, String routerPrefix) throws IOException {
    921         StringBuilder buf = new StringBuilder(4*1024);
    922         buf.append("<h2>Network Database RouterInfo Lookup</h2>\n");
    923         if (".".equals(routerPrefix)) {
    924             renderRouterInfo(buf, _context.router().getRouterInfo(), true, true);
    925         } else {
    926             boolean notFound = true;
    927             Set routers = getRouters();
    928             for (Iterator iter = routers.iterator(); iter.hasNext(); ) {
    929                 RouterInfo ri = (RouterInfo)iter.next();
    930                 Hash key = ri.getIdentity().getHash();
    931                 if (key.toBase64().startsWith(routerPrefix)) {
    932                     renderRouterInfo(buf, ri, false, true);
    933                     notFound = false;
    934                 }
    935             }
    936             if (notFound)
    937                 buf.append("Router ").append(routerPrefix).append(" not found in network database");
    938         }
    939         out.write(buf.toString());
    940         out.flush();
    941     }
    942 
    943     public void renderStatusHTML(Writer out) throws IOException {
    944         renderStatusHTML(out, true);
    945     }
    946 
    947     @Override
    948     public void renderLeaseSetHTML(Writer out) throws IOException {
    949         StringBuilder buf = new StringBuilder(4*1024);
    950         buf.append("<h2>Network Database Contents</h2>\n");
    951         buf.append("<a href=\"netdb.jsp\">View RouterInfo</a>");
    952         buf.append("<h3>LeaseSets</h3>\n");
    953         Set leases = new TreeSet(new LeaseSetComparator());
    954         leases.addAll(getLeases());
    955         long now = _context.clock().now();
    956         for (Iterator iter = leases.iterator(); iter.hasNext(); ) {
    957             LeaseSet ls = (LeaseSet)iter.next();
    958             Destination dest = ls.getDestination();
    959             Hash key = dest.calculateHash();
    960             buf.append("<b>LeaseSet: ").append(key.toBase64());
    961             if (_context.clientManager().isLocal(dest)) {
    962                 buf.append(" (<a href=\"tunnels.jsp#" + key.toBase64().substring(0,4) + "\">Local</a> ");
    963                 if (! _context.clientManager().shouldPublishLeaseSet(key))
    964                     buf.append("Unpublished ");
    965                 buf.append("Destination ");
    966                 TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key);
    967                 if (in != null && in.getDestinationNickname() != null)
    968                     buf.append(in.getDestinationNickname());
    969                 else
    970                     buf.append(dest.toBase64().substring(0, 6));
    971             } else {
    972                 buf.append(" (Destination ");
    973                 String host = _context.namingService().reverseLookup(dest);
    974                 if (host != null)
    975                     buf.append(host);
    976                 else
    977                     buf.append(dest.toBase64().substring(0, 6));
    978             }
    979             buf.append(")</b><br>\n");
    980             long exp = ls.getEarliestLeaseDate()-now;
    981             if (exp > 0)
    982                 buf.append("Expires in ").append(DataHelper.formatDuration(exp)).append("<br>\n");
    983             else
    984                 buf.append("Expired ").append(DataHelper.formatDuration(0-exp)).append(" ago<br>\n");
    985             for (int i = 0; i < ls.getLeaseCount(); i++) {
    986                 buf.append("Lease ").append(i + 1).append(": Gateway ");
    987                 buf.append(_context.commSystem().renderPeerHTML(ls.getLease(i).getGateway()));
    988                 buf.append(" Tunnel ").append(ls.getLease(i).getTunnelId().getTunnelId()).append("<br>\n");
    989             }
    990             buf.append("<hr>\n");
    991             out.write(buf.toString());
    992             buf.setLength(0);
    993         }
    994         out.write(buf.toString());
    995         out.flush();
    996     }
    997 
    998     @Override
    999     public void renderStatusHTML(Writer out, boolean full) throws IOException {
    1000         int size = getKnownRouters() * 512;
    1001         if (full)
    1002             size *= 4;
    1003         StringBuilder buf = new StringBuilder(size);
    1004         out.write("<h2>Network Database Contents (<a href=\"netdb.jsp?l=1\">View LeaseSets</a>)</h2>\n");
    1005         if (!_initialized) {
    1006             buf.append("Not initialized\n");
    1007             out.write(buf.toString());
    1008             out.flush();
    1009             return;
    1010         }
    1011        
    1012         Hash us = _context.routerHash();
    1013         out.write("<a name=\"routers\" ></a><h3>Routers (<a href=\"netdb.jsp");
    1014         if (full)
    1015             out.write("#routers\" >view without");
    1016         else
    1017             out.write("?f=1#routers\" >view with");
    1018         out.write(" stats</a>)</h3>\n");
    1019        
    1020         RouterInfo ourInfo = _context.router().getRouterInfo();
    1021         renderRouterInfo(buf, ourInfo, true, true);
    1022         out.write(buf.toString());
    1023         buf.setLength(0);
    1024        
    1025         ObjectCounter<String> versions = new ObjectCounter();
    1026         ObjectCounter<String> countries = new ObjectCounter();
    1027        
    1028         Set routers = new TreeSet(new RouterInfoComparator());
    1029         routers.addAll(getRouters());
    1030         for (Iterator iter = routers.iterator(); iter.hasNext(); ) {
    1031             RouterInfo ri = (RouterInfo)iter.next();
    1032             Hash key = ri.getIdentity().getHash();
    1033             boolean isUs = key.equals(us);
    1034             if (!isUs) {
    1035                 renderRouterInfo(buf, ri, false, full);
    1036                 out.write(buf.toString());
    1037                 buf.setLength(0);
    1038                 String routerVersion = ri.getOption("router.version");
    1039                 if (routerVersion != null)
    1040                     versions.increment(routerVersion);
    1041                 String country = _context.commSystem().getCountry(key);
    1042                 if(country != null)
    1043                     countries.increment(country);
    1044             }
    1045         }
    1046            
    1047         buf.append("<table border=\"0\" cellspacing=\"30\"><tr><td>");
    1048         List<String> versionList = new ArrayList(versions.objects());
    1049         if (versionList.size() > 0) {
    1050             Collections.sort(versionList, Collections.reverseOrder());
    1051             buf.append("<table>\n");
    1052             buf.append("<tr><th>Version</th><th>Count</th></tr>\n");
    1053             for (String routerVersion : versionList) {
    1054                 int num = versions.count(routerVersion);
    1055                 buf.append("<tr><td align=\"center\">").append(DataHelper.stripHTML(routerVersion));
    1056                 buf.append("</td><td align=\"center\">").append(num).append("</td></tr>\n");
    1057             }
    1058             buf.append("</table>\n");
    1059         }
    1060         buf.append("</td><td>");
    1061         out.write(buf.toString());
    1062         buf.setLength(0);
    1063            
    1064         List<String> countryList = new ArrayList(countries.objects());
    1065         if (countryList.size() > 0) {
    1066             Collections.sort(countryList);
    1067             buf.append("<table>\n");
    1068             buf.append("<tr><th align=\"left\">Country</th><th>Count</th></tr>\n");
    1069             for (String country : countryList) {
    1070                 int num = countries.count(country);
    1071                 buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\"");
    1072                 buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> ");
    1073                 buf.append(_context.commSystem().getCountryName(country));
    1074                 buf.append("</td><td align=\"center\">").append(num).append("</td></tr>\n");
    1075             }
    1076             buf.append("</table>\n");
    1077         }
    1078         buf.append("</td></tr></table>");
    1079         out.write(buf.toString());
    1080         out.flush();
    1081     }
    1082    
    1083     /**
    1084      *  Be careful to use stripHTML for any displayed routerInfo data
    1085      *  to prevent vulnerabilities
    1086      */
    1087     private void renderRouterInfo(StringBuilder buf, RouterInfo info, boolean isUs, boolean full) {
    1088         String hash = info.getIdentity().getHash().toBase64();
    1089         buf.append("<table><tr><th><a name=\"").append(hash.substring(0, 6)).append("\" ></a>");
    1090         if (isUs) {
    1091             buf.append("<a name=\"our-info\" ></a><b>Our info: ").append(hash).append("</b></th></tr><tr><td>\n");
    1092         } else {
    1093             buf.append("<b>Peer info for:</b> ").append(hash).append("\n");
    1094             if (full) {
    1095                 buf.append("[<a href=\"netdb.jsp\" >Back</a>]</th></tr><td>\n");
    1096             } else {
    1097                 buf.append("[<a href=\"netdb.jsp?r=").append(hash.substring(0, 6)).append("\" >Full entry</a>]</th></tr><td>\n");
    1098             }
    1099         }
    1100        
    1101         long age = _context.clock().now() - info.getPublished();
    1102         if (isUs && _context.router().isHidden())
    1103             buf.append("<b>Hidden, Updated:</b> ").append(DataHelper.formatDuration(age)).append(" ago<br>\n");
    1104         else if (age > 0)
    1105             buf.append("<b>Published:</b> ").append(DataHelper.formatDuration(age)).append(" ago<br>\n");
    1106         else
    1107             buf.append("<b>Published:</b> in ").append(DataHelper.formatDuration(0-age)).append("???<br>\n");
    1108         buf.append("<b>Address(es):</b> ");
    1109         String country = _context.commSystem().getCountry(info.getIdentity().getHash());
    1110         if(country != null) {
    1111             buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\"");
    1112             buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> ");
    1113         }
    1114         for (Iterator iter = info.getAddresses().iterator(); iter.hasNext(); ) {
    1115             RouterAddress addr = (RouterAddress)iter.next();
    1116             buf.append(DataHelper.stripHTML(addr.getTransportStyle())).append(": ");
    1117             for (Iterator optIter = addr.getOptions().keySet().iterator(); optIter.hasNext(); ) {
    1118                 String name = (String)optIter.next();
    1119                 String val = addr.getOptions().getProperty(name);
    1120                 buf.append('[').append(DataHelper.stripHTML(name)).append('=').append(DataHelper.stripHTML(val)).append("] ");
    1121             }
    1122         }
    1123         buf.append("</td></tr>\n");
    1124         if (full) {
    1125             buf.append("<tr><td>Stats: <br><code>\n");
    1126             for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
    1127                 String key = (String)iter.next();
    1128                 String val = info.getOption(key);
    1129                 buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("<br>\n");
    1130             }
    1131             buf.append("</code></td></tr>\n");
    1132         } else {
    1133         }
    1134         buf.append("</td></tr>\n");
    1135     }
    1136 
    1137904}
Note: See TracChangeset for help on using the changeset viewer.