RTC: Refine error and log for DTLS

pull/1925/head
winlin 5 years ago
parent 51bf3707a9
commit ed95124743

@ -396,9 +396,6 @@ srs_error_t SrsDtls::do_handshake()
switch(ssl_err) { switch(ssl_err) {
case SSL_ERROR_NONE: { case SSL_ERROR_NONE: {
handshake_done = true; handshake_done = true;
if (((err = callback->on_dtls_handshake_done()) != srs_success)) {
return srs_error_wrap(err, "dtls done");
}
break; break;
} }
@ -413,16 +410,18 @@ srs_error_t SrsDtls::do_handshake()
default: { default: {
break; break;
} }
}
if (out_bio_len <= 0) {
return err;
} }
// Trace the detail of DTLS packet. // Trace the detail of DTLS packet.
trace((char*)out_bio_data, out_bio_len, false); trace((uint8_t*)out_bio_data, out_bio_len, false);
if ((err = callback->write_dtls_data(out_bio_data, out_bio_len)) != srs_success) { if (handshake_done) {
if (((err = callback->on_dtls_handshake_done()) != srs_success)) {
return srs_error_wrap(err, "dtls done");
}
}
if (out_bio_len > 0 && (err = callback->write_dtls_data(out_bio_data, out_bio_len)) != srs_success) {
return srs_error_wrap(err, "dtls send size=%u, data=[%s]", out_bio_len, return srs_error_wrap(err, "dtls send size=%u, data=[%s]", out_bio_len,
srs_string_dumps_hex((char*)out_bio_data, out_bio_len, 32).c_str()); srs_string_dumps_hex((char*)out_bio_data, out_bio_len, 32).c_str());
} }
@ -455,7 +454,7 @@ srs_error_t SrsDtls::do_on_dtls(char* data, int nb_data)
} }
// Trace the detail of DTLS packet. // Trace the detail of DTLS packet.
trace((char*)data, nb_data, true); trace((uint8_t*)data, nb_data, true);
if ((r0 = BIO_write(bio_in, data, nb_data)) <= 0) { if ((r0 = BIO_write(bio_in, data, nb_data)) <= 0) {
// TODO: 0 or -1 maybe block, use BIO_should_retry to check. // TODO: 0 or -1 maybe block, use BIO_should_retry to check.
@ -482,11 +481,29 @@ srs_error_t SrsDtls::do_on_dtls(char* data, int nb_data)
return err; return err;
} }
void SrsDtls::trace(char* data, int size, bool incoming) void SrsDtls::trace(uint8_t* data, int length, bool incoming)
{ {
// change_cipher_spec(20), alert(21), handshake(22), application_data(23) if (length <= 0) {
// @see https://tools.ietf.org/html/rfc2246#section-6.2.1 return;
srs_trace("DTLS: %s size=%u", (incoming? "RECV":"SEND"), size); }
uint8_t content_type = 0;
if (length >= 1) {
content_type = (uint8_t)data[0];
}
uint16_t size = 0;
if (length >= 13) {
size = uint16_t(data[11])<<8 | uint16_t(data[12]);
}
uint8_t handshake_type = 0;
if (length >= 14) {
handshake_type = (uint8_t)data[13];
}
srs_trace("DTLS: %s length=%u, content-type=%u, size=%u, handshake-type=%u", (incoming? "RECV":"SEND"),
length, content_type, size, handshake_type);
} }
srs_error_t SrsDtls::start_active_handshake() srs_error_t SrsDtls::start_active_handshake()

@ -119,7 +119,7 @@ public:
srs_error_t on_dtls(char* data, int nb_data); srs_error_t on_dtls(char* data, int nb_data);
private: private:
srs_error_t do_on_dtls(char* data, int nb_data); srs_error_t do_on_dtls(char* data, int nb_data);
void trace(char* data, int size, bool incoming); void trace(uint8_t* data, int length, bool incoming);
public: public:
srs_error_t get_srtp_key(std::string& recv_key, std::string& send_key); srs_error_t get_srtp_key(std::string& recv_key, std::string& send_key);
private: private:

Loading…
Cancel
Save