|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package com.sun.tools.jdi; |
|
|
|
import com.sun.tools.jdi.*; |
|
import com.sun.jdi.connect.*; |
|
import com.sun.jdi.connect.spi.*; |
|
import com.sun.jdi.VirtualMachine; |
|
import java.util.Map; |
|
import java.io.IOException; |
|
|
|
public class RawCommandLineLauncher extends AbstractLauncher implements LaunchingConnector { |
|
|
|
static private final String ARG_COMMAND = "command"; |
|
static private final String ARG_ADDRESS = "address"; |
|
static private final String ARG_QUOTE = "quote"; |
|
|
|
TransportService transportService; |
|
Transport transport; |
|
|
|
public TransportService transportService() { |
|
return transportService; |
|
} |
|
|
|
public Transport transport() { |
|
return transport; |
|
} |
|
|
|
public RawCommandLineLauncher() { |
|
super(); |
|
|
|
try { |
|
Class<?> c = Class.forName("com.sun.tools.jdi.SharedMemoryTransportService"); |
|
transportService = (TransportService)c.newInstance(); |
|
transport = new Transport() { |
|
public String name() { |
|
return "dt_shmem"; |
|
} |
|
}; |
|
} catch (ClassNotFoundException x) { |
|
} catch (UnsatisfiedLinkError x) { |
|
} catch (InstantiationException x) { |
|
} catch (IllegalAccessException x) { |
|
}; |
|
|
|
if (transportService == null) { |
|
transportService = new SocketTransportService(); |
|
transport = new Transport() { |
|
public String name() { |
|
return "dt_socket"; |
|
} |
|
}; |
|
} |
|
|
|
addStringArgument( |
|
ARG_COMMAND, |
|
getString("raw.command.label"), |
|
getString("raw.command"), |
|
"", |
|
true); |
|
addStringArgument( |
|
ARG_QUOTE, |
|
getString("raw.quote.label"), |
|
getString("raw.quote"), |
|
"\"", |
|
true); |
|
|
|
addStringArgument( |
|
ARG_ADDRESS, |
|
getString("raw.address.label"), |
|
getString("raw.address"), |
|
"", |
|
true); |
|
} |
|
|
|
|
|
public VirtualMachine |
|
launch(Map<String,? extends Connector.Argument> arguments) |
|
throws IOException, IllegalConnectorArgumentsException, |
|
VMStartException |
|
{ |
|
String command = argument(ARG_COMMAND, arguments).value(); |
|
String address = argument(ARG_ADDRESS, arguments).value(); |
|
|
|
String quote = argument(ARG_QUOTE, arguments).value(); |
|
|
|
if (quote.length() > 1) { |
|
throw new IllegalConnectorArgumentsException("Invalid length", |
|
ARG_QUOTE); |
|
} |
|
|
|
TransportService.ListenKey listener = transportService.startListening(address); |
|
|
|
try { |
|
return launch(tokenizeCommand(command, quote.charAt(0)), |
|
address, listener, transportService); |
|
} finally { |
|
transportService.stopListening(listener); |
|
} |
|
} |
|
|
|
public String name() { |
|
return "com.sun.jdi.RawCommandLineLaunch"; |
|
} |
|
|
|
public String description() { |
|
return getString("raw.description"); |
|
} |
|
} |