| 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);}
 |