Changeset 7035db2


Ignore:
Timestamp:
Feb 27, 2018 1:05:03 PM (3 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
f869b8a
Parents:
27042f9
Message:

UPnP: Improve diagnostics
try PPP 2nd
other cleanups

File:
1 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/transport/UPnP.java

    r27042f9 r7035db2  
    199199                boolean isIGD = ROUTER_DEVICE.equals(dev.getDeviceType()) && dev.isRootDevice();
    200200                name += isIGD ? " IGD" : (" " + dev.getDeviceType());
     201                String ip = getIP(dev);
     202                if (ip != null)
     203                        name += ' ' + ip;
    201204                synchronized (lock) {
    202205                        if(isDisabled) {
     
    290293                                                continue;
    291294                                       
    292                                         _service = current2.getService(WAN_PPP_CONNECTION);
     295                                        _service = current2.getService(WAN_IP_CONNECTION);
    293296                                        if(_service == null) {
    294297                                                if (_log.shouldLog(Log.INFO))
    295                                                         _log.info(_router.getFriendlyName()+ " doesn't seems to be using PPP; we won't be able to extract bandwidth-related informations out of it.");
    296                                                 _service = current2.getService(WAN_IP_CONNECTION);
     298                                                        _log.info(_router.getFriendlyName()+ " does not support WAN_IP_CONNECTION");
     299                                                _service = current2.getService(WAN_PPP_CONNECTION);
    297300                                                if(_service == null)
    298                                                         _log.error(_router.getFriendlyName()+ " doesn't export WAN_IP_CONNECTION either: we won't be able to use it!");
     301                                                        _log.error(_router.getFriendlyName()+ " doesn't export WAN_PPP_CONNECTION either; we won't be able to use it!");
    299302                                        }
    300303                                       
     
    563566                }
    564567        }
    565        
     568
     569        /**
     570         *  @since 0.9.34
     571         */
     572        private String toLong(String action, String arg, Service serv) {
     573                String rv = toString(action, arg, serv);
     574                if (rv != null && rv.length() > 0) {
     575                        try {
     576                                long l = Long.parseLong(rv);
     577                                rv = DataHelper.formatSize2Decimal(l);
     578                        } catch (NumberFormatException nfe) {}
     579                }
     580                return rv;
     581        }
     582
     583        /**
     584         *  @since 0.9.34
     585         */
     586        private String toTime(String action, String arg, Service serv) {
     587                String rv = toString(action, arg, serv);
     588                if (rv != null && rv.length() > 0) {
     589                        try {
     590                                long l = Long.parseLong(rv);
     591                                rv = DataHelper.formatDuration2(l * 1000);
     592                        } catch (NumberFormatException nfe) {}
     593                }
     594                return rv;
     595        }
     596
    566597        // TODO: extend it! RTFM
    567598        private void listSubServices(Device dev, StringBuilder sb) {
     
    576607                        // NOTE: Group all toString() of common actions together
    577608                        // to avoid excess fetches, since toString() caches.
    578                         if("urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1".equals(serv.getServiceType())){
     609                        String type = serv.getServiceType();
     610                        if("urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1".equals(type)){
    579611                                sb.append(_t("WAN Common Interface Configuration"));
    580612                                sb.append("<ul><li>").append(_t("Status")).append(": ")
     
    583615                                  .append(toString("GetCommonLinkProperties", "NewWANAccessType", serv));
    584616                                sb.append("<li>").append(_t("Upstream")).append(": ")
    585                                   .append(toString("GetCommonLinkProperties", "NewLayer1UpstreamMaxBitRate", serv));
     617                                  .append(toLong("GetCommonLinkProperties", "NewLayer1UpstreamMaxBitRate", serv)).append("bps");
    586618                                sb.append("<li>").append(_t("Downstream")).append(": ")
    587                                   .append(toString("GetCommonLinkProperties", "NewLayer1DownstreamMaxBitRate", serv))
    588                                   .append("</li>");
    589                         }else if("urn:schemas-upnp-org:service:WANPPPConnection:1".equals(serv.getServiceType())){
     619                                  .append(toLong("GetCommonLinkProperties", "NewLayer1DownstreamMaxBitRate", serv)).append("bps");
     620                                if (_context.getBooleanProperty(PROP_ADVANCED)) {
     621                                        // don't bother translating
     622                                        sb.append("<li>").append("Sent: ")
     623                                          .append(toLong("GetTotalBytesSent", "NewTotalBytesSent", serv)).append('B');
     624                                        sb.append("<li>").append("Received: ")
     625                                          .append(toLong("GetTotalBytesReceived", "NewTotalBytesReceived", serv)).append('B');
     626                                        sb.append("<li>").append("Sent packets: ")
     627                                          .append(toLong("GetTotalPacketsSent", "NewTotalPacketsSent", serv));
     628                                        sb.append("<li>").append("Received packets: ")
     629                                          .append(toLong("GetTotalPacketsReceived", "NewTotalPacketsReceived", serv));
     630                                }
     631                        }else if(WAN_PPP_CONNECTION.equals(type)){
    590632                                sb.append(_t("WAN PPP Connection"));
    591633                                sb.append("<ul><li>").append(_t("Status")).append(": ")
    592634                                  .append(toString("GetStatusInfo", "NewConnectionStatus", serv));
    593                                 String up = toString("GetStatusInfo", "NewUptime", serv);
    594                                 if (up != null) {
    595                                         try {
    596                                                 long uptime = Long.parseLong(up);
    597                                                 uptime *= 1000;
    598                                                 sb.append("<li>").append(_t("Uptime")).append(": ")
    599                                                   .append(DataHelper.formatDuration2(uptime));
    600                                         } catch (NumberFormatException nfe) {}
    601                                 }
     635                                sb.append("<li>").append(_t("Uptime")).append(": ")
     636                                   .append(toTime("GetStatusInfo", "NewUptime", serv));
    602637                                sb.append("<li>").append(_t("Type")).append(": ")
    603638                                  .append(toString("GetConnectionTypeInfo", "NewConnectionType", serv));
    604639                                sb.append("<li>").append(_t("Upstream")).append(": ")
    605                                   .append(toString("GetLinkLayerMaxBitRates", "NewUpstreamMaxBitRate", serv));
     640                                  .append(toLong("GetLinkLayerMaxBitRates", "NewUpstreamMaxBitRate", serv)).append("bps");
    606641                                sb.append("<li>").append(_t("Downstream")).append(": ")
    607                                   .append(toString("GetLinkLayerMaxBitRates", "NewDownstreamMaxBitRate", serv) + "<br>");
     642                                  .append(toLong("GetLinkLayerMaxBitRates", "NewDownstreamMaxBitRate", serv)).append("bps");
    608643                                sb.append("<li>").append(_t("External IP")).append(": ")
    609                                   .append(toString("GetExternalIPAddress", "NewExternalIPAddress", serv))
    610                                   .append("</li>");
    611                         }else if("urn:schemas-upnp-org:service:Layer3Forwarding:1".equals(serv.getServiceType())){
     644                                  .append(toString("GetExternalIPAddress", "NewExternalIPAddress", serv));
     645                        }else if("urn:schemas-upnp-org:service:Layer3Forwarding:1".equals(type)){
    612646                                sb.append(_t("Layer 3 Forwarding"));
    613647                                sb.append("<ul><li>").append(_t("Default Connection Service")).append(": ")
    614                                   .append(toString("GetDefaultConnectionService", "NewDefaultConnectionService", serv))
    615                                   .append("</li>");
    616                         }else if(WAN_IP_CONNECTION.equals(serv.getServiceType())){
     648                                  .append(toString("GetDefaultConnectionService", "NewDefaultConnectionService", serv));
     649                        }else if(WAN_IP_CONNECTION.equals(type)){
    617650                                sb.append(_t("WAN IP Connection"));
    618651                                sb.append("<ul><li>").append(_t("Status")).append(": ")
    619652                                  .append(toString("GetStatusInfo", "NewConnectionStatus", serv));
    620                                 String up = toString("GetStatusInfo", "NewUptime", serv);
    621                                 if (up != null) {
    622                                         try {
    623                                                 long uptime = Long.parseLong(up);
    624                                                 uptime *= 1000;
    625                                                 sb.append("<li>").append(_t("Uptime")).append(": ")
    626                                                   .append(DataHelper.formatDuration2(uptime));
    627                                         } catch (NumberFormatException nfe) {}
    628                                 }
     653                                sb.append("<li>").append(_t("Uptime")).append(": ")
     654                                   .append(toTime("GetStatusInfo", "NewUptime", serv));
    629655                                sb.append("<li>").append(_t("Type")).append(": ")
    630656                                  .append(toString("GetConnectionTypeInfo", "NewConnectionType", serv));
    631657                                sb.append("<li>").append(_t("External IP")).append(": ")
    632                                   .append(toString("GetExternalIPAddress", "NewExternalIPAddress", serv))
    633                                   .append("</li>");
    634                         }else if("urn:schemas-upnp-org:service:WANEthernetLinkConfig:1".equals(serv.getServiceType())){
     658                                  .append(toString("GetExternalIPAddress", "NewExternalIPAddress", serv));
     659                        }else if("urn:schemas-upnp-org:service:WANEthernetLinkConfig:1".equals(type)){
    635660                                sb.append(_t("WAN Ethernet Link Configuration"));
    636661                                sb.append("<ul><li>").append(_t("Status")).append(": ")
    637                                   .append(toString("GetEthernetLinkStatus", "NewEthernetLinkStatus", serv))
    638                                   .append("</li>");
     662                                  .append(toString("GetEthernetLinkStatus", "NewEthernetLinkStatus", serv));
    639663                        } else {
    640                                 sb.append(DataHelper.escapeHTML(serv.getServiceType())).append("<ul>");
     664                                sb.append(DataHelper.escapeHTML(type)).append("<ul>");
    641665                        }
    642666                        if (_context.getBooleanProperty(PROP_ADVANCED)) {
     
    658682                        sb.append("<li>").append(_t("Subdevice")).append(": ");
    659683                sb.append(DataHelper.escapeHTML(dev.getFriendlyName()));
    660                 if (prefix == null)
    661                         sb.append("</p>");
     684                String ip = getIP(dev);
     685                if (ip != null)
     686                        sb.append(' ').append(ip);
     687                sb.append("</p>");
    662688                listSubServices(dev, sb);
    663689               
     
    714740                int upstreamMaxBitRate = getUpstreamMaxBitRate();
    715741                if(downstreamMaxBitRate > 0)
    716                         sb.append("<br>").append(_t("UPnP reports the maximum downstream bit rate is {0}bits/sec", DataHelper.formatSize2(downstreamMaxBitRate)));
     742                        sb.append("<br>").append(_t("UPnP reports the maximum downstream bit rate is {0}bits/sec", DataHelper.formatSize2Decimal(downstreamMaxBitRate)));
    717743                if(upstreamMaxBitRate > 0)
    718                         sb.append("<br>").append(_t("UPnP reports the maximum upstream bit rate is {0}bits/sec", DataHelper.formatSize2(upstreamMaxBitRate)));
     744                        sb.append("<br>").append(_t("UPnP reports the maximum upstream bit rate is {0}bits/sec", DataHelper.formatSize2Decimal(upstreamMaxBitRate)));
    719745                synchronized(lock) {
    720746                        for(ForwardPort port : portsToForward) {
     
    819845
    820846        /**
     847        *  @return IP or null
     848         * @since 0.9.34
     849         */
     850        private static String getIP(Device dev) {
     851                // see ControlRequest.setRequestHost()
     852                String rv = null;
     853                String him = dev.getURLBase();
     854                if (him != null && him.length() > 0) {
     855                        try {
     856                                URI url = new URI(him);
     857                                rv = url.getHost();
     858                        } catch (URISyntaxException use) {}
     859                }
     860                if (rv == null) {
     861                        him = dev.getLocation();
     862                        if (him != null && him.length() > 0) {
     863                                try {
     864                                        URI url = new URI(him);
     865                                        rv = url.getHost();
     866                                } catch (URISyntaxException use) {}
     867                        }
     868                }
     869                return rv;
     870        }
     871
     872        /**
    821873         * Bug fix:
    822874         * If the SSDP notify or search response sockets listen on more than one interface,
     
    835887        private String getOurAddress(String deflt) {
    836888                String rv = deflt;
    837                 String hisIP = null;
    838                 // see ControlRequest.setRequestHost()
    839                 String him = _router.getURLBase();
    840                 if (him != null && him.length() > 0) {
    841                         try {
    842                                 URI url = new URI(him);
    843                                 hisIP = url.getHost();
    844                         } catch (URISyntaxException use) {}
    845                 }
    846                 if (hisIP == null) {
    847                         him = _router.getLocation();
    848                         if (him != null && him.length() > 0) {
    849                                 try {
    850                                         URI url = new URI(him);
    851                                         hisIP = url.getHost();
    852                                 } catch (URISyntaxException use) {}
    853                         }
    854                 }
     889                String hisIP = getIP(_router);
    855890                if (hisIP == null)
    856891                        return rv;
     
    10881123                cp.start();
    10891124                long s2 = System.currentTimeMillis();
    1090                 System.out.println("Start took " + (s2 - start));
    1091                 System.out.println("Searching for UPnP devices");
     1125                System.err.println("Start took " + (s2 - start) + "ms");
     1126                System.err.println("Searching for UPnP devices");
    10921127                start = System.currentTimeMillis();
    10931128                cp.search();
    10941129                s2 = System.currentTimeMillis();
    1095                 System.out.println("Search kickoff took " + (s2 - start));
    1096                 System.out.println("Waiting 10 seconds for responses");
     1130                System.err.println("Search kickoff took " + (s2 - start) + "ms");
     1131                System.err.println("Waiting 10 seconds for responses");
    10971132                Thread.sleep(10000);
    1098                 //while(true) {
     1133
    10991134                        DeviceList list = cp.getDeviceList();
    1100                         System.out.println("Found " + list.size() + " devices!");
     1135                        if (list.isEmpty()) {
     1136                                System.err.println("No UPnP devices found");
     1137                                System.exit(1);
     1138                        }
     1139                        System.err.println("Found " + list.size() + " devices.");
     1140                        System.err.println("Redirect the following output to an html file and view in a browser.");
    11011141                        StringBuilder sb = new StringBuilder();
    11021142                        Iterator<Device> it = list.iterator();
     
    11051145                                Device device = it.next();
    11061146                                upnp.listSubDev(device.toString(), device, sb);
    1107                                 System.out.println("Here is the listing for device " + (++i) +
    1108                                                    ": " + device.getFriendlyName() + " :");
     1147                                System.out.println("<h3>Device " + (++i) +
     1148                                                   ": " + DataHelper.escapeHTML(device.getFriendlyName()) + "</h3>");
    11091149                                System.out.println(sb.toString());
    11101150                                sb.setLength(0);
    11111151                        }
    1112                 //}
     1152
    11131153                System.exit(0);
    11141154        }
Note: See TracChangeset for help on using the changeset viewer.