mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
DTLS: Use bio callback to get fragment packet. v5.0.156, v6.0.47 (#3565)
1. The MTU is effective, with the certificate being split into two DTLS records to comply with the limit. 2. The issue occurs when using BIO_get_mem_data, which retrieves all DTLS packets in a single call, even though each is smaller than the MTU. 3. An alternative callback is available for using BIO_new with BIO_s_mem. 4. Improvements to the MTU setting were made, including adding the DTLS_set_link_mtu function and removing the SSL_set_max_send_fragment function. 5. The handshake process was refined, calling SSL_do_handshake only after ICE completion, and using SSL_read to handle handshake messages. 6. The session close code was improved to enable immediate closure upon receiving an SSL CloseNotify or fatal message. ------ Co-authored-by: chundonglinlin <chundonglinlin@163.com>
This commit is contained in:
parent
27f9db9762
commit
104cf14d68
6 changed files with 156 additions and 263 deletions
|
@ -2240,11 +2240,12 @@ srs_error_t SrsRtcConnection::on_dtls_alert(std::string type, std::string desc)
|
|||
srs_error_t err = srs_success;
|
||||
|
||||
// CN(Close Notify) is sent when client close the PeerConnection.
|
||||
if (type == "warning" && desc == "CN") {
|
||||
// fatal, IP(Illegal Parameter) is sent when DTLS failed.
|
||||
if (type == "fatal" || (type == "warning" && desc == "CN")) {
|
||||
SrsContextRestore(_srs_context->get_id());
|
||||
switch_to_context();
|
||||
|
||||
srs_trace("RTC: session destroy by DTLS alert, username=%s", username_.c_str());
|
||||
srs_trace("RTC: session destroy by DTLS alert(%s %s), username=%s", type.c_str(), desc.c_str(), username_.c_str());
|
||||
_srs_rtc_manager->remove(this);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue