From d01ab07f78f84d7d30c5788416c8d4ca0e1f74bf Mon Sep 17 00:00:00 2001
From: Guus Sliepen <guus@tinc-vpn.org>
Date: Fri, 30 Aug 2013 14:23:02 +0200
Subject: [PATCH] Allow testing the replay window with sptps_test.

---
 src/sptps_test.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/sptps_test.c b/src/sptps_test.c
index 6f6be4b0..98da73ef 100644
--- a/src/sptps_test.c
+++ b/src/sptps_test.c
@@ -54,6 +54,7 @@ static bool receive_record(void *handle, uint8_t type, const char *data, uint16_
 static struct option const long_options[] = {
 	{"datagram", no_argument, NULL, 'd'},
 	{"packet-loss", required_argument, NULL, 'l'},
+	{"replay-window", required_argument, NULL, 'r'},
 	{"help", no_argument, NULL, 1},
 	{NULL, 0, NULL, 0}
 };
@@ -65,6 +66,7 @@ static void usage() {
 	fprintf(stderr, "Valid options are:\n"
 			"  -d, --datagram          Enable datagram mode.\n"
 			"  -l, --packet-loss RATE  Fake packet loss of RATE percent.\n"
+			"  -r, --replay-window N   Set replay window to N bytes.\n"
 			"\n");
 	fprintf(stderr, "Report bugs to tinc@tinc-vpn.org.\n");
 }
@@ -77,7 +79,7 @@ int main(int argc, char *argv[]) {
 	int r;
 	int option_index = 0;
 
-	while((r = getopt_long(argc, argv, "dl:", long_options, &option_index)) != EOF) {
+	while((r = getopt_long(argc, argv, "dl:r:", long_options, &option_index)) != EOF) {
 		switch (r) {
 			case 0:   /* long option */
 				break;
@@ -90,6 +92,10 @@ int main(int argc, char *argv[]) {
 				packetloss = atoi(optarg);
 				break;
 
+			case 'r': /* replay window size */
+				sptps_replaywin = atoi(optarg);
+				break;
+
 			case '?': /* wrong options */
 				usage();
 				return 1;
@@ -228,6 +234,8 @@ int main(int argc, char *argv[]) {
 			}
 			if(len == 0)
 				break;
+			if(buf[0] == '#')
+				s.outseqno = atoi(buf + 1);
 			if(buf[0] == '^')
 				sptps_send_record(&s, SPTPS_HANDSHAKE, NULL, 0);
 			else if(buf[0] == '$') {
@@ -256,7 +264,7 @@ int main(int argc, char *argv[]) {
 				fprintf(stderr, "Dropped.\n");
 				continue;
 			}
-			if(!sptps_receive_data(&s, buf, len))
+			if(!sptps_receive_data(&s, buf, len) && !datagram)
 				return 1;
 		}
 	}
-- 
2.39.5