

WebRtcTransport::WebRtcTransport(const std::string& id, RTC::Transport::Listener* listener, json& data): RTC::Transport::Transport(id, listener, data){********************************for (auto& listenIp : listenIps){if (enableUdp){********************************// This may throw.auto* udpSocket = new RTC::UdpSocket(this, listenIp.ip);this->udpSockets[udpSocket] = listenIp.announcedIp;if (listenIp.announcedIp.empty())this->iceCandidates.emplace_back(udpSocket, icePriority);elsethis->iceCandidates.emplace_back(udpSocket, icePriority, listenIp.announcedIp);}if (enableTcp){********************************// This may throw.auto* tcpServer = new RTC::TcpServer(this, this, listenIp.ip);this->tcpServers[tcpServer] = listenIp.announcedIp;if (listenIp.announcedIp.empty())this->iceCandidates.emplace_back(tcpServer, icePriority);elsethis->iceCandidates.emplace_back(tcpServer, icePriority, listenIp.announcedIp);}// Decrement initial ICE local preference for next IP.iceLocalPreferenceDecrement += 100;}*******************************}
inline void WebRtcTransport::OnDtlsDataReceived( const RTC::TransportTuple tuple, const uint8_t data, size_t len)
{
{
*
this->dtlsTransport->ProcessDtlsData(data, len);
**
}
void DtlsTransport::Run(Role localRole){MS_TRACE();MS_ASSERT(localRole == Role::CLIENT || localRole == Role::SERVER,"local DTLS role must be 'client' or 'server'");Role previousLocalRole = this->localRole;if (localRole == previousLocalRole){MS_ERROR("same local DTLS role provided, doing nothing");return;}// If the previous local DTLS role was 'client' or 'server' do reset.if (previousLocalRole == Role::CLIENT || previousLocalRole == Role::SERVER){MS_DEBUG_TAG(dtls, "resetting DTLS due to local role change");Reset();}// Update local role.this->localRole = localRole;// Set state and notify the listener.this->state = DtlsState::CONNECTING;this->listener->OnDtlsTransportConnecting(this);switch (this->localRole){case Role::CLIENT:{MS_DEBUG_TAG(dtls, "running [role:client]");SSL_set_connect_state(this->ssl);SSL_do_handshake(this->ssl);SendPendingOutgoingDtlsData();SetTimeout();break;}case Role::SERVER:{MS_DEBUG_TAG(dtls, "running [role:server]");SSL_set_accept_state(this->ssl);SSL_do_handshake(this->ssl);break;}default:{MS_ABORT("invalid local DTLS role");}}}
