tools/hexnet: Put the new usage generator to use and remove prefixes for IPv4 and IPv6
The prefixes were part of a planned feature but since a connection is either IPv4 or IPv6 but never both, it would have been completely useless to specify which to use. Instead, only TCP and UDP will need to be specified.BodgeMaster-unfinished
parent
a1f16e6f6b
commit
8048dc8891
|
@ -149,17 +149,19 @@ int main(int argc, char* argv[]){
|
||||||
flags.push_back(CLI::Flag('u', "udp", "use UDP, defaults to both when -t and -u are omitted, otherwise uses what is specified"));
|
flags.push_back(CLI::Flag('u', "udp", "use UDP, defaults to both when -t and -u are omitted, otherwise uses what is specified"));
|
||||||
flags.push_back(CLI::Flag('n', "no-color", "disable coloring the output (intended for terminals that don't work well with color escape sequences)"));
|
flags.push_back(CLI::Flag('n', "no-color", "disable coloring the output (intended for terminals that don't work well with color escape sequences)"));
|
||||||
flags.push_back(CLI::Flag('e', "echo-back", "echo input back to stdout"));
|
flags.push_back(CLI::Flag('e', "echo-back", "echo input back to stdout"));
|
||||||
|
flags.push_back(CLI::Flag('h', "help", "print this information and exit"));
|
||||||
|
flags.push_back(CLI::Flag('l', "license", "print license information and exit"));
|
||||||
|
|
||||||
std::vector<CLI::Option> options;
|
std::vector<CLI::Option> options;
|
||||||
options.push_back(CLI::Option('c', "connect", "HOST", "connect to HOST, listen for incoming connections if omitted"));
|
options.push_back(CLI::Option('c', "connect", "HOST", "connect to HOST, listen for incoming connections if omitted"));
|
||||||
options.push_back(CLI::Option('m', "mtu-optimize", "MTU", "Optimize for a specific maximum transfer unit by reading MTU bytes at a time."));
|
options.push_back(CLI::Option('m', "mtu-optimize", "MTU", "Optimize for a specific maximum transfer unit by reading MTU bytes at a time."));
|
||||||
options.push_back(CLI::Option(
|
options.push_back(CLI::Option(
|
||||||
'p', "print-prefixes", "TCPv4i:UDPv4i:TCPv6i:UDPv6i:TCPv4o:UDPv4o:TCPv6o:UDPv6o",
|
'p', "print-prefixes", "TCPin:UDPin:TCPout:UDPout",
|
||||||
"override default prefixes for output (defaults to spaces + coloring the output or \"t4:u4:t6:u6:T4:U4:T6:U6\" in no-color mode)"
|
"override default prefixes for output (defaults to spaces + coloring the output or \"t:u:T:U\" in no-color mode)"
|
||||||
));
|
));
|
||||||
options.push_back(CLI::Option(
|
options.push_back(CLI::Option(
|
||||||
'i', "input-prefixes", "TCP:UDP:IPv4:IPv6",
|
'i', "input-prefixes", "TCP:UDP",
|
||||||
"override default prefixes for input (defaults to \"t:u:4:6\")"
|
"override default prefixes for input (defaults to \"t:u\")"
|
||||||
));
|
));
|
||||||
|
|
||||||
std::vector<CLI::Argument> arguments;
|
std::vector<CLI::Argument> arguments;
|
||||||
|
@ -167,25 +169,51 @@ int main(int argc, char* argv[]){
|
||||||
|
|
||||||
CLI::ArgumentsParser cliParser = CLI::ArgumentsParser(argc, argv, flags, options, arguments, "Arbitrary tcp/udp connections in hex format.");
|
CLI::ArgumentsParser cliParser = CLI::ArgumentsParser(argc, argv, flags, options, arguments, "Arbitrary tcp/udp connections in hex format.");
|
||||||
|
|
||||||
|
if (cliParser.getFlag("help").value){
|
||||||
|
std::cout << cliParser.getUsage() << std::endl;
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
if (cliParser.getFlag("license").value){
|
||||||
|
std::cout
|
||||||
|
<< "Copyright 2022, FOSS-VG Developers and Contributers\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "Hexnet is part of the FOSS-VG development tool suite.\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "This program is free software: you can redistribute it and/or modify it\n"
|
||||||
|
<< "under the terms of the GNU Affero General Public License as published\n"
|
||||||
|
<< "by the Free Software Foundation, version 3.\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "This program is distributed in the hope that it will be useful,\n"
|
||||||
|
<< "but WITHOUT ANY WARRANTY; without even the implied\n"
|
||||||
|
<< "warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
|
||||||
|
<< "See the GNU Affero General Public License for more details.\n"
|
||||||
|
<< "\n"
|
||||||
|
<< "You should have received a copy of the GNU Affero General Public License\n"
|
||||||
|
<< "version 3 along with this program.\n"
|
||||||
|
<< "If not, see https://www.gnu.org/licenses/agpl-3.0.en.html"
|
||||||
|
<< std::endl;
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (cliParser.wrongUsage) {
|
if (cliParser.wrongUsage) {
|
||||||
//TODO: spit out usage information generated by the parser
|
std::cout << cliParser.getUsage() << std::endl;
|
||||||
return EXIT_USAGE;
|
return EXIT_USAGE;
|
||||||
}
|
}
|
||||||
if (cliParser.getFlag('4').value || cliParser.getFlag('6').value) {
|
if (cliParser.getFlag("ipv4").value || cliParser.getFlag("ipv6").value) {
|
||||||
ipv4 = cliParser.getFlag('4').value;
|
ipv4 = cliParser.getFlag("ipv4").value;
|
||||||
ipv6 = cliParser.getFlag('6').value;
|
ipv6 = cliParser.getFlag("ipv4").value;
|
||||||
}
|
}
|
||||||
if (cliParser.getFlag('t').value || cliParser.getFlag('u').value) {
|
if (cliParser.getFlag("tcp").value || cliParser.getFlag("udp").value) {
|
||||||
tcp = cliParser.getFlag('t').value;
|
tcp = cliParser.getFlag("tcp").value;
|
||||||
udp = cliParser.getFlag('u').value;
|
udp = cliParser.getFlag("udp").value;
|
||||||
}
|
}
|
||||||
if (cliParser.getOption('c').errorCode == ErrorCodes::NOT_PRESENT) {
|
if (cliParser.getOption('c').errorCode == ErrorCodes::NOT_PRESENT) {
|
||||||
listenMode = true;
|
listenMode = true;
|
||||||
}
|
}
|
||||||
if (cliParser.getOption('m').errorCode == ErrorCodes::SUCCESS) {
|
if (cliParser.getOption("mtu-optimize").errorCode == ErrorCodes::SUCCESS) {
|
||||||
mtu = std::stol(cliParser.getOption('m').value);
|
mtu = std::stol(cliParser.getOption("mtu-optimize").value);
|
||||||
}
|
}
|
||||||
host = cliParser.getOption('c').value;
|
host = cliParser.getOption("connect").value;
|
||||||
//FIXME: use a function that returns a fixed-width data type instead,
|
//FIXME: use a function that returns a fixed-width data type instead,
|
||||||
// ensure that the given value is a valid port
|
// ensure that the given value is a valid port
|
||||||
port = (in_port_t) std::stoi(cliParser.getArgument(0).value);
|
port = (in_port_t) std::stoi(cliParser.getArgument(0).value);
|
||||||
|
|
Loading…
Reference in New Issue