[Client] Add option -N (number of requests)

New option to use in conjunction with -F, in order to stop after a given
number of requests.
This commit is contained in:
Matteo Cypriani 2012-08-29 12:20:34 +02:00
parent 60e32ac500
commit 5d94fe8cc4
1 changed files with 37 additions and 8 deletions

View File

@ -39,7 +39,7 @@
#define MAX_PKT_SIZE 1450u
/* Program arguments (getopt string) */
#define OPTIONS "DF::hi:I:l::n:p:s:t:V"
#define OPTIONS "DF::hi:I:l::n:N:p:s:t:V"
/* Function headers */
@ -74,6 +74,7 @@ struct {
uint_fast16_t nb_pkt ; // Number of packets to send
uint_fast16_t pkt_size ; // Size of the packet to send
int_fast32_t flood_delay ; // Time between two request transmissions
uint_fast16_t nb_requests ; // Number of requests to send
uint_fast16_t listening_port ;
// Calibration data:
owl_direction direction ;
@ -89,6 +90,7 @@ struct {
0, // nb_pkt
0, // pkt_size
-1, // flood_delay
0, // nb_requests
0, // listening_port
0, 0, 0, 0 // Calibration data
} ;
@ -110,6 +112,8 @@ int main(int argc, char *argv[])
{
struct sigaction action ; // Signal handler structure
int ret = 0 ;
// Number of requests we still have to transmit:
uint_fast16_t nb_requests_left = 1 ;
program_name = argv[0] ;
parse_command_line(argc, argv) ;
@ -132,11 +136,17 @@ int main(int argc, char *argv[])
create_socket() ;
send_request() ;
while (owl_run && options.flood_delay >= 0)
if (options.nb_requests)
nb_requests_left = options.nb_requests - 1 ;
while (owl_run && options.flood_delay >= 0 && nb_requests_left > 0)
{
owl_msleep(options.flood_delay) ;
if (owl_run) // owl_run can have been set to false during the sleep
send_request() ;
{
send_request() ;
if (options.nb_requests)
--nb_requests_left ;
}
}
close(sockfd) ;
@ -238,6 +248,9 @@ void parse_main_options(int argc, char **argv)
case 'n' :
options.nb_pkt = strtoul(optarg, NULL, 0) ;
break ;
case 'N' :
options.nb_requests = strtoul(optarg, NULL, 0) ;
break ;
case 'p' :
options.dest_port = strtoul(optarg, NULL, 0) ;
break ;
@ -386,15 +399,25 @@ void check_configuration()
}
}
else // Flood is unactivated
if (options.daemon)
{
{
if (options.nb_requests)
{
#ifdef DEBUG
fprintf(stderr, "Warning! The -N option can be used only along"
" with -F. Option -N ignored.\n") ;
#endif // DEBUG
options.nb_requests = 0 ;
}
if (options.daemon)
{
#ifdef DEBUG
fprintf(stderr, "Warning! It is useless to detach from"
" the foreground if the flood mode is not activated"
" Option -D ignored.\n") ;
#endif // DEBUG
options.daemon = owl_false ;
}
}
}
}
@ -409,6 +432,7 @@ void print_configuration()
"\tDelay (ms): %"PRIdFAST32"\n"
"\tNumber of packets: %"PRIuFAST16"\n"
"\tFlood delay (ms): %"PRIdFAST32"\n"
"\tNumber of requests: %"PRIuFAST16"\n"
"\tListening port: %"PRIuFAST16"\n"
"\tDirection: %"PRIu8"\n"
"\tX: %f\n"
@ -421,6 +445,7 @@ void print_configuration()
options.delay,
options.nb_pkt,
options.flood_delay,
options.nb_requests,
options.listening_port,
options.direction,
options.x,
@ -623,7 +648,8 @@ void print_usage()
"\n\t"
" [-n nb_packets]"
" [-s packet_size]"
" [-F [delay] [-D]]"
" [-F [delay] [-N nb_requests] [-D]]"
"\n\t"
" [-l [port]]\n"
"Calibration request:\n"
"\t%s"
@ -634,7 +660,8 @@ void print_usage()
"\n\t"
" [-n nb_packets]"
" [-s packet_size]"
" [-F [delay] [-D]]"
" [-F [delay] [-N nb_requests] [-D]]"
"\n\t"
" direction x y z\n"
"Options:\n"
@ -663,6 +690,8 @@ void print_usage()
"\t-F [delay]\t\"Flood mode\": loop indefinitely, sending a"
" new request\n\t\t\tevery <delay> milliseconds (default:"
" %d ms).\n"
"\t-N nb_requests\tWith -F, stop after <nb_requests> requests"
" transmitted\n\t\t\tinstead of looping indefinitely.\n"
"\t-D\t\tDaemon mode. Useful only in flood mode.\n"
"\t-l [port]\tWait for the computed position and display it."
" The\n\t\t\toptional argument <port> allows to specify the"