mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
RTC: Refine UDP packet peer fast id. 4.0.68
This commit is contained in:
parent
e95fd10462
commit
c3414a30dc
9 changed files with 77 additions and 19 deletions
|
@ -300,10 +300,19 @@ srs_error_t SrsRtcServer::on_udp_packet(SrsUdpMuxSocket* skt)
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
string peer_id = skt->peer_id();
|
||||
SrsRtcConnection* session = NULL;
|
||||
char* data = skt->data(); int size = skt->size();
|
||||
|
||||
SrsRtcConnection* session = (SrsRtcConnection*)_srs_rtc_manager->find_by_id(peer_id);
|
||||
uint64_t fast_id = skt->fast_id();
|
||||
// Try fast id first, if not found, search by long peer id.
|
||||
if (fast_id) {
|
||||
session = (SrsRtcConnection*)_srs_rtc_manager->find_by_fast_id(fast_id);
|
||||
}
|
||||
if (!session) {
|
||||
string peer_id = skt->peer_id();
|
||||
session = (SrsRtcConnection*)_srs_rtc_manager->find_by_id(peer_id);
|
||||
}
|
||||
|
||||
if (session) {
|
||||
// Switch to the session to write logs to the context.
|
||||
session->switch_to_context();
|
||||
|
@ -326,12 +335,14 @@ srs_error_t SrsRtcServer::on_udp_packet(SrsUdpMuxSocket* skt)
|
|||
|
||||
// For STUN, the peer address may change.
|
||||
if (srs_is_stun((uint8_t*)data, size)) {
|
||||
string peer_id = skt->peer_id();
|
||||
|
||||
SrsStunPacket ping;
|
||||
if ((err = ping.decode(data, size)) != srs_success) {
|
||||
return srs_error_wrap(err, "decode stun packet failed");
|
||||
}
|
||||
srs_info("recv stun packet from %s, use-candidate=%d, ice-controlled=%d, ice-controlling=%d",
|
||||
peer_id.c_str(), ping.get_use_candidate(), ping.get_ice_controlled(), ping.get_ice_controlling());
|
||||
srs_info("recv stun packet from %s, fast=%" PRId64 ", use-candidate=%d, ice-controlled=%d, ice-controlling=%d",
|
||||
peer_id.c_str(), fast_id, ping.get_use_candidate(), ping.get_ice_controlled(), ping.get_ice_controlling());
|
||||
|
||||
if (!session) {
|
||||
session = find_session_by_username(ping.get_username());
|
||||
|
@ -344,8 +355,8 @@ srs_error_t SrsRtcServer::on_udp_packet(SrsUdpMuxSocket* skt)
|
|||
|
||||
// TODO: FIXME: For ICE trickle, we may get STUN packets before SDP answer, so maybe should response it.
|
||||
if (!session) {
|
||||
return srs_error_new(ERROR_RTC_STUN, "no session, stun username=%s, peer_id=%s",
|
||||
ping.get_username().c_str(), peer_id.c_str());
|
||||
return srs_error_new(ERROR_RTC_STUN, "no session, stun username=%s, peer_id=%s, fast=%" PRId64,
|
||||
ping.get_username().c_str(), peer_id.c_str(), fast_id);
|
||||
}
|
||||
|
||||
return session->on_stun(skt, &ping);
|
||||
|
@ -353,7 +364,8 @@ srs_error_t SrsRtcServer::on_udp_packet(SrsUdpMuxSocket* skt)
|
|||
|
||||
// For DTLS, RTCP or RTP, which does not support peer address changing.
|
||||
if (!session) {
|
||||
return srs_error_new(ERROR_RTC_STUN, "no session, peer_id=%s", peer_id.c_str());
|
||||
string peer_id = skt->peer_id();
|
||||
return srs_error_new(ERROR_RTC_STUN, "no session, peer_id=%s, fast=%" PRId64, peer_id.c_str(), fast_id);
|
||||
}
|
||||
|
||||
if (srs_is_dtls((uint8_t*)data, size)) {
|
||||
|
@ -576,11 +588,6 @@ srs_error_t SrsRtcServer::setup_session2(SrsRtcConnection* session, SrsRequest*
|
|||
return err;
|
||||
}
|
||||
|
||||
void SrsRtcServer::insert_into_id_sessions(const string& peer_id, SrsRtcConnection* session)
|
||||
{
|
||||
_srs_rtc_manager->add_with_id(peer_id, session);
|
||||
}
|
||||
|
||||
SrsRtcConnection* SrsRtcServer::find_session_by_username(const std::string& username)
|
||||
{
|
||||
ISrsResource* conn = _srs_rtc_manager->find_by_name(username);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue