123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- /******************************************************************************
- **
- ** parse_cl.cpp
- **
- ** Thu Aug 6 19:42:25 2020
- ** Linux 5.4.0-42-generic (#46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020) x86_64
- ** cerik@Erik-VBox-Ubuntu (Erik Cota-Robles)
- **
- ** Copyright (c) 2020 Erik Cota-Robles
- **
- ** Definition of command line parser class
- **
- ** Automatically created by genparse v0.9.3
- **
- ** See http://genparse.sourceforge.net for details and updates
- **
- **
- ******************************************************************************/
- #include <stdlib.h>
- #if defined(_WIN32) || defined(WIN32)
- #include "getopt.h"
- #else
- #include <getopt.h>
- #endif
- #include "parse_cl.h"
- /*----------------------------------------------------------------------------
- **
- ** Cmdline::Cmdline ()
- **
- ** Constructor method.
- **
- **--------------------------------------------------------------------------*/
- Cmdline::Cmdline(int argc, char *argv[]) // ISO C++17 not allowed: throw (std::string )
- {
- extern char *optarg;
- extern int optind;
- int c;
- static struct option long_options[] = {{"noStun", no_argument, NULL, 'n'},
- {"stunServer", required_argument, NULL, 's'},
- {"stunPort", required_argument, NULL, 't'},
- {"webSocketServer", required_argument, NULL, 'w'},
- {"webSocketPort", required_argument, NULL, 'x'},
- {"durationInSec", required_argument, NULL, 'd'},
- {"noSend", no_argument, NULL, 'o'},
- {"enableThroughputSet", no_argument, NULL, 'p'},
- {"throughtputSetAsKB", required_argument, NULL, 'r'},
- {"bufferSize", required_argument, NULL, 'b'},
- {"dataChannelCount", required_argument, NULL, 'c'},
- {"help", no_argument, NULL, 'h'},
- {NULL, 0, NULL, 0}};
- _program_name += argv[0];
- /* default values */
- _n = false;
- _s = "stun.l.google.com";
- _t = 19302;
- _w = "localhost";
- _x = 8000;
- _h = false;
- _d = 300;
- _o = false;
- _p = false;
- _r = 300;
- _b = 0;
- _c = 1;
- optind = 0;
- while ((c = getopt_long(argc, argv, "s:t:w:x:d:r:b:c:enhvop", long_options, &optind)) != -1) {
- switch (c) {
- case 'n':
- _n = true;
- break;
- case 's':
- _s = optarg;
- break;
- case 't':
- _t = atoi(optarg);
- if (_t < 0) {
- std::string err;
- err += "parameter range error: t must be >= 0";
- throw(std::range_error(err));
- }
- if (_t > 65535) {
- std::string err;
- err += "parameter range error: t must be <= 65535";
- throw(std::range_error(err));
- }
- break;
- case 'w':
- _w = optarg;
- break;
- case 'x':
- _x = atoi(optarg);
- if (_x < 0) {
- std::string err;
- err += "parameter range error: x must be >= 0";
- throw(std::range_error(err));
- }
- if (_x > 65535) {
- std::string err;
- err += "parameter range error: x must be <= 65535";
- throw(std::range_error(err));
- }
- break;
- case 'd':
- _d = atoi(optarg);
- if (_d < 0) {
- std::string err;
- err += "parameter range error: d must be >= 0";
- throw(std::range_error(err));
- }
- break;
- case 'o':
- _o = true;
- break;
- case 'b':
- _b = atoi(optarg);
- if (_b < 0) {
- std::string err;
- err += "parameter range error: b must be >= 0";
- throw(std::range_error(err));
- }
- break;
- case 'p':
- _p = true;
- break;
- case 'r':
- _r = atoi(optarg);
- if (_r <= 0) {
- std::string err;
- err += "parameter range error: r must be > 0";
- throw(std::range_error(err));
- }
- break;
- case 'c':
- _c = atoi(optarg);
- if (_c <= 0) {
- std::string err;
- err += "parameter range error: c must be > 0";
- throw(std::range_error(err));
- }
- break;
- case 'h':
- _h = true;
- this->usage(EXIT_SUCCESS);
- break;
- default:
- this->usage(EXIT_FAILURE);
- }
- } /* while */
- _optind = optind;
- }
- /*----------------------------------------------------------------------------
- **
- ** Cmdline::usage () and version()
- **
- ** Print out usage (or version) information, then exit.
- **
- **--------------------------------------------------------------------------*/
- void Cmdline::usage(int status) {
- if (status != EXIT_SUCCESS)
- std::cerr << "Try `" << _program_name << " --help' for more information.\n";
- else {
- std::cout << "\
- usage: " << _program_name
- << " [ -enstwxdobprhv ] \n\
- libdatachannel client implementing WebRTC Data Channels with WebSocket signaling\n\
- [ -n ] [ --noStun ] (type=FLAG)\n\
- Do NOT use a stun server (overrides -s and -t).\n\
- [ -s ] [ --stunServer ] (type=STRING, default=stun.l.google.com)\n\
- STUN server URL or IP address.\n\
- [ -t ] [ --stunPort ] (type=INTEGER, range=0...65535, default=19302)\n\
- STUN server port.\n\
- [ -w ] [ --webSocketServer ] (type=STRING, default=localhost)\n\
- Web socket server URL or IP address.\n\
- [ -x ] [ --webSocketPort ] (type=INTEGER, range=0...65535, default=8000)\n\
- Web socket server port.\n\
- [ -d ] [ --durationInSec ] (type=INTEGER, range>=0...INT32_MAX, 0:infinite(INT32_MAX), Valid only for offering client, default=300)\n\
- Benchmark duration in seconds.\n\
- [ -o ] [ --noSend ] (type=FLAG)\n\
- Do NOT send message (Only Receive, for one-way testing purposes).\n\
- [ -b ] [ --bufferSize ] (type=INTEGER, range>0...INT_MAX, default=0)\n\
- Set internal buffer size .\n\
- [ -p ] [ --enableThroughputSet ] (type=FLAG)\n\
- Send a constant data per second (KB). See throughtputSetAsKB params.\n\
- [ -r ] [ --throughtputSetAsKB ] (type=INTEGER, range>0...INT_MAX, default=300)\n\
- Send constant data per second (KB).\n\
- [ -c ] [ --dataChannelCount ] (type=INTEGER, range>0...INT_MAX, default=1)\n\
- Dat Channel count to create.\n\
- [ -h ] [ --help ] (type=FLAG)\n\
- Display this help and exit.\n";
- }
- exit(status);
- }
|