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