Skip to content
This repository has been archived by the owner on May 11, 2020. It is now read-only.

Commit

Permalink
command line arguments override those corresponding items in config f…
Browse files Browse the repository at this point in the history
…ile (resolves #10) (#30)
  • Loading branch information
tobyxdd authored and wxdao committed Feb 20, 2018
1 parent 64ea9c7 commit 21b4537
Showing 1 changed file with 97 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -297,13 +297,13 @@ public static void main(final String[] args) {

if (isServer) {

final ProxyServerConfig config;
ProxyServerConfig config = null;
if (useConfigFile) {
config = serverConfigFromConfigParser(configParser);
} else {
config = serverConfigFromCommandline(commandLine);
}

config = serverConfigFromCommandline(commandLine, config);

if (config != null) {
try {
final ProxyServer proxyServer = new ProxyServer(config);
Expand All @@ -321,13 +321,13 @@ public static void main(final String[] args) {

} else {

final ProxyClientConfig config;
ProxyClientConfig config = null;
if (useConfigFile) {
config = clientConfigFromConfigParser(configParser);
} else {
config = clientConfigFromCommandline(commandLine);
}

config = clientConfigFromCommandline(commandLine, config);

if (config != null) {
try {
final ProxyClient proxyClient = new ProxyClient(config);
Expand Down Expand Up @@ -364,43 +364,55 @@ private static ProxyClientConfig clientConfigFromConfigParser(final ProxyJSONCon
}
}

private static ProxyServerConfig serverConfigFromCommandline(final CommandLine commandLine) {
private static ProxyServerConfig serverConfigFromCommandline(final CommandLine commandLine, final ProxyServerConfig originalConfig) {
try {
if (commandLine.hasOption("k")) {
if ((!commandLine.hasOption("k")) && originalConfig == null) {
Logger.error("Missing required argument(s): -k");
return null;
}

final ProxyServerConfig config;
if (originalConfig == null) {
final InetSocketAddress bindAddress = new InetSocketAddress(commandLine.hasOption("a") ? InetAddress.getByName(commandLine.getOptionValue("a")) : null,
commandLine.hasOption("p") ? ((Number) commandLine.getParsedOptionValue("p")).intValue() : ProxyGlobalConstants.DEFAULT_SERVER_PORT);
final ProxyServerConfig config = new ProxyServerConfig(bindAddress, commandLine.getOptionValue("k"));

if (commandLine.hasOption("m")) {
config.setMTU(((Number) commandLine.getParsedOptionValue("m")).intValue());
}
if (commandLine.hasOption("l")) {
config.setMbpsLimit(((Number) commandLine.getParsedOptionValue("l")).intValue());
config = new ProxyServerConfig(bindAddress, commandLine.getOptionValue("k"));
} else {
config = originalConfig;
if (commandLine.hasOption("a")) {
config.setBindAddress(new InetSocketAddress(InetAddress.getByName(commandLine.getOptionValue("a")), config.getBindAddress().getPort()));
}
if (commandLine.hasOption("w")) {
config.setWelcomeMessage(commandLine.getOptionValue("w"));
if (commandLine.hasOption("p")) {
config.setBindAddress(new InetSocketAddress(config.getBindAddress().getAddress(), ((Number) commandLine.getParsedOptionValue("p")).intValue()));
}
}

if (commandLine.hasOption("web-panel")) {
config.setWebPanelEnabled(true);
}
if (commandLine.hasOption("web-panel-public")) {
config.setWebPanelEnabled(true);
config.setWebPanelBind(new InetSocketAddress(DragoniteGlobalConstants.WEB_PANEL_PORT));
}
if (commandLine.hasOption("window-size-multiplier")) {
config.setWindowMultiplier(((Number) commandLine.getParsedOptionValue("window-size-multiplier")).intValue());
}
if (commandLine.hasOption("dscp")) {
config.setTrafficClass(UnitConverter.DSCPtoTrafficClass(((Number) commandLine.getParsedOptionValue("dscp")).intValue()));
}
if (commandLine.hasOption("allow-loopback")) {
config.setAllowLoopback(true);
}
return config;
} else {
Logger.error("Missing required argument(s): -k");
if (commandLine.hasOption("m")) {
config.setMTU(((Number) commandLine.getParsedOptionValue("m")).intValue());
}
if (commandLine.hasOption("l")) {
config.setMbpsLimit(((Number) commandLine.getParsedOptionValue("l")).intValue());
}
if (commandLine.hasOption("w")) {
config.setWelcomeMessage(commandLine.getOptionValue("w"));
}

if (commandLine.hasOption("web-panel")) {
config.setWebPanelEnabled(true);
}
if (commandLine.hasOption("web-panel-public")) {
config.setWebPanelEnabled(true);
config.setWebPanelBind(new InetSocketAddress(DragoniteGlobalConstants.WEB_PANEL_PORT));
}
if (commandLine.hasOption("window-size-multiplier")) {
config.setWindowMultiplier(((Number) commandLine.getParsedOptionValue("window-size-multiplier")).intValue());
}
if (commandLine.hasOption("dscp")) {
config.setTrafficClass(UnitConverter.DSCPtoTrafficClass(((Number) commandLine.getParsedOptionValue("dscp")).intValue()));
}
if (commandLine.hasOption("allow-loopback")) {
config.setAllowLoopback(true);
}
return config;
} catch (final ParseException | IllegalArgumentException e) {
Logger.error(e, "Incorrect value");
} catch (final UnknownHostException e) {
Expand All @@ -411,45 +423,70 @@ private static ProxyServerConfig serverConfigFromCommandline(final CommandLine c
return null;
}

private static ProxyClientConfig clientConfigFromCommandline(final CommandLine commandLine) {
private static ProxyClientConfig clientConfigFromCommandline(final CommandLine commandLine, final ProxyClientConfig originalConfig) {
try {
if (commandLine.hasOption("a") && commandLine.hasOption("d") && commandLine.hasOption("u") && commandLine.hasOption("k")) {
final ProxyClientConfig config = new ProxyClientConfig(new InetSocketAddress(InetAddress.getByName(commandLine.getOptionValue("a")),
if ((!(commandLine.hasOption("a") && commandLine.hasOption("d") && commandLine.hasOption("u") && commandLine.hasOption("k"))) && originalConfig == null) {
Logger.error("Missing required argument(s): -a / -k / -d / -u");
return null;
}

final ProxyClientConfig config;
if (originalConfig == null) {
config = new ProxyClientConfig(new InetSocketAddress(InetAddress.getByName(commandLine.getOptionValue("a")),
commandLine.hasOption("p") ? ((Number) commandLine.getParsedOptionValue("p")).intValue() : ProxyGlobalConstants.DEFAULT_SERVER_PORT),
(commandLine.hasOption("x") ? ((Number) commandLine.getParsedOptionValue("x")).intValue() : ProxyGlobalConstants.SOCKS5_PORT),
commandLine.getOptionValue("k"),
((Number) commandLine.getParsedOptionValue("d")).intValue(),
((Number) commandLine.getParsedOptionValue("u")).intValue()
);
if (commandLine.hasOption("m")) {
config.setMTU(((Number) commandLine.getParsedOptionValue("m")).intValue());
} else {
config = originalConfig;
if (commandLine.hasOption("a")) {
config.setRemoteAddress(new InetSocketAddress(InetAddress.getByName(commandLine.getOptionValue("a")), config.getRemoteAddress().getPort()));
}

if (commandLine.hasOption("web-panel")) {
config.setWebPanelEnabled(true);
if (commandLine.hasOption("p")) {
config.setRemoteAddress(new InetSocketAddress(config.getRemoteAddress().getAddress(), ((Number) commandLine.getParsedOptionValue("p")).intValue()));
}
if (commandLine.hasOption("x")) {
config.setSocks5port(((Number) commandLine.getParsedOptionValue("x")).intValue());
}
if (commandLine.hasOption("web-panel-public")) {
config.setWebPanelEnabled(true);
config.setWebPanelBind(new InetSocketAddress(DragoniteGlobalConstants.WEB_PANEL_PORT));
if (commandLine.hasOption("k")) {
config.setPassword(commandLine.getOptionValue("k"));
}
if (commandLine.hasOption("window-size-multiplier")) {
config.setWindowMultiplier(((Number) commandLine.getParsedOptionValue("window-size-multiplier")).intValue());
if (commandLine.hasOption("d")) {
config.setDownMbps(((Number) commandLine.getParsedOptionValue("d")).intValue());
}
if (commandLine.hasOption("dscp")) {
config.setTrafficClass(UnitConverter.DSCPtoTrafficClass(((Number) commandLine.getParsedOptionValue("dscp")).intValue()));
if (commandLine.hasOption("u")) {
config.setUpMbps(((Number) commandLine.getParsedOptionValue("u")).intValue());
}
}

if (commandLine.hasOption("r")) {
try {
config.setAcl(ACLFileParser.parse(FileUtils.pathToReader(commandLine.getOptionValue("r"))));
} catch (IOException | ACLException e) {
Logger.error(e, "Failed to parse ACL file");
}
if (commandLine.hasOption("m")) {
config.setMTU(((Number) commandLine.getParsedOptionValue("m")).intValue());
}

if (commandLine.hasOption("web-panel")) {
config.setWebPanelEnabled(true);
}
if (commandLine.hasOption("web-panel-public")) {
config.setWebPanelEnabled(true);
config.setWebPanelBind(new InetSocketAddress(DragoniteGlobalConstants.WEB_PANEL_PORT));
}
if (commandLine.hasOption("window-size-multiplier")) {
config.setWindowMultiplier(((Number) commandLine.getParsedOptionValue("window-size-multiplier")).intValue());
}
if (commandLine.hasOption("dscp")) {
config.setTrafficClass(UnitConverter.DSCPtoTrafficClass(((Number) commandLine.getParsedOptionValue("dscp")).intValue()));
}

if (commandLine.hasOption("r")) {
try {
config.setAcl(ACLFileParser.parse(FileUtils.pathToReader(commandLine.getOptionValue("r"))));
} catch (IOException | ACLException e) {
Logger.error(e, "Failed to parse ACL file");
}
return config;
} else {
Logger.error("Missing required argument(s): -a / -k / -d / -u");
}
return config;
} catch (final ParseException | IllegalArgumentException e) {
Logger.error(e, "Incorrect value");
} catch (final UnknownHostException e) {
Expand Down

0 comments on commit 21b4537

Please sign in to comment.