mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-14 20:15:58 +08:00
fix: SrtCaller and SrtSession crash (#4328)
1.修改SrtCaller 多线程发送造成的crash 2.修改SrtCaller 接收的期望外的控制包可能造成的空指针引用 3.修改异常的streamid ext可能造成的crash
This commit is contained in:
@@ -218,8 +218,8 @@ void SrtCaller::inputSockData(uint8_t *buf, int len, struct sockaddr *addr) {
|
||||
|
||||
// 处理srt数据
|
||||
if (DataPacket::isDataPacket(buf, len)) {
|
||||
uint32_t socketId = DataPacket::getSocketID(buf, len);
|
||||
if (isPlayer()) {
|
||||
if (_is_handleshake_finished && isPlayer()) {
|
||||
uint32_t socketId = DataPacket::getSocketID(buf, len);
|
||||
if (socketId == _socket_id) {
|
||||
_pkt_recv_rate_context->inputPacket(_now, len + UDP_HDR_SIZE);
|
||||
handleDataPacket(buf, len, addr);
|
||||
@@ -702,6 +702,11 @@ void SrtCaller::handleHandshakeConclusion(SRT::HandshakePacket &pkt, struct sock
|
||||
void SrtCaller::handleACK(uint8_t *buf, int len, struct sockaddr *addr) {
|
||||
// TraceL;
|
||||
//Acknowledgement of Acknowledgement (ACKACK) control packets are sent to acknowledge the reception of a Full ACK
|
||||
|
||||
if (!_is_handleshake_finished) {
|
||||
return;
|
||||
}
|
||||
|
||||
ACKPacket ack;
|
||||
if (!ack.loadFromData(buf, len)) {
|
||||
return;
|
||||
@@ -722,6 +727,10 @@ void SrtCaller::handleACK(uint8_t *buf, int len, struct sockaddr *addr) {
|
||||
|
||||
void SrtCaller::handleACKACK(uint8_t *buf, int len, struct sockaddr *addr) {
|
||||
// TraceL;
|
||||
|
||||
if (!_is_handleshake_finished) {
|
||||
return;
|
||||
}
|
||||
ACKACKPacket::Ptr pkt = std::make_shared<ACKACKPacket>();
|
||||
pkt->loadFromData(buf, len);
|
||||
|
||||
@@ -757,6 +766,15 @@ void SrtCaller::handleACKACK(uint8_t *buf, int len, struct sockaddr *addr) {
|
||||
}
|
||||
|
||||
void SrtCaller::handleNAK(uint8_t *buf, int len, struct sockaddr *addr) {
|
||||
if (!_is_handleshake_finished) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isPlayer()) {
|
||||
//player should not handle nak
|
||||
return;
|
||||
}
|
||||
|
||||
//TraceL;
|
||||
NAKPacket pkt;
|
||||
pkt.loadFromData(buf, len);
|
||||
@@ -783,6 +801,15 @@ void SrtCaller::handleNAK(uint8_t *buf, int len, struct sockaddr *addr) {
|
||||
}
|
||||
|
||||
void SrtCaller::handleDropReq(uint8_t *buf, int len, struct sockaddr *addr) {
|
||||
if (!_is_handleshake_finished) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isPlayer()) {
|
||||
//pusher should not handle drop req
|
||||
return;
|
||||
}
|
||||
|
||||
MsgDropReqPacket pkt;
|
||||
pkt.loadFromData(buf, len);
|
||||
std::list<DataPacket::Ptr> list;
|
||||
|
||||
Reference in New Issue
Block a user