mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
RTC: Limit the ARQ for DTLS
This commit is contained in:
parent
1ffea2bcc5
commit
036cc2a7a2
2 changed files with 135 additions and 2 deletions
|
@ -382,6 +382,138 @@ std::ostream& operator<< (std::ostream& stream, const DTLSServerFlowCase& c)
|
|||
return stream;
|
||||
}
|
||||
|
||||
VOID TEST(KernelRTCTest, DTLSARQLimitTest)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
// ClientHello lost, client retransmit the ClientHello.
|
||||
if (true) {
|
||||
MockDtlsCallback cio; SrsDtls client(&cio);
|
||||
MockDtlsCallback sio; SrsDtls server(&sio);
|
||||
MockBridgeDtlsIO b0(&cio, &server, NULL); MockBridgeDtlsIO b1(&sio, &client, NULL);
|
||||
HELPER_EXPECT_SUCCESS(client.initialize("active", "dtls1.0"));
|
||||
HELPER_EXPECT_SUCCESS(server.initialize("passive", "dtls1.0"));
|
||||
|
||||
// Use very short interval for utest.
|
||||
dynamic_cast<SrsDtlsClientImpl*>(client.impl)->arq_first = 1 * SRS_UTIME_MILLISECONDS;
|
||||
dynamic_cast<SrsDtlsClientImpl*>(client.impl)->arq_interval = 1 * SRS_UTIME_MILLISECONDS;
|
||||
|
||||
// Lost 10 packets, total packets should be 8(max to 8).
|
||||
// Note that only one server hello.
|
||||
cio.nn_client_hello_lost = 10;
|
||||
|
||||
HELPER_EXPECT_SUCCESS(client.start_active_handshake());
|
||||
mock_wait_dtls_io_done(10, 3);
|
||||
|
||||
EXPECT_TRUE(sio.r0 == srs_success);
|
||||
EXPECT_TRUE(cio.r0 == srs_success);
|
||||
|
||||
EXPECT_FALSE(cio.done);
|
||||
EXPECT_FALSE(sio.done);
|
||||
|
||||
EXPECT_EQ(8, cio.nn_client_hello);
|
||||
EXPECT_EQ(0, sio.nn_server_hello);
|
||||
EXPECT_EQ(0, cio.nn_certificate);
|
||||
EXPECT_EQ(0, sio.nn_new_session);
|
||||
EXPECT_EQ(0, sio.nn_change_cipher);
|
||||
}
|
||||
|
||||
// Certificate lost, client retransmit the Certificate.
|
||||
if (true) {
|
||||
MockDtlsCallback cio; SrsDtls client(&cio);
|
||||
MockDtlsCallback sio; SrsDtls server(&sio);
|
||||
MockBridgeDtlsIO b0(&cio, &server, NULL); MockBridgeDtlsIO b1(&sio, &client, NULL);
|
||||
HELPER_EXPECT_SUCCESS(client.initialize("active", "dtls1.0"));
|
||||
HELPER_EXPECT_SUCCESS(server.initialize("passive", "dtls1.0"));
|
||||
|
||||
// Use very short interval for utest.
|
||||
dynamic_cast<SrsDtlsClientImpl*>(client.impl)->arq_first = 1 * SRS_UTIME_MILLISECONDS;
|
||||
dynamic_cast<SrsDtlsClientImpl*>(client.impl)->arq_interval = 1 * SRS_UTIME_MILLISECONDS;
|
||||
|
||||
// Lost 10 packets, total packets should be 8(max to 8).
|
||||
// Note that only one server NewSessionTicket.
|
||||
cio.nn_certificate_lost = 10;
|
||||
|
||||
HELPER_EXPECT_SUCCESS(client.start_active_handshake());
|
||||
mock_wait_dtls_io_done(10, 3);
|
||||
|
||||
EXPECT_TRUE(sio.r0 == srs_success);
|
||||
EXPECT_TRUE(cio.r0 == srs_success);
|
||||
|
||||
EXPECT_FALSE(cio.done);
|
||||
EXPECT_FALSE(sio.done);
|
||||
|
||||
EXPECT_EQ(1, cio.nn_client_hello);
|
||||
EXPECT_EQ(1, sio.nn_server_hello);
|
||||
EXPECT_EQ(8, cio.nn_certificate);
|
||||
EXPECT_EQ(0, sio.nn_new_session);
|
||||
EXPECT_EQ(0, sio.nn_change_cipher);
|
||||
}
|
||||
|
||||
// ServerHello lost, client retransmit the ClientHello.
|
||||
if (true) {
|
||||
MockDtlsCallback cio; SrsDtls client(&cio);
|
||||
MockDtlsCallback sio; SrsDtls server(&sio);
|
||||
MockBridgeDtlsIO b0(&cio, &server, NULL); MockBridgeDtlsIO b1(&sio, &client, NULL);
|
||||
HELPER_EXPECT_SUCCESS(client.initialize("active", "dtls1.0"));
|
||||
HELPER_EXPECT_SUCCESS(server.initialize("passive", "dtls1.0"));
|
||||
|
||||
// Use very short interval for utest.
|
||||
dynamic_cast<SrsDtlsClientImpl*>(client.impl)->arq_first = 1 * SRS_UTIME_MILLISECONDS;
|
||||
dynamic_cast<SrsDtlsClientImpl*>(client.impl)->arq_interval = 1 * SRS_UTIME_MILLISECONDS;
|
||||
|
||||
// Lost 10 packets, total packets should be 8(max to 8).
|
||||
sio.nn_server_hello_lost = 10;
|
||||
|
||||
HELPER_EXPECT_SUCCESS(client.start_active_handshake());
|
||||
mock_wait_dtls_io_done(10, 3);
|
||||
|
||||
EXPECT_TRUE(sio.r0 == srs_success);
|
||||
EXPECT_TRUE(cio.r0 == srs_success);
|
||||
|
||||
EXPECT_FALSE(cio.done);
|
||||
EXPECT_FALSE(sio.done);
|
||||
|
||||
EXPECT_EQ(8, cio.nn_client_hello);
|
||||
EXPECT_EQ(8, sio.nn_server_hello);
|
||||
EXPECT_EQ(0, cio.nn_certificate);
|
||||
EXPECT_EQ(0, sio.nn_new_session);
|
||||
EXPECT_EQ(0, sio.nn_change_cipher);
|
||||
}
|
||||
|
||||
// NewSessionTicket lost, client retransmit the Certificate.
|
||||
if (true) {
|
||||
MockDtlsCallback cio; SrsDtls client(&cio);
|
||||
MockDtlsCallback sio; SrsDtls server(&sio);
|
||||
MockBridgeDtlsIO b0(&cio, &server, NULL); MockBridgeDtlsIO b1(&sio, &client, NULL);
|
||||
HELPER_EXPECT_SUCCESS(client.initialize("active", "dtls1.0"));
|
||||
HELPER_EXPECT_SUCCESS(server.initialize("passive", "dtls1.0"));
|
||||
|
||||
// Use very short interval for utest.
|
||||
dynamic_cast<SrsDtlsClientImpl*>(client.impl)->arq_first = 1 * SRS_UTIME_MILLISECONDS;
|
||||
dynamic_cast<SrsDtlsClientImpl*>(client.impl)->arq_interval = 1 * SRS_UTIME_MILLISECONDS;
|
||||
|
||||
// Lost 10 packets, total packets should be 8(max to 8).
|
||||
sio.nn_new_session_lost = 10;
|
||||
|
||||
HELPER_EXPECT_SUCCESS(client.start_active_handshake());
|
||||
mock_wait_dtls_io_done(10, 3);
|
||||
|
||||
EXPECT_TRUE(sio.r0 == srs_success);
|
||||
EXPECT_TRUE(cio.r0 == srs_success);
|
||||
|
||||
// Although the packet is lost, but it's done for server, and not done for client.
|
||||
EXPECT_FALSE(cio.done);
|
||||
EXPECT_TRUE(sio.done);
|
||||
|
||||
EXPECT_EQ(1, cio.nn_client_hello);
|
||||
EXPECT_EQ(1, sio.nn_server_hello);
|
||||
EXPECT_EQ(8, cio.nn_certificate);
|
||||
EXPECT_EQ(8, sio.nn_new_session);
|
||||
EXPECT_EQ(0, sio.nn_change_cipher);
|
||||
}
|
||||
}
|
||||
|
||||
VOID TEST(KernelRTCTest, DTLSClientARQTest)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue