exit 77
fi
+./dtls-stress -full -shello 01234 -sfinished 01 -cfinished 01234 CCertificate CKeyExchange CCertificateVerify CChangeCipherSpec CFinished -d 6
+./dtls-stress -full -r -shello 42130 -sfinished 10 -cfinished 43210 SHello SKeyExchange SHelloDone CKeyExchange CChangeCipherSpec CFinished SChangeCipherSpec SCertificate SFinished
+
./dtls-stress -shello 021 -sfinished 01 -cfinished 012 SKeyExchange CKeyExchange CFinished
./dtls-stress -shello 012 -sfinished 10 -cfinished 210 SHello SKeyExchange SHelloDone
./dtls-stress -shello 012 -sfinished 01 -cfinished 021 SHello SKeyExchange SHelloDone
* -nb enable nonblocking operations on sessions
* -batch read test identifiers from stdin and run them
* -d increase debug level by one
+ * -r replay messages (very crude replay mechanism)
* -d <n> set debug level to <n>
* -die don't start new tests after the first detected failure
* -timeout <n> set handshake timeout to <n> seconds. Tests that don't make progress
int debug;
int nonblock;
+int replay;
int full;
int timeout_seconds;
int retransmit_milliseconds;
sizeof(state_permute_ClientFinishedFull));
}
+static int rbuffer[5*1024];
+unsigned rbuffer_size = 0;
+
static void filter_run_next(gnutls_transport_ptr_t fd,
const unsigned char *buffer, size_t len)
{
send((int) (intptr_t) fd, buffer, len, 0);
}
filter_current_idx--;
+
+ if (replay != 0) {
+ if (rbuffer_size == 0 && len < sizeof(rbuffer)) {
+ memcpy(rbuffer, buffer, len);
+ rbuffer_size = len;
+ } else if (rbuffer_size != 0) {
+ send((int) (intptr_t) fd, rbuffer, rbuffer_size, 0);
+ if (len < sizeof(rbuffer) && len > rbuffer_size) {
+ memcpy(rbuffer, buffer, len);
+ rbuffer_size = len;
+ }
+ }
+ }
}
// }}}
int arg;
nonblock = 0;
+ replay = 0;
debug = 0;
timeout_seconds = 120;
retransmit_milliseconds = 100;
}
} else if (strcmp("-nb", argv[arg]) == 0) {
nonblock = 1;
+ } else if (strcmp("-r", argv[arg]) == 0) {
+ replay = 1;
} else if (strcmp("-timeout", argv[arg]) == 0) {
char *end;
int val;