Changeset 0889a75


Ignore:
Timestamp:
Jan 27, 2019 2:25:48 PM (17 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
3cd12ec
Parents:
efb1b7c
Message:

NDT:
Catch exception on DNS lookup failure (ticket #2399)
Add support for specifying server in CLI (ticket #2413)
Finals and javadocs

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/com/vuze/plugins/mlab/MLabRunner.java

    refb1b7c r0889a75  
    8686     */
    8787    public ToolRun runNDT(final ToolListener listener) {
     88        boolean useSSL = _context.getProperty(PROP_SSL, DEFAULT_USE_SSL);
     89        return runNDT(listener, useSSL, null);
     90    }
     91   
     92    /**
     93     * Non-blocking, spawns a thread and returns immediately.
     94     *
     95     * @param listener use to detect completion and get results
     96     * @param use_SSL whether to use SSL to talk to the servers
     97     * @param serverHost if non-null, bypass the name server and run test with this host
     98     * @return a ToolRun object which may be used to cancel the test,
     99     *         or null if there was already a test in progress.
     100     * @since 0.9.39
     101     */
     102    public ToolRun runNDT(final ToolListener listener, final boolean use_SSL, final String serverHost) {
    88103        if (!_running.compareAndSet(false, true)) {
    89104            listener.reportSummary("Test already running");
     
    114129                        // The other option, discouraged, is to continue using donar which should still be resolving. It just uses ns.measurementlab.net on the backend now. However, this is currently down according to my tests, so we'll work on getting this back as soon as possible.
    115130                       
    116                         String server_host = null;
     131                        String server_host = serverHost;
    117132                        String server_city = null;
    118133                        String server_country = null;
    119                         boolean useSSL = _context.getProperty(PROP_SSL, DEFAULT_USE_SSL);
    120                        
    121                         try {
    122                             ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
    123                             // http to name server
    124                             // public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort,
    125                             //               int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream,
    126                             //               String url, boolean allowCaching, String etag, String postData) {
    127                             //EepGet eepget = new EepGet(_context, false, null, 0,
    128                             //                           0, 2, 1024, null, baos,
    129                             //                           NS_URL, false, null, null);
    130                             // https to name server
    131                             String nsURL = useSSL ? NS_URL_SSL_SSL : NS_URL_SSL;
    132                             EepGet eepget = new SSLEepGet(_context, baos, nsURL);
    133                             boolean ok = eepget.fetch(NS_TIMEOUT, NS_TIMEOUT, NS_TIMEOUT);
    134                             if (!ok)
    135                                 throw new IOException("ns fetch failed");
    136                             int code = eepget.getStatusCode();
    137                             if (code != 200)
    138                                 throw new IOException("ns fetch failed: " + code);
    139                             JSONParser parser = new JSONParser();
    140                             byte[] b = baos.toByteArray();
    141                             String s = new String(b, "ISO-8859-1");
    142                             JSONObject map = (JSONObject) parser.parse(s);
    143                             if (map == null) {
    144                                 throw new IOException("no map");
     134                        boolean useSSL = use_SSL;
     135                       
     136                        if (server_host == null) {
     137                            try {
     138                                ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
     139                                // http to name server
     140                                // public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort,
     141                                //               int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream,
     142                                //               String url, boolean allowCaching, String etag, String postData) {
     143                                //EepGet eepget = new EepGet(_context, false, null, 0,
     144                                //                           0, 2, 1024, null, baos,
     145                                //                           NS_URL, false, null, null);
     146                                // https to name server
     147                                String nsURL = useSSL ? NS_URL_SSL_SSL : NS_URL_SSL;
     148                                EepGet eepget = new SSLEepGet(_context, baos, nsURL);
     149                                boolean ok = eepget.fetch(NS_TIMEOUT, NS_TIMEOUT, NS_TIMEOUT);
     150                                if (!ok)
     151                                    throw new IOException("ns fetch failed");
     152                                int code = eepget.getStatusCode();
     153                                if (code != 200)
     154                                    throw new IOException("ns fetch failed: " + code);
     155                                JSONParser parser = new JSONParser();
     156                                byte[] b = baos.toByteArray();
     157                                String s = new String(b, "ISO-8859-1");
     158                                JSONObject map = (JSONObject) parser.parse(s);
     159                                if (map == null) {
     160                                    throw new IOException("no map");
     161                                }
     162                                if (_log.shouldWarn())
     163                                    _log.warn("Got response: " + DataHelper.getUTF8(b));
     164                                // TODO use IP instead to avoid another lookup? - no, won't work with ssl
     165                                // use "fqdn" in response instead of "url" since ndt_ssl does not have url
     166                                server_host = (String)map.get("fqdn");
     167                                if (server_host == null) {
     168                                    throw new IOException("no fqdn");
     169                                }
     170                                server_city = (String) map.get("city");
     171                                server_country = (String) map.get("country");
     172                                // ignore the returned port in the URL (7123) which is the applet, not the control port
     173                                if (_log.shouldWarn())
     174                                    _log.warn("Selected server: " + server_host);
     175                            } catch (Exception e) {
     176                                if (_log.shouldWarn())
     177                                    _log.warn("Failed to get server", e);
    145178                            }
    146                             if (_log.shouldWarn())
    147                                 _log.warn("Got response: " + DataHelper.getUTF8(b));
    148                             // TODO use IP instead to avoid another lookup? - no, won't work with ssl
    149                             // use "fqdn" in response instead of "url" since ndt_ssl does not have url
    150                             server_host = (String)map.get("fqdn");
    151                             if (server_host == null) {
    152                                 throw new IOException("no fqdn");
    153                             }
    154                             server_city = (String) map.get("city");
    155                             server_country = (String) map.get("country");
    156                             // ignore the returned port in the URL (7123) which is the applet, not the control port
    157                             if (_log.shouldWarn())
    158                                 _log.warn("Selected server: " + server_host);
    159                         } catch (Exception e) {
    160                             if (_log.shouldWarn())
    161                                 _log.warn("Failed to get server", e);
    162179                        }
    163180                       
     
    172189                        String[] args = useSSL ? new String[] { "-s", server_host } : new String[] { server_host };
    173190                        long start = System.currentTimeMillis();
    174                         final Tcpbw100 test = Tcpbw100.mainSupport(args);
     191                        final Tcpbw100 test;
     192                        try {
     193                            test = Tcpbw100.mainSupport(args);
     194                        } catch (IllegalArgumentException iae) {
     195                            String err = "Failed to connect to bandwidth test server " + server_host;
     196                            _log.error(err, iae);
     197                            if (listener != null) {
     198                                listener.reportSummary(err);
     199                                listener.reportDetail(err);
     200                            }
     201                            return;
     202                        }
    175203                        final AtomicBoolean cancelled = new AtomicBoolean();
    176204                       
     
    360388    public static void main(String[] args) {
    361389        boolean useSSL = args.length > 0 && args[0].equals("-s");
    362         System.setProperty(PROP_SSL, Boolean.toString(useSSL));
     390        String host;
     391        if (useSSL && args.length > 1)
     392            host = args[1];
     393        else if (!useSSL && args.length > 0)
     394            host = args[0];
     395        else
     396            host = null;
    363397        I2PAppContext ctx = I2PAppContext.getGlobalContext();
    364398        MLabRunner mlab = MLabRunner.getInstance(ctx);
    365399        TestListener lsnr = new TestListener();
    366         mlab.runNDT(lsnr);
     400        mlab.runNDT(lsnr, useSSL, host);
    367401        try { Thread.sleep(2000); } catch (InterruptedException ie) { return; }
    368402        for (int i = 0; i < 180; i++) {
  • apps/routerconsole/java/src/edu/internet2/ndt/OsfwWorker.java

    refb1b7c r0889a75  
    2222public class OsfwWorker implements Runnable {
    2323
    24         private ServerSocket _srvSocket;
    25         private int _iTestTime;
     24        private final ServerSocket _srvSocket;
     25        private final int _iTestTime;
    2626        private boolean _iFinalized = false;
    2727        // local Tcpbw100 Applet reference
    28         Tcpbw100 _localTcpAppObj;
     28        private final Tcpbw100 _localTcpAppObj;
    2929
    3030        /**
     
    4040                this._srvSocket = srvSocketParam;
    4141                this._iTestTime = iParamTestTime;
     42                this._localTcpAppObj = null;
    4243        }
    4344
  • apps/routerconsole/java/src/edu/internet2/ndt/Protocol.java

    refb1b7c r0889a75  
    1313
    1414public class Protocol {
    15         private InputStream _ctlInStream;
    16         private OutputStream _ctlOutStream;
     15        private final InputStream _ctlInStream;
     16        private final OutputStream _ctlOutStream;
    1717        private boolean jsonSupport = true;
    1818
  • apps/routerconsole/java/src/edu/internet2/ndt/Tcpbw100.java

    refb1b7c r0889a75  
    319319         * public static void main for invoking as an Application
    320320         * @param args String array of command line arguments
    321          * */
     321         * @throws IllegalArgumentException on bad hostname
     322         **/
    322323        public static void main(String[] args) {
    323324                Tcpbw100 test = mainSupport( args );
     
    325326        }
    326327
    327         /** bigly */
     328        /**
     329         *  bigly
     330         * @throws IllegalArgumentException on bad hostname
     331         **/
    328332        public static Tcpbw100 mainSupport(String[] args) {
    329333                JFrame frame = new JFrame("ANL/Internet2 NDT (applet)");
  • history.txt

    refb1b7c r0889a75  
     12019-01-27 zzz
     2 * NDT:
     3   - Catch exception on DNS lookup failure (ticket #2399)
     4   - Add support for specifying server in CLI (ticket #2413)
     5
     62019-01-24 zzz
     7 * Debian:
     8   - Fix Debian control files (ticket #2401)
     9   - Add build option for libtomcat9 (ticket #2364)
     10   - Fix PPA builds for precise and trusty (ticket #2408)
     11
    112* 2019-01-22 0.9.38 released
    213
  • router/java/src/net/i2p/router/RouterVersion.java

    refb1b7c r0889a75  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 0;
     21    public final static long BUILD = 1;
    2222
    2323    /** for example "-test" */
Note: See TracChangeset for help on using the changeset viewer.