parse_cl.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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. #define STATIC_GETOPT
  22. #include "getopt.h"
  23. #else
  24. #include <getopt.h>
  25. #endif
  26. #include "parse_cl.h"
  27. /*----------------------------------------------------------------------------
  28. **
  29. ** Cmdline::Cmdline ()
  30. **
  31. ** Constructor method.
  32. **
  33. **--------------------------------------------------------------------------*/
  34. Cmdline::Cmdline (int argc, char *argv[]) // ISO C++17 not allowed: throw (std::string )
  35. {
  36. extern char *optarg;
  37. extern int optind;
  38. int c;
  39. static struct option long_options[] =
  40. {
  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. {"help", no_argument, NULL, 'h'},
  46. {"version", no_argument, NULL, 'v'},
  47. {NULL, 0, NULL, 0}
  48. };
  49. _program_name += argv[0];
  50. /* default values */
  51. _s = "stun.l.google.com";
  52. _t = 19302;
  53. _w = "localhost";
  54. _x = 8000;
  55. _e = false;
  56. _h = false;
  57. _v = false;
  58. optind = 0;
  59. while ((c = getopt_long (argc, argv, "s:t:w:x:ehv", long_options, &optind)) != - 1)
  60. {
  61. switch (c)
  62. {
  63. case 's':
  64. _s = optarg;
  65. break;
  66. case 't':
  67. _t = atoi (optarg);
  68. if (_t < 0)
  69. {
  70. std::string err;
  71. err += "parameter range error: t must be >= 0";
  72. throw (std::range_error(err));
  73. }
  74. if (_t > 65535)
  75. {
  76. std::string err;
  77. err += "parameter range error: t must be <= 65535";
  78. throw (std::range_error(err));
  79. }
  80. break;
  81. case 'w':
  82. _w = optarg;
  83. break;
  84. case 'x':
  85. _x = atoi (optarg);
  86. if (_x < 0)
  87. {
  88. std::string err;
  89. err += "parameter range error: x must be >= 0";
  90. throw (std::range_error(err));
  91. }
  92. if (_x > 65535)
  93. {
  94. std::string err;
  95. err += "parameter range error: x must be <= 65535";
  96. throw (std::range_error(err));
  97. }
  98. break;
  99. case 'e':
  100. _e = true;
  101. break;
  102. case 'h':
  103. _h = true;
  104. this->usage (EXIT_SUCCESS);
  105. break;
  106. case 'v':
  107. _v = true;
  108. this->version (EXIT_SUCCESS);
  109. break;
  110. default:
  111. this->usage (EXIT_FAILURE);
  112. }
  113. } /* while */
  114. _optind = optind;
  115. }
  116. /*----------------------------------------------------------------------------
  117. **
  118. ** Cmdline::usage () and version()
  119. **
  120. ** Print out usage (or version) information, then exit.
  121. **
  122. **--------------------------------------------------------------------------*/
  123. void Cmdline::usage (int status)
  124. {
  125. if (status != EXIT_SUCCESS)
  126. std::cerr << "Try `" << _program_name << " --help' for more information.\n";
  127. else
  128. {
  129. std::cout << "\
  130. usage: " << _program_name << " [ -estwxhv ] \n\
  131. libdatachannel client implementing WebRTC Data Channels with WebSocket signaling\n\
  132. [ -e ] [ --echo ] (type=FLAG)\n\
  133. Echo data channel messages back to sender rather than putting to stdout.\n\
  134. [ -s ] [ --stunServer ] (type=STRING, default=stun.l.google.com)\n\
  135. Stun server URL or IP address.\n\
  136. [ -t ] [ --stunPort ] (type=INTEGER, range=0...65535, default=19302)\n\
  137. Stun server port.\n\
  138. [ -w ] [ --webSocketServer ] (type=STRING, default=localhost)\n\
  139. Web socket server URL or IP address.\n\
  140. [ -x ] [ --webSocketPort ] (type=INTEGER, range=0...65535, default=8000)\n\
  141. Web socket server port.\n\
  142. [ -h ] [ --help ] (type=FLAG)\n\
  143. Display this help and exit.\n\
  144. [ -v ] [ --version ] (type=FLAG)\n\
  145. Output version information and exit.\n";
  146. }
  147. exit (status);
  148. }
  149. void Cmdline::version (int status)
  150. {
  151. std::cout << _program_name << " v0.5\n";
  152. exit (status);
  153. }