@@ -19,15 +19,6 @@ enum {
1919DEFAULT_HTTP_VERSION = 2
2020};
2121
22-
23- const char * options_sw_version (void ) {
24- #ifdef SW_VERSION
25- return SW_VERSION ;
26- #else
27- return "2023.10.10-atLeast" ; // update date sometimes, like 1-2 times a year
28- #endif
29- }
30-
3122void options_init (struct Options * opt ) {
3223 opt -> listen_addr = "127.0.0.1" ;
3324 opt -> listen_port = 5053 ;
@@ -53,7 +44,7 @@ void options_init(struct Options *opt) {
5344 opt -> flight_recorder_size = 0 ;
5445}
5546
56- int options_parse_args (struct Options * opt , int argc , char * * argv ) {
47+ enum OptionsParseResult options_parse_args (struct Options * opt , int argc , char * * argv ) {
5748 int c = 0 ;
5849 while ((c = getopt (argc , argv , "a:c:p:du:g:b:i:4r:e:t:l:vxqm:s:C:F:hV" )) != -1 ) {
5950 switch (c ) {
@@ -105,7 +96,7 @@ int options_parse_args(struct Options *opt, int argc, char **argv) {
10596 } else {
10697 printf ("HTTP version already set to: HTTP/%s\n" ,
10798 opt -> use_http_version == 1 ? "1.1" : "3" );
108- return -1 ;
99+ return OPR_OPTION_ERROR ;
109100 }
110101 break ;
111102 case 'm' :
@@ -120,38 +111,35 @@ int options_parse_args(struct Options *opt, int argc, char **argv) {
120111 case 'F' : // Flight recorder size
121112 opt -> flight_recorder_size = atoi (optarg );
122113 break ;
123- case '?' :
124- printf ("Unknown option '-%c'\n" , c );
125- // fallthrough
126114 case 'h' :
127- return -1 ;
115+ return OPR_HELP ;
128116 case 'V' : // version
129- printf ( "%s\n" , options_sw_version ()) ;
130- exit ( 0 );
117+ return OPR_VERSION ;
118+ case '?' :
131119 default :
132- printf ("Unknown state!" );
133- exit (EXIT_FAILURE );
120+ return OPR_PARSING_ERROR ;
134121 }
135122 }
123+
136124 if (opt -> user ) {
137125 struct passwd * p = getpwnam (opt -> user );
138126 if (!p || !p -> pw_uid ) {
139127 printf ("Username (%s) invalid.\n" , opt -> user );
140- return -1 ;
128+ return OPR_OPTION_ERROR ;
141129 }
142130 opt -> uid = p -> pw_uid ;
143131 }
144132 if (opt -> group ) {
145133 struct group * g = getgrnam (opt -> group );
146134 if (!g || !g -> gr_gid ) {
147135 printf ("Group (%s) invalid.\n" , opt -> group );
148- return -1 ;
136+ return OPR_OPTION_ERROR ;
149137 }
150138 opt -> gid = g -> gr_gid ;
151139 }
152140 if (opt -> dscp < 0 || opt -> dscp > 63 ) {
153141 printf ("DSCP code (%d) invalid:[0-63]\n" , opt -> dscp );
154- return -1 ;
142+ return OPR_OPTION_ERROR ;
155143 }
156144 opt -> dscp <<= 2 ;
157145 // Get noisy about bad security practices.
@@ -174,28 +162,28 @@ int options_parse_args(struct Options *opt, int argc, char **argv) {
174162 strncmp (opt -> resolver_url , "https://" , 8 ) != 0 ) {
175163 printf ("Resolver prefix (%s) must be a https:// address.\n" ,
176164 opt -> resolver_url );
177- return -1 ;
165+ return OPR_OPTION_ERROR ;
178166 }
179167 if (opt -> bootstrap_dns_polling_interval < 5 ||
180168 opt -> bootstrap_dns_polling_interval > 3600 ) {
181169 printf ("DNS servers polling interval must be between 5 and 3600.\n" );
182- return -1 ;
170+ return OPR_OPTION_ERROR ;
183171 }
184172 if (opt -> max_idle_time < 0 ||
185173 opt -> max_idle_time > 3600 ) {
186174 printf ("Maximum idle time must be between 0 and 3600.\n" );
187- return -1 ;
175+ return OPR_OPTION_ERROR ;
188176 }
189177 if (opt -> stats_interval < 0 || opt -> stats_interval > 3600 ) {
190178 printf ("Statistic interval must be between 0 and 3600.\n" );
191- return -1 ;
179+ return OPR_OPTION_ERROR ;
192180 }
193181 if (opt -> flight_recorder_size != 0 &&
194182 (opt -> flight_recorder_size < 100 || opt -> flight_recorder_size > 100000 )) {
195183 printf ("Flight recorder limit must be between 100 and 100000.\n" );
196- return -1 ;
184+ return OPR_OPTION_ERROR ;
197185 }
198- return 0 ;
186+ return OPR_SUCCESS ;
199187}
200188
201189void options_show_usage (int __attribute__((unused )) argc , char * * argv ) {
@@ -254,7 +242,7 @@ void options_show_usage(int __attribute__((unused)) argc, char **argv) {
254242 " in memory and dumping them on fatal error or on SIGUSR2 signal.\n"
255243 " (Default: %u, Disabled: 0, Min: 100, Max: 100000)\n" ,
256244 defaults .flight_recorder_size );
257- printf (" -V Print version and exit.\n" );
245+ printf (" -V Print versions and exit.\n" );
258246 printf (" -h Print help and exit.\n" );
259247 options_cleanup (& defaults );
260248}
0 commit comments