Add an option to test datagram SPTPS with packet loss.
This commit is contained in:
parent
5da0ebd421
commit
d0aa0817d2
1 changed files with 60 additions and 6 deletions
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
|
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
#include "crypto.h"
|
#include "crypto.h"
|
||||||
#include "ecdsa.h"
|
#include "ecdsa.h"
|
||||||
#include "sptps.h"
|
#include "sptps.h"
|
||||||
|
@ -49,24 +51,72 @@ static bool receive_record(void *handle, uint8_t type, const char *data, uint16_
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
static struct option const long_options[] = {
|
||||||
bool initiator = false;
|
{"datagram", no_argument, NULL, 'd'},
|
||||||
bool datagram = false;
|
{"packet-loss", required_argument, NULL, 'l'},
|
||||||
|
{"help", no_argument, NULL, 1},
|
||||||
|
{NULL, 0, NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
if(argc > 1 && !strcmp(argv[1], "-d")) {
|
const char *program_name;
|
||||||
datagram = true;
|
|
||||||
argc--;
|
static void usage() {
|
||||||
argv++;
|
fprintf(stderr, "Usage: %s [options] my_ecdsa_key_file his_ecdsa_key_file [host] port\n\n", program_name);
|
||||||
|
fprintf(stderr, "Valid options are:\n"
|
||||||
|
" -d, --datagram Enable datagram mode.\n"
|
||||||
|
" -l, --packet-loss RATE Fake packet loss of RATE percent.\n"
|
||||||
|
"\n");
|
||||||
|
fprintf(stderr, "Report bugs to tinc@tinc-vpn.org.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(argc < 4) {
|
int main(int argc, char *argv[]) {
|
||||||
fprintf(stderr, "Usage: %s [-d] my_ecdsa_key_file his_ecdsa_key_file [host] port\n", argv[0]);
|
program_name = argv[0];
|
||||||
|
bool initiator = false;
|
||||||
|
bool datagram = false;
|
||||||
|
int packetloss = 0;
|
||||||
|
int r;
|
||||||
|
int option_index = 0;
|
||||||
|
|
||||||
|
while((r = getopt_long(argc, argv, "dl:", long_options, &option_index)) != EOF) {
|
||||||
|
switch (r) {
|
||||||
|
case 0: /* long option */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'd': /* datagram mode */
|
||||||
|
datagram = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'l': /* packet loss rate */
|
||||||
|
packetloss = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '?': /* wrong options */
|
||||||
|
usage();
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case 1: /* help */
|
||||||
|
usage();
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
argc -= optind - 1;
|
||||||
|
argv += optind - 1;
|
||||||
|
|
||||||
|
if(argc < 4 || argc > 5) {
|
||||||
|
fprintf(stderr, "Wrong number of arguments.\n");
|
||||||
|
usage();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(argc > 4)
|
if(argc > 4)
|
||||||
initiator = true;
|
initiator = true;
|
||||||
|
|
||||||
|
srand(time(NULL));
|
||||||
|
|
||||||
#ifdef HAVE_MINGW
|
#ifdef HAVE_MINGW
|
||||||
static struct WSAData wsa_state;
|
static struct WSAData wsa_state;
|
||||||
if(WSAStartup(MAKEWORD(2, 2), &wsa_state))
|
if(WSAStartup(MAKEWORD(2, 2), &wsa_state))
|
||||||
|
@ -202,6 +252,10 @@ int main(int argc, char *argv[]) {
|
||||||
char hex[len * 2 + 1];
|
char hex[len * 2 + 1];
|
||||||
bin2hex(buf, hex, len);
|
bin2hex(buf, hex, len);
|
||||||
fprintf(stderr, "Received %d bytes of data:\n%s\n", (int)len, hex);
|
fprintf(stderr, "Received %d bytes of data:\n%s\n", (int)len, hex);
|
||||||
|
if((rand() % 100) < packetloss) {
|
||||||
|
fprintf(stderr, "Dropped.\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if(!sptps_receive_data(&s, buf, len))
|
if(!sptps_receive_data(&s, buf, len))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue