mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Update RtcSession peer address when changed.
This commit is contained in:
parent
0cd67a997e
commit
734e848741
4 changed files with 41 additions and 21 deletions
|
@ -237,23 +237,21 @@ SrsUdpMuxSocket::~SrsUdpMuxSocket()
|
||||||
srs_freepa(buf);
|
srs_freepa(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsUdpMuxSocket::SrsUdpMuxSocket(const SrsUdpMuxSocket& rhs)
|
SrsUdpMuxSocket* SrsUdpMuxSocket::copy_sendonly()
|
||||||
{
|
{
|
||||||
operator=(rhs);
|
SrsUdpMuxSocket* sendonly = new SrsUdpMuxSocket(lfd);
|
||||||
}
|
|
||||||
|
|
||||||
SrsUdpMuxSocket& SrsUdpMuxSocket::operator=(const SrsUdpMuxSocket& rhs)
|
// Don't copy buffer
|
||||||
{
|
srs_freepa(sendonly->buf);
|
||||||
buf = NULL;
|
sendonly->nb_buf = 0;
|
||||||
nb_buf = 0;
|
sendonly->nread = 0;
|
||||||
nread = 0;
|
sendonly->lfd = lfd;
|
||||||
lfd = rhs.lfd;
|
sendonly->from = from;
|
||||||
from = rhs.from;
|
sendonly->fromlen = fromlen;
|
||||||
fromlen = rhs.fromlen;
|
sendonly->peer_ip = peer_ip;
|
||||||
peer_ip = rhs.peer_ip;
|
sendonly->peer_port = peer_port;
|
||||||
peer_port = rhs.peer_port;
|
|
||||||
|
|
||||||
return *this;
|
return sendonly;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsUdpMuxSocket::recvfrom(srs_utime_t timeout)
|
int SrsUdpMuxSocket::recvfrom(srs_utime_t timeout)
|
||||||
|
|
|
@ -143,9 +143,6 @@ public:
|
||||||
SrsUdpMuxSocket(srs_netfd_t fd);
|
SrsUdpMuxSocket(srs_netfd_t fd);
|
||||||
virtual ~SrsUdpMuxSocket();
|
virtual ~SrsUdpMuxSocket();
|
||||||
|
|
||||||
SrsUdpMuxSocket(const SrsUdpMuxSocket& rhs);
|
|
||||||
SrsUdpMuxSocket& operator=(const SrsUdpMuxSocket& rhs);
|
|
||||||
|
|
||||||
int recvfrom(srs_utime_t timeout);
|
int recvfrom(srs_utime_t timeout);
|
||||||
srs_error_t sendto(void* data, int size, srs_utime_t timeout);
|
srs_error_t sendto(void* data, int size, srs_utime_t timeout);
|
||||||
|
|
||||||
|
@ -154,6 +151,12 @@ public:
|
||||||
std::string get_peer_ip() const { return peer_ip; }
|
std::string get_peer_ip() const { return peer_ip; }
|
||||||
int get_peer_port() const { return peer_port; }
|
int get_peer_port() const { return peer_port; }
|
||||||
std::string get_peer_id();
|
std::string get_peer_id();
|
||||||
|
public:
|
||||||
|
SrsUdpMuxSocket* copy_sendonly();
|
||||||
|
private:
|
||||||
|
// Don't allow copy, user copy_sendonly instead
|
||||||
|
SrsUdpMuxSocket(const SrsUdpMuxSocket& rhs);
|
||||||
|
SrsUdpMuxSocket& operator=(const SrsUdpMuxSocket& rhs);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SrsUdpMuxListener : public ISrsCoroutineHandler
|
class SrsUdpMuxListener : public ISrsCoroutineHandler
|
||||||
|
|
|
@ -605,18 +605,19 @@ srs_error_t SrsDtlsSession::unprotect_rtcp(char* out_buf, const char* in_buf, in
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsRtcSenderThread::SrsRtcSenderThread(SrsRtcSession* s, SrsUdpMuxSocket* u, int parent_cid)
|
SrsRtcSenderThread::SrsRtcSenderThread(SrsRtcSession* s, SrsUdpMuxSocket* u, int parent_cid)
|
||||||
: ukt(NULL)
|
: sendonly_ukt(NULL)
|
||||||
{
|
{
|
||||||
_parent_cid = parent_cid;
|
_parent_cid = parent_cid;
|
||||||
trd = new SrsDummyCoroutine();
|
trd = new SrsDummyCoroutine();
|
||||||
|
|
||||||
rtc_session = s;
|
rtc_session = s;
|
||||||
ukt = *u;
|
sendonly_ukt = u->copy_sendonly();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsRtcSenderThread::~SrsRtcSenderThread()
|
SrsRtcSenderThread::~SrsRtcSenderThread()
|
||||||
{
|
{
|
||||||
srs_freep(trd);
|
srs_freep(trd);
|
||||||
|
srs_freep(sendonly_ukt);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsRtcSenderThread::cid()
|
int SrsRtcSenderThread::cid()
|
||||||
|
@ -695,10 +696,19 @@ srs_error_t SrsRtcSenderThread::cycle()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
send_and_free_messages(msgs.msgs, msg_count, &ukt);
|
send_and_free_messages(msgs.msgs, msg_count, sendonly_ukt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtcSenderThread::update_sendonly_socket(SrsUdpMuxSocket* ukt)
|
||||||
|
{
|
||||||
|
srs_trace("session %s address changed, update %s -> %s",
|
||||||
|
rtc_session->id().c_str(), sendonly_ukt->get_peer_id().c_str(), ukt->get_peer_id().c_str());
|
||||||
|
|
||||||
|
srs_freep(sendonly_ukt);
|
||||||
|
sendonly_ukt = ukt->copy_sendonly();
|
||||||
|
}
|
||||||
|
|
||||||
void SrsRtcSenderThread::send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, SrsUdpMuxSocket* udp_mux_skt)
|
void SrsRtcSenderThread::send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, SrsUdpMuxSocket* udp_mux_skt)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
@ -776,6 +786,12 @@ srs_error_t SrsRtcSession::on_stun(SrsUdpMuxSocket* udp_mux_skt, SrsStunPacket*
|
||||||
|
|
||||||
last_stun_time = srs_get_system_time();
|
last_stun_time = srs_get_system_time();
|
||||||
|
|
||||||
|
if (strd && strd->sendonly_ukt) {
|
||||||
|
if (strd->sendonly_ukt->get_peer_id() != udp_mux_skt->get_peer_id()) {
|
||||||
|
strd->update_sendonly_socket(udp_mux_skt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,7 +165,8 @@ protected:
|
||||||
int _parent_cid;
|
int _parent_cid;
|
||||||
private:
|
private:
|
||||||
SrsRtcSession* rtc_session;
|
SrsRtcSession* rtc_session;
|
||||||
SrsUdpMuxSocket ukt;
|
public:
|
||||||
|
SrsUdpMuxSocket* sendonly_ukt;
|
||||||
public:
|
public:
|
||||||
SrsRtcSenderThread(SrsRtcSession* s, SrsUdpMuxSocket* u, int parent_cid);
|
SrsRtcSenderThread(SrsRtcSession* s, SrsUdpMuxSocket* u, int parent_cid);
|
||||||
virtual ~SrsRtcSenderThread();
|
virtual ~SrsRtcSenderThread();
|
||||||
|
@ -177,6 +178,8 @@ public:
|
||||||
virtual void stop_loop();
|
virtual void stop_loop();
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t cycle();
|
virtual srs_error_t cycle();
|
||||||
|
public:
|
||||||
|
void update_sendonly_socket(SrsUdpMuxSocket* ukt);
|
||||||
private:
|
private:
|
||||||
void send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, SrsUdpMuxSocket* udp_mux_skt);
|
void send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, SrsUdpMuxSocket* udp_mux_skt);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue