in sshd-cli/src/main/java/org/apache/sshd/cli/client/SshKeyScanMain.java [631:708]
public static List<String> parseCommandLineArguments(SshKeyScanMain scanner, String... args) throws IOException {
int numArgs = GenericUtils.length(args);
for (int index = 0; index < numArgs; index++) {
String optName = args[index];
if ("-f".equals(optName)) {
index++;
ValidateUtils.checkTrue(index < numArgs, "Missing %s option argument", optName);
ValidateUtils.checkTrue(scanner.getInputStream() == null, "%s option re-specified", optName);
String filePath = args[index];
if ("-".equals(filePath)) {
scanner.setInputStream(new NoCloseInputStream(System.in));
} else {
scanner.setInputStream(new FileInputStream(filePath));
}
} else if ("-t".equals(optName)) {
index++;
ValidateUtils.checkTrue(index < numArgs, "Missing %s option argument", optName);
ValidateUtils.checkTrue(GenericUtils.isEmpty(scanner.getKeyTypes()), "%s option re-specified", optName);
String typeList = args[index];
String[] types = GenericUtils.split(typeList, ',');
ValidateUtils.checkTrue(GenericUtils.length(types) > 0, "No types specified for %s", optName);
scanner.setKeyTypes(Arrays.asList(types));
} else if ("-p".equals(optName)) {
index++;
ValidateUtils.checkTrue(index < numArgs, "Missing %s option argument", optName);
ValidateUtils.checkTrue(scanner.getPort() <= 0, "%s option re-specified", optName);
String portValue = args[index];
int port = Integer.parseInt(portValue);
ValidateUtils.checkTrue((port > 0) && (port <= 0xFFFF), "Bad port: %s", portValue);
scanner.setPort(port);
} else if ("-T".equals(optName)) {
index++;
ValidateUtils.checkTrue(index < numArgs, "Missing %s option argument", optName);
ValidateUtils.checkTrue(scanner.getTimeout() <= 0, "%s option re-specified", optName);
String timeoutValue = args[index];
long timeout = Long.parseLong(timeoutValue);
ValidateUtils.checkTrue(timeout > 0L, "Bad timeout: %s", timeoutValue);
scanner.setTimeout(timeout);
} else if ("-v".equals(optName)) {
ValidateUtils.checkTrue(scanner.getLogLevel() == null, "%s option re-specified", optName);
scanner.setLogLevel(Level.FINEST);
} else if ("-io".equals(optName)) {
if ((index + 1) >= numArgs) {
System.err.println("option requires an argument: " + optName);
break;
}
String provider = args[++index];
BuiltinIoServiceFactoryFactories factory
= CliSupport.resolveBuiltinIoServiceFactory(System.err, optName, provider);
if (factory != null) {
System.setProperty(IoServiceFactory.class.getName(), factory.getFactoryClassName());
} else {
break;
}
} else { // stop at first non-option - assume the rest are host names/addresses
ValidateUtils.checkTrue(optName.charAt(0) != '-', "Unknown option: %s", optName);
int remaining = numArgs - index;
if (remaining == 1) {
return Collections.singletonList(optName);
}
List<String> hosts = new ArrayList<>(remaining);
for (; index < numArgs; index++) {
hosts.add(args[index]);
}
return hosts;
}
}
return Collections.emptyList();
}