Changeset c5bd0bd for apps


Ignore:
Timestamp:
Nov 17, 2018 10:19:55 AM (20 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
0526d6fd
Parents:
6963d1f
Message:

NDT: Add support for test over SSL
error handling
log tweaks

Location:
apps/routerconsole/java/src
Files:
4 edited

Legend:

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

    r6963d1f rc5bd0bd  
    2323import java.io.ByteArrayOutputStream;
    2424import java.io.IOException;
    25 import java.net.URL;
    2625import java.util.ArrayList;
    2726import java.util.HashMap;
     
    5049public class MLabRunner {
    5150    // ns.measurementlab.net does not support https
    52     // use ndt_ssl for test over ssl? but Tcpbw100 doesn't support it
    5351    //private static final String NS_URL = "http://ns.measurementlab.net/ndt?format=json";
    5452    private static final String NS_URL_SSL = "https://mlab-ns.appspot.com/ndt?format=json";
     53    // use ndt_ssl for test over ssl
     54    private static final String NS_URL_SSL_SSL = "https://mlab-ns.appspot.com/ndt_ssl?format=json";
     55    private static final String PROP_SSL = "routerconsole.bwtest.useSSL";
     56    private static final boolean DEFAULT_USE_SSL = true;
    5557    private static final long NS_TIMEOUT = 20*1000;
    5658    private final I2PAppContext _context;
     
    115117                        String server_city = null;
    116118                        String server_country = null;
     119                        boolean useSSL = _context.getProperty(PROP_SSL, DEFAULT_USE_SSL);
    117120                       
    118121                        try {
    119122                            ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
     123                            // http to name server
    120124                            // public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort,
    121125                            //               int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream,
     
    124128                            //                           0, 2, 1024, null, baos,
    125129                            //                           NS_URL, false, null, null);
    126                             EepGet eepget = new SSLEepGet(_context, baos, NS_URL_SSL);
     130                            // https to name server
     131                            String nsURL = useSSL ? NS_URL_SSL_SSL : NS_URL_SSL;
     132                            EepGet eepget = new SSLEepGet(_context, baos, nsURL);
    127133                            boolean ok = eepget.fetch(NS_TIMEOUT, NS_TIMEOUT, NS_TIMEOUT);
    128134                            if (!ok)
     
    139145                            if (_log.shouldWarn())
    140146                                _log.warn("Got response: " + DataHelper.getUTF8(b));
    141                             // TODO use IP instead to avoid another lookup?
    142                             // or use "fqdn" in response instead of "url"
    143                             URL url = new URL((String)map.get( "url" ));
    144                             if (url == null) {
    145                                 throw new IOException("no url");
     147                            // TODO use IP instead to avoid another lookup? - no, won't work with ssl
     148                            // use "fqdn" in response instead of "url" since ndt_ssl does not have url
     149                            server_host = (String)map.get("fqdn");
     150                            if (server_host == null) {
     151                                throw new IOException("no fqdn");
    146152                            }
    147                             server_host = url.getHost();
    148153                            server_city = (String) map.get("city");
    149154                            server_country = (String) map.get("country");
     
    159164                            // fallback to old, discouraged approach
    160165                            server_host = "ndt.iupui.donar.measurement-lab.org";
     166                            useSSL = false;
    161167                            if (_log.shouldWarn())
    162168                                _log.warn("Failed to select server, falling back to donar method");
    163169                        }
    164170                       
     171                        String[] args = useSSL ? new String[] { "-s", server_host } : new String[] { server_host };
    165172                        long start = System.currentTimeMillis();
    166                         final Tcpbw100 test = Tcpbw100.mainSupport( new String[]{ server_host });
     173                        final Tcpbw100 test = Tcpbw100.mainSupport(args);
    167174                       
    168175                        run.addListener(
     
    345352    /** standalone test */
    346353    public static void main(String[] args) {
     354        boolean useSSL = args.length > 0 && args[0].equals("-s");
     355        System.setProperty(PROP_SSL, Boolean.toString(useSSL));
    347356        I2PAppContext ctx = I2PAppContext.getGlobalContext();
    348357        MLabRunner mlab = MLabRunner.getInstance(ctx);
  • apps/routerconsole/java/src/edu/internet2/ndt/NDTConstants.java

    r6963d1f rc5bd0bd  
    7171        // NDT pre-fixed port ID
    7272        public static final int CONTROL_PORT_DEFAULT = 3001;
     73        public static final int CONTROL_PORT_SSL = 3010;
    7374
    7475        // Section: SRV-QUEUE message status constants
  • apps/routerconsole/java/src/edu/internet2/ndt/ResultsTextPane.java

    r6963d1f rc5bd0bd  
    2626         **/
    2727        public void append(String paramTextStr) {
    28 /****
    2928                try {
    3029                        getStyledDocument().insertString(getStyledDocument().getLength(),
    3130                                        paramTextStr, null);
    3231                } catch (BadLocationException e) {
    33                         System.out
    34                                         .println("WARNING: failed to append text to the text pane! ["
    35                                                         + paramTextStr + "]");
    3632                }
    37 ****/
    3833        }
    3934
  • apps/routerconsole/java/src/edu/internet2/ndt/Tcpbw100.java

    r6963d1f rc5bd0bd  
    9090import java.net.URL;
    9191import java.net.UnknownHostException;
    92 import java.security.AccessController;
    93 import java.security.PrivilegedAction;
     92import java.security.GeneralSecurityException;
     93import java.util.Arrays;
    9494import java.util.Date;
    9595import java.util.Locale;
     
    121121import net.i2p.util.Addresses;
    122122import net.i2p.util.I2PAppThread;
     123import net.i2p.util.I2PSSLSocketFactory;
    123124import net.i2p.util.Log;
    124125
     
    297298        // I2P
    298299        private String _displayStatus = "";
    299         private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(Tcpbw100.class);
     300        private final I2PAppContext _context = I2PAppContext.getGlobalContext();
     301        private final Log _log = _context.logManager().getLog(Tcpbw100.class);
     302        private final boolean _useSSL;
     303        private final I2PSSLSocketFactory _sslFactory;
     304
     305        public Tcpbw100(boolean useSSL) {
     306                super();
     307                I2PSSLSocketFactory sslFactory = null;
     308                if (useSSL) {
     309                        try {
     310                                sslFactory = new I2PSSLSocketFactory(_context, true, "certificates/ndt");
     311                        } catch (GeneralSecurityException gse) { throw new IllegalStateException("init", gse); }
     312                }
     313                _sslFactory = sslFactory;
     314                _useSSL = useSSL;
     315        }
    300316
    301317        /**
     
    311327        public static Tcpbw100 mainSupport(String[] args) {
    312328                JFrame frame = new JFrame("ANL/Internet2 NDT (applet)");
     329                boolean useSSL = args.length > 0 && args[0].equals("-s");
     330                if (useSSL)
     331                        args = Arrays.copyOfRange(args, 1, args.length);
    313332                if (args.length < 1 || args.length > 2) {
    314                         System.out.println("Usage: java -jar Tcpbw100.jar <hostname> [client-id]");
     333                        System.out.println("Usage: java -jar Tcpbw100.jar [-s] <hostname> [client-id]");
    315334                        System.exit(0);
    316335                }
    317                 final Tcpbw100 applet = new Tcpbw100();
     336                final Tcpbw100 applet = new Tcpbw100(useSSL);
    318337                frame.addWindowListener(new WindowAdapter() {
    319338                        public void windowClosing(WindowEvent e) {
     
    749768                                        }
    750769                                } catch (Exception e) {
    751                                         _log.warn("?", e);
    752 
    753770                                        String sMessage = NDTUtils.isEmpty(e.getMessage())
    754771                                                        ? _resBundDisplayMsgs.getString("withoutMessage")
     
    759776                                                        + " (" + e.getClass().getName() + "): "
    760777                                                        + sMessage + "\n";
     778                                        _log.warn(_sErrMsg, e);
    761779                                }
    762780
     
    809827
    810828                try {
    811                         String lang = I2PAppContext.getGlobalContext().getProperty("routerconsole.lang");
     829                        String lang = _context.getProperty("routerconsole.lang");
    812830                        if (lang != null) {
    813831                                _localeObj = new Locale(lang);
     
    827845                        JOptionPane.showMessageDialog(null,
    828846                                        "Error while loading language files:\n" + e.getMessage());
    829                         _log.warn("?", e);
     847                        _log.warn("bundle", e);
    830848                }
    831849
     
    12381256                                getAppletContext().showDocument(_targetURL);
    12391257                        } catch (Exception e) {
    1240                                 _log.warn("?", e);
    1241 
    12421258                                String sMessage = NDTUtils.isEmpty(e.getMessage())
    12431259                                                ? _resBundDisplayMsgs.getString("withoutMessage")
     
    12481264                                                + sMessage + "\n";
    12491265
     1266                                _log.warn(_sErrMsg, e);
    12501267                                _resultsTxtPane.append(_sErrMsg);
    12511268                        }
     
    12831300                        _displayStatus = msg;
    12841301                }
    1285                 _log.warn("NDT STATUS: " + msg);
     1302                if (_log.shouldWarn())
     1303                    _log.warn("NDT STATUS: " + msg);
    12861304        }
    12871305
     
    13591377                        Socket midSrvrSockObj = null;
    13601378                        try {
     1379                                // this one is NOT SSL
    13611380                                midSrvrSockObj = new Socket(hostAddress, midport);
    13621381                        } catch (UnknownHostException e) {
     
    16421661                                                NDTConstants.SOCKET_FREE_PORT_INDICATOR);
    16431662                        } catch (Exception e) {
    1644                                 _log.warn("?", e);
    16451663                                _sErrMsg = _resBundDisplayMsgs.getString("sfwSocketFail")
    16461664                                                + "\n";
     1665                                _log.warn(_sErrMsg, e);
    16471666                                return true;
    16481667                        }
     
    16811700                        // Now, run Test from client for the C->S direction SFW test
    16821701                        // trying to connect to ephemeral port number sent by server
     1702                        // this one is NOT SSL
    16831703                        Socket sfwSocket = new Socket();
    16841704                        try {
     
    16941714                                                NDTConstants.SFW_PREDEFINED_TEST_MESSAGE).getBytes());
    16951715                        } catch (Exception e) {
    1696                                 _log.warn("?", e);
     1716                                _log.warn("sfwSocket", e);
    16971717                                //Indication that there might be a firewall from C->S side.
    16981718                        }
     
    18201840                        final Socket outSocket;
    18211841                        try {
    1822                                 outSocket = new Socket(hostAddress, iC2sport);
     1842                                outSocket = newSocket(hostAddress, iC2sport);
    18231843                        } catch (UnknownHostException e) {
    18241844                                _log.warn("Don't know about host: " + sHostName, e);
     
    19181938                                        outStream.write(_yabuff2Write, 0, _yabuff2Write.length);
    19191939                                } catch (SocketException e) {
    1920                                         _log.warn("SocketException while writing to server", e);
     1940                                        // normal after 10 seconds
     1941                                        _log.debug("SocketException while writing to server (normal)", e);
    19211942                                        break;
    19221943                                }
     
    20852106                        Socket inSocket;
    20862107                        try {
    2087                                 inSocket = new Socket(hostAddress, iS2cport);
     2108                                inSocket = newSocket(hostAddress, iS2cport);
    20882109                        } catch (UnknownHostException e) {
    20892110                                _log.warn("Don't know about host: " + sHostName, e);
     
    22032224                                        _dSbytes = Double.parseDouble(JSONUtils.getValueFromJsonObj(tmpstr3, "TotalSentByte"));
    22042225                                } catch (Exception e) {
    2205                                         _log.warn("?", e);
    22062226                                        _sErrMsg = _resBundDisplayMsgs.getString("inboundWrongMessage")
    22072227                                                        + "\n";
     2228                                        _log.warn(_sErrMsg, e);
    22082229                                        return true;
    22092230                                }
     
    22212242                                                        .substring(k2 + 1));
    22222243                                } catch (Exception e) {
    2223                                         _log.warn("?", e);
    22242244                                        _sErrMsg = _resBundDisplayMsgs.getString("inboundWrongMessage")
    22252245                                                        + "\n";
     2246                                        _log.warn(_sErrMsg, e);
    22262247                                        return true;
    22272248                                }
     
    24982519                // listens
    24992520                // to this port
    2500                 int ctlport = NDTConstants.CONTROL_PORT_DEFAULT;
     2521                int ctlport = _useSSL ? NDTConstants.CONTROL_PORT_SSL : NDTConstants.CONTROL_PORT_DEFAULT;
    25012522
    25022523                // Commenting these 2 variables - seem unused
     
    25222543                                        + _resBundDisplayMsgs.getString("toRunTest") + "\n");
    25232544                        // create socket to host specified by user and the default port
    2524                         ctlSocket = new Socket(hostAddress, ctlport);
     2545                        ctlSocket = newSocket(hostAddress, ctlport);
    25252546                } catch (UnknownHostException e) {
    25262547                        _log.warn("Don't know about host: " + sHostName, e);
     
    25662587                                        + "\n";
    25672588                        _bFailed = true;
     2589                        try { ctlSocket.close(); } catch (IOException ioe) {}
    25682590                        return;
    25692591                }
     
    25982620                                                                + "\n");
    25992621                                                // create socket to host specified by user and the default port
    2600                                                 ctlSocket = new Socket(hostAddress, ctlport);
     2622                                                // we seem to always get here, why bother trying extended above?
     2623                                                if (ctlSocket != null) {
     2624                                                        try { ctlSocket.close(); } catch (IOException ioe) {}
     2625                                                }
     2626                                                ctlSocket = newSocket(hostAddress, ctlport);
    26012627                                        } catch (UnknownHostException e) {
    26022628                                                _log.warn("Don't know about host: " + sHostName, e);
     
    28092835                // indicate reason
    28102836                while (tokenizer.hasMoreTokens()) {
     2837                    // None of test_xxx catch NumberFormatException,
     2838                    // do it here so we don't kill the whole thing
     2839                    try {
    28112840                        if (sPanel.wantToStop()) { // user has indicated decision to stop
    28122841                                                                                // tests from GUI
     
    28722901                                return;
    28732902                        }
     2903                    } catch (NumberFormatException nfe) {
     2904                        // None of test_xxx catch NumberFormatException,
     2905                        // do it here so we don't kill the whole thing
     2906                        _log.warn("nfe", nfe);
     2907                    }
    28742908                }
    28752909
     
    29723006                pub_errmsg = "All tests completed OK.";
    29733007                pub_status = "done";
     3008        }
     3009
     3010        /**
     3011         *  Return a SSL or standard socket depending on config
     3012         */
     3013        private Socket newSocket(InetAddress hostAddress, int ctlPort) throws IOException {
     3014                if (_log.shouldInfo())
     3015                        _log.info("Connecting to " + hostAddress + ':' + ctlPort, new Exception("I did it"));
     3016                Socket rv;
     3017                if (_useSSL) {
     3018                        rv = _sslFactory.createSocket(hostAddress, ctlPort);
     3019                        if (_log.shouldWarn())
     3020                                _log.warn("New SSL socket to " + hostAddress + ':' + ctlPort);
     3021                } else {
     3022                        rv = new Socket(hostAddress, ctlPort);
     3023                        if (_log.shouldWarn())
     3024                                _log.warn("New non-SSL socket to " + hostAddress + ':' + ctlPort);
     3025                }
     3026                return rv;
    29743027        }
    29753028
     
    44404493         */
    44414494        private int parseMsgBodyToInt(String msg, int radix) {
    4442                 if (jsonSupport) {
    4443                         return Integer.parseInt(JSONUtils.getSingleMessage(msg), radix);
    4444                 } else {
    4445                         return Integer.parseInt(msg, radix);
     4495                try {
     4496                        if (jsonSupport) {
     4497                                return Integer.parseInt(JSONUtils.getSingleMessage(msg), radix);
     4498                        } else {
     4499                                return Integer.parseInt(msg, radix);
     4500                        }
     4501                } catch (NumberFormatException nfe) {
     4502                        _log.warn("parse", nfe);
     4503                        return 0;
    44464504                }
    44474505        }
     
    44704528                                        break;
    44714529                                }catch( Throwable e ){
    4472                                         _log.warn("?", e);
     4530                                        _log.warn("TG", e);
    44734531                                }
    44744532                        }
     
    44964554                                        Throwable e)
    44974555                                {
    4498                                         _log.debug("?", e);
     4556                                        _log.warn("TG", e);
    44994557                                }
    45004558                        };
     
    45164574                                               
    45174575                                                        if ( !( e instanceof ThreadDeath )){
    4518                                                                 _log.debug("?", e);
     4576                                                                _log.warn("TG", e);
    45194577                                                        }
    45204578                                                }finally{
Note: See TracChangeset for help on using the changeset viewer.