parse_cl.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /******************************************************************************
  2. **
  3. ** parse_cl.cpp
  4. **
  5. ** Thu Aug 6 19:42:25 2020
  6. ** Linux 5.4.0-42-generic (#46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020) x86_64
  7. ** cerik@Erik-VBox-Ubuntu (Erik Cota-Robles)
  8. **
  9. ** Copyright (c) 2020 Erik Cota-Robles
  10. **
  11. ** Definition of command line parser class
  12. **
  13. ** Automatically created by genparse v0.9.3
  14. **
  15. ** See http://genparse.sourceforge.net for details and updates
  16. **
  17. **
  18. ******************************************************************************/
  19. #include <stdlib.h>
  20. #if defined(_WIN32) || defined(WIN32)
  21. #include "getopt.h"
  22. #else
  23. #include <getopt.h>
  24. #endif
  25. #include "parse_cl.h"
  26. /*----------------------------------------------------------------------------
  27. **
  28. ** Cmdline::Cmdline ()
  29. **
  30. ** Constructor method.
  31. **
  32. **--------------------------------------------------------------------------*/
  33. Cmdline::Cmdline (int argc, char *argv[]) // ISO C++17 not allowed: throw (std::string )
  34. {
  35. extern char *optarg;
  36. extern int optind;
  37. int c;
  38. static struct option long_options[] =
  39. {
  40. {"noStun", no_argument, NULL, 'n'},
  41. {"stunServer", required_argument, NULL, 's'},
  42. {"stunPort", required_argument, NULL, 't'},
  43. {"webSocketServer", required_argument, NULL, 'w'},
  44. {"webSocketPort", required_argument, NULL, 'x'},
  45. {"durationInSec",required_argument,NULL,'d'},
  46. {"noSend", no_argument, NULL, 'o'},
  47. {"help", no_argument, NULL, 'h'},
  48. {NULL, 0, NULL, 0}
  49. };
  50. _program_name += argv[0];
  51. /* default values */
  52. _n = false;
  53. _s = "stun.l.google.com";
  54. _t = 19302;
  55. _w = "localhost";
  56. _x = 8000;
  57. _h = false;
  58. _d = 300;
  59. _o = false;
  60. optind = 0;
  61. while ((c = getopt_long (argc, argv, "s:t:w:x:d:enhvo", long_options, &optind)) != - 1)
  62. {
  63. switch (c)
  64. {
  65. case 'n':
  66. _n = true;
  67. break;
  68. case 's':
  69. _s = optarg;
  70. break;
  71. case 't':
  72. _t = atoi (optarg);
  73. if (_t < 0)
  74. {
  75. std::string err;
  76. err += "parameter range error: t must be >= 0";
  77. throw (std::range_error(err));
  78. }
  79. if (_t > 65535)
  80. {
  81. std::string err;
  82. err += "parameter range error: t must be <= 65535";
  83. throw (std::range_error(err));
  84. }
  85. break;
  86. case 'w':
  87. _w = optarg;
  88. break;
  89. case 'x':
  90. _x = atoi (optarg);
  91. if (_x < 0)
  92. {
  93. std::string err;
  94. err += "parameter range error: x must be >= 0";
  95. throw (std::range_error(err));
  96. }
  97. if (_x > 65535)
  98. {
  99. std::string err;
  100. err += "parameter range error: x must be <= 65535";
  101. throw (std::range_error(err));
  102. }
  103. break;
  104. case 'd':
  105. _d = atoi (optarg);
  106. if (_d < 0)
  107. {
  108. std::string err;
  109. err += "parameter range error: d must be >= 0";
  110. throw (std::range_error(err));
  111. }
  112. break;
  113. case 'o':
  114. _o = true;
  115. break;
  116. case 'h':
  117. _h = true;
  118. this->usage (EXIT_SUCCESS);
  119. break;
  120. default:
  121. this->usage (EXIT_FAILURE);
  122. }
  123. } /* while */
  124. _optind = optind;
  125. }
  126. /*----------------------------------------------------------------------------
  127. **
  128. ** Cmdline::usage () and version()
  129. **
  130. ** Print out usage (or version) information, then exit.
  131. **
  132. **--------------------------------------------------------------------------*/
  133. void Cmdline::usage (int status)
  134. {
  135. if (status != EXIT_SUCCESS)
  136. std::cerr << "Try `" << _program_name << " --help' for more information.\n";
  137. else
  138. {
  139. std::cout << "\
  140. usage: " << _program_name << " [ -enstwxhv ] \n\
  141. libdatachannel client implementing WebRTC Data Channels with WebSocket signaling\n\
  142. [ -n ] [ --noStun ] (type=FLAG)\n\
  143. Do NOT use a stun server (overrides -s and -t).\n\
  144. [ -s ] [ --stunServer ] (type=STRING, default=stun.l.google.com)\n\
  145. Stun server URL or IP address.\n\
  146. [ -t ] [ --stunPort ] (type=INTEGER, range=0...65535, default=19302)\n\
  147. Stun server port.\n\
  148. [ -w ] [ --webSocketServer ] (type=STRING, default=localhost)\n\
  149. Web socket server URL or IP address.\n\
  150. [ -x ] [ --webSocketPort ] (type=INTEGER, range=0...65535, default=8000)\n\
  151. Web socket server port.\n\
  152. [ -d ] [ --durationInSec ] (type=INTEGER, range>=0...INT32_MAX, 0:infinite(INT32_MAX), Valid only for offering client, default=300)\n\
  153. Benchmark duration in seconds.\n\
  154. [ -n ] [ --noSend ] (type=FLAG)\n\
  155. Do NOT send message (Only Receive, for one-way testing purposes).\n\
  156. [ -h ] [ --help ] (type=FLAG)\n\
  157. Display this help and exit.\n";
  158. }
  159. exit (status);
  160. }