Ejemplo n.º 1
0
  public void initialize(
      String identification,
      CryptoWishList cwl,
      ServerHostKeyVerifier verifier,
      DHGexParameters dhgex,
      int connectTimeout,
      SecureRandom rnd,
      ProxyData proxyData)
      throws IOException {
    /* First, establish the TCP connection to the SSH-2 server */

    establishConnection(proxyData, connectTimeout);

    /* Parse the server line and say hello - important: this information is later needed for the
     * key exchange (to stop man-in-the-middle attacks) - that is why we wrap it into an object
     * for later use.
     */

    ClientServerHello csh =
        new ClientServerHello(identification, sock.getInputStream(), sock.getOutputStream());

    tc = new TransportConnection(sock.getInputStream(), sock.getOutputStream(), rnd);

    km = new KexManager(this, csh, cwl, hostname, port, verifier, rnd);
    km.initiateKEX(cwl, dhgex);

    receiveThread =
        new Thread(
            new Runnable() {
              public void run() {
                try {
                  receiveLoop();
                } catch (IOException e) {
                  close(e, false);

                  log.warning("Receive thread: error in receiveLoop: " + e.getMessage());
                }

                if (log.isDebugEnabled()) {
                  log.debug("Receive thread: back from receiveLoop");
                }

                /* Tell all handlers that it is time to say goodbye */

                if (km != null) {
                  try {
                    km.handleMessage(null, 0);
                  } catch (IOException ignored) {
                  }
                }

                for (HandlerEntry he : messageHandlers) {
                  try {
                    he.mh.handleMessage(null, 0);
                  } catch (Exception ignore) {
                  }
                }
              }
            });

    receiveThread.setDaemon(true);
    receiveThread.start();
  }