author | jlahoda |
Fri, 11 Nov 2016 17:45:29 +0100 | |
changeset 41995 | 1ac75bf2dc3a |
parent 41994 | e43f670394ca |
child 41996 | 389212e0746c |
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiDefaultExecutionControl.java Fri Nov 11 12:54:47 2016 +0100 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiDefaultExecutionControl.java Fri Nov 11 17:45:29 2016 +0100 @@ -24,7 +24,6 @@ */ package jdk.jshell.execution; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInput; @@ -33,14 +32,11 @@ import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; -import java.security.SecureRandom; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Consumer; - import com.sun.jdi.BooleanValue; import com.sun.jdi.ClassNotLoadedException; import com.sun.jdi.Field; @@ -127,14 +123,6 @@ VirtualMachine vm = jdii.vm(); Process process = jdii.process(); - OutputStream processOut = process.getOutputStream(); - SecureRandom rng = new SecureRandom(); - byte[] randomBytes = new byte[VERIFY_HASH_LEN]; - - rng.nextBytes(randomBytes); - processOut.write(randomBytes); - processOut.flush(); - List<Consumer<String>> deathListeners = new ArrayList<>(); deathListeners.add(s -> env.closeDown()); Util.detectJdiExitEvent(vm, s -> { @@ -143,8 +131,6 @@ } }); - ByteArrayOutputStream receivedRandomBytes = new ByteArrayOutputStream(); - // Set-up the commands/reslts on the socket. Piggy-back snippet // output. Socket socket = listener.accept(); @@ -153,35 +139,11 @@ Map<String, OutputStream> outputs = new HashMap<>(); outputs.put("out", env.userOut()); outputs.put("err", env.userErr()); - outputs.put("echo", new OutputStream() { - @Override public void write(int b) throws IOException { - synchronized (receivedRandomBytes) { - receivedRandomBytes.write(b); - receivedRandomBytes.notify(); - } - } - }); Map<String, InputStream> input = new HashMap<>(); input.put("in", env.userIn()); - return remoteInputOutput(socket.getInputStream(), out, outputs, input, (objIn, objOut) -> { - synchronized (receivedRandomBytes) { - while (receivedRandomBytes.size() < randomBytes.length) { - try { - receivedRandomBytes.wait(); - } catch (InterruptedException ex) { - //ignore - } - } - if (!Arrays.equals(receivedRandomBytes.toByteArray(), randomBytes)) { - throw new IllegalStateException("Invalid connection!"); - } - } - return new JdiDefaultExecutionControl(objOut, objIn, vm, process, deathListeners); - }); + return remoteInputOutput(socket.getInputStream(), out, outputs, input, (objIn, objOut) -> new JdiDefaultExecutionControl(objOut, objIn, vm, process, deathListeners)); } } - //where: - private static final int VERIFY_HASH_LEN = 20; /** * Create an instance.
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/execution/RemoteExecutionControl.java Fri Nov 11 12:54:47 2016 +0100 +++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/execution/RemoteExecutionControl.java Fri Nov 11 17:45:29 2016 +0100 @@ -24,7 +24,6 @@ */ package jdk.jshell.execution; -import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; @@ -58,7 +57,6 @@ * @throws Exception any unexpected exception */ public static void main(String[] args) throws Exception { - InputStream fd0 = System.in; String loopBack = null; Socket socket = new Socket(loopBack, Integer.parseInt(args[0])); InputStream inStream = socket.getInputStream(); @@ -66,25 +64,6 @@ Map<String, Consumer<OutputStream>> outputs = new HashMap<>(); outputs.put("out", st -> System.setOut(new PrintStream(st, true))); outputs.put("err", st -> System.setErr(new PrintStream(st, true))); - outputs.put("echo", st -> { - new Thread(() -> { - try { - int read; - - while ((read = fd0.read()) != (-1)) { - st.write(read); - } - } catch (IOException ex) { - ex.printStackTrace(); - } finally { - try { - st.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } - } - }).start(); - }); Map<String, Consumer<InputStream>> input = new HashMap<>(); input.put("in", st -> System.setIn(st)); forwardExecutionControlAndIO(new RemoteExecutionControl(), inStream, outStream, outputs, input);