parse_cl.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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[] = {{"noStun", no_argument, NULL, 'n'},
  39. {"stunServer", required_argument, NULL, 's'},
  40. {"stunPort", required_argument, NULL, 't'},
  41. {"webSocketServer", required_argument, NULL, 'w'},
  42. {"webSocketPort", required_argument, NULL, 'x'},
  43. {"durationInSec", required_argument, NULL, 'd'},
  44. {"noSend", no_argument, NULL, 'o'},
  45. {"enableThroughputSet", no_argument, NULL, 'p'},
  46. {"throughtputSetAsKB", required_argument, NULL, 'r'},
  47. {"bufferSize", required_argument, NULL, 'b'},
  48. {"dataChannelCount", required_argument, NULL, 'c'},
  49. {"help", no_argument, NULL, 'h'},
  50. {NULL, 0, NULL, 0}};
  51. _program_name += argv[0];
  52. /* default values */
  53. _n = false;
  54. _s = "stun.l.google.com";
  55. _t = 19302;
  56. _w = "localhost";
  57. _x = 8000;
  58. _h = false;
  59. _d = 300;
  60. _o = false;
  61. _p = false;
  62. _r = 300;
  63. _b = 0;
  64. _c = 1;
  65. optind = 0;
  66. while ((c = getopt_long(argc, argv, "s:t:w:x:d:r:b:c:enhvop", long_options, &optind)) != -1) {
  67. switch (c) {
  68. case 'n':
  69. _n = true;
  70. break;
  71. case 's':
  72. _s = optarg;
  73. break;
  74. case 't':
  75. _t = atoi(optarg);
  76. if (_t < 0) {
  77. std::string err;
  78. err += "parameter range error: t must be >= 0";
  79. throw(std::range_error(err));
  80. }
  81. if (_t > 65535) {
  82. std::string err;
  83. err += "parameter range error: t must be <= 65535";
  84. throw(std::range_error(err));
  85. }
  86. break;
  87. case 'w':
  88. _w = optarg;
  89. break;
  90. case 'x':
  91. _x = atoi(optarg);
  92. if (_x < 0) {
  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. std::string err;
  99. err += "parameter range error: x must be <= 65535";
  100. throw(std::range_error(err));
  101. }
  102. break;
  103. case 'd':
  104. _d = atoi(optarg);
  105. if (_d < 0) {
  106. std::string err;
  107. err += "parameter range error: d must be >= 0";
  108. throw(std::range_error(err));
  109. }
  110. break;
  111. case 'o':
  112. _o = true;
  113. break;
  114. case 'b':
  115. _b = atoi(optarg);
  116. if (_b < 0) {
  117. std::string err;
  118. err += "parameter range error: b must be >= 0";
  119. throw(std::range_error(err));
  120. }
  121. break;
  122. case 'p':
  123. _p = true;
  124. break;
  125. case 'r':
  126. _r = atoi(optarg);
  127. if (_r <= 0) {
  128. std::string err;
  129. err += "parameter range error: r must be > 0";
  130. throw(std::range_error(err));
  131. }
  132. break;
  133. case 'c':
  134. _c = atoi(optarg);
  135. if (_c <= 0) {
  136. std::string err;
  137. err += "parameter range error: c must be > 0";
  138. throw(std::range_error(err));
  139. }
  140. break;
  141. case 'h':
  142. _h = true;
  143. this->usage(EXIT_SUCCESS);
  144. break;
  145. default:
  146. this->usage(EXIT_FAILURE);
  147. }
  148. } /* while */
  149. _optind = optind;
  150. }
  151. /*----------------------------------------------------------------------------
  152. **
  153. ** Cmdline::usage () and version()
  154. **
  155. ** Print out usage (or version) information, then exit.
  156. **
  157. **--------------------------------------------------------------------------*/
  158. void Cmdline::usage(int status) {
  159. if (status != EXIT_SUCCESS)
  160. std::cerr << "Try `" << _program_name << " --help' for more information.\n";
  161. else {
  162. std::cout << "\
  163. usage: " << _program_name
  164. << " [ -enstwxdobprhv ] \n\
  165. libdatachannel client implementing WebRTC Data Channels with WebSocket signaling\n\
  166. [ -n ] [ --noStun ] (type=FLAG)\n\
  167. Do NOT use a stun server (overrides -s and -t).\n\
  168. [ -s ] [ --stunServer ] (type=STRING, default=stun.l.google.com)\n\
  169. STUN server URL or IP address.\n\
  170. [ -t ] [ --stunPort ] (type=INTEGER, range=0...65535, default=19302)\n\
  171. STUN server port.\n\
  172. [ -w ] [ --webSocketServer ] (type=STRING, default=localhost)\n\
  173. Web socket server URL or IP address.\n\
  174. [ -x ] [ --webSocketPort ] (type=INTEGER, range=0...65535, default=8000)\n\
  175. Web socket server port.\n\
  176. [ -d ] [ --durationInSec ] (type=INTEGER, range>=0...INT32_MAX, 0:infinite(INT32_MAX), Valid only for offering client, default=300)\n\
  177. Benchmark duration in seconds.\n\
  178. [ -o ] [ --noSend ] (type=FLAG)\n\
  179. Do NOT send message (Only Receive, for one-way testing purposes).\n\
  180. [ -b ] [ --bufferSize ] (type=INTEGER, range>0...INT_MAX, default=0)\n\
  181. Set internal buffer size .\n\
  182. [ -p ] [ --enableThroughputSet ] (type=FLAG)\n\
  183. Send a constant data per second (KB). See throughtputSetAsKB params.\n\
  184. [ -r ] [ --throughtputSetAsKB ] (type=INTEGER, range>0...INT_MAX, default=300)\n\
  185. Send constant data per second (KB).\n\
  186. [ -c ] [ --dataChannelCount ] (type=INTEGER, range>0...INT_MAX, default=1)\n\
  187. Dat Channel count to create.\n\
  188. [ -h ] [ --help ] (type=FLAG)\n\
  189. Display this help and exit.\n";
  190. }
  191. exit(status);
  192. }