1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

RTC: Refine code

This commit is contained in:
winlin 2020-08-13 16:25:56 +08:00
parent 92b59e308c
commit 761c880e55
2 changed files with 13 additions and 10 deletions

View file

@ -259,7 +259,7 @@ SrsDtls::SrsDtls(ISrsDtlsCallback* cb)
version_ = SrsDtlsVersionAuto; version_ = SrsDtlsVersionAuto;
trd = NULL; trd = NULL;
client_state_ = SrsDtlsStateInit; state_ = SrsDtlsStateInit;
} }
SrsDtls::~SrsDtls() SrsDtls::~SrsDtls()
@ -409,8 +409,11 @@ srs_error_t SrsDtls::on_dtls(char* data, int nb_data)
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
// When got packet, always stop the ARQ. // When got packet, stop the ARQ if server in the first ARQ state SrsDtlsStateServerHello.
if (role_ == SrsDtlsRoleClient && client_state_ == SrsDtlsStateServerHello) { // @note But for ARQ state, we should never stop the ARQ, for example, we are in the second ARQ sate
// SrsDtlsStateServerDone, but we got previous late wrong packet ServeHello, which is not the expect
// packet SessionNewTicket, we should never stop the ARQ thread.
if (role_ == SrsDtlsRoleClient && state_ == SrsDtlsStateServerHello) {
stop_arq(); stop_arq();
} }

View file

@ -97,12 +97,12 @@ public:
// The state for DTLS client. // The state for DTLS client.
enum SrsDtlsState { enum SrsDtlsState {
SrsDtlsStateInit, SrsDtlsStateInit, // Start.
SrsDtlsStateClientHello, SrsDtlsStateClientHello, // Should start ARQ thread.
SrsDtlsStateServerHello, SrsDtlsStateServerHello, // We are in the first ARQ state.
SrsDtlsStateClientCertificate, SrsDtlsStateClientCertificate, // Should start ARQ thread again.
SrsDtlsStateServerDone, SrsDtlsStateServerDone, // We are in the second ARQ state.
SrsDtlsStateClientDone, SrsDtlsStateClientDone, // Done.
}; };
class SrsDtls : public ISrsCoroutineHandler class SrsDtls : public ISrsCoroutineHandler
@ -127,7 +127,7 @@ private:
// @note If passive(DTLS server), the ARQ is driven by DTLS client. // @note If passive(DTLS server), the ARQ is driven by DTLS client.
SrsCoroutine* trd; SrsCoroutine* trd;
// The DTLS-client state to drive the ARQ thread. // The DTLS-client state to drive the ARQ thread.
SrsDtlsState client_state_; SrsDtlsState state_;
// @remark: dtls_role_ default value is DTLS_SERVER. // @remark: dtls_role_ default value is DTLS_SERVER.
SrsDtlsRole role_; SrsDtlsRole role_;