完善ipv6网络适配

This commit is contained in:
xiongziliang
2022-05-08 00:26:01 +08:00
parent 3062ea0e7c
commit d66845425c
15 changed files with 57 additions and 73 deletions

View File

@@ -80,7 +80,7 @@ bool RtpProcess::inputRtp(bool is_udp, const Socket::Ptr &sock, const char *data
if (!_sock) {
//第一次运行本函数
_sock = sock;
_addr = *addr;
_addr = *((struct sockaddr_storage *)addr);
emitOnPublish();
}
@@ -198,11 +198,11 @@ void RtpProcess::setOnDetach(const function<void()> &cb) {
}
string RtpProcess::get_peer_ip() {
return SockUtil::inet_ntoa(((struct sockaddr_in &) _addr).sin_addr);
return SockUtil::inet_ntoa((struct sockaddr *)&_addr);
}
uint16_t RtpProcess::get_peer_port() {
return ntohs(((struct sockaddr_in &) _addr).sin_port);
return SockUtil::inet_port((struct sockaddr *)&_addr);
}
string RtpProcess::get_local_ip() {

View File

@@ -84,7 +84,7 @@ private:
private:
uint32_t _dts = 0;
uint64_t _total_bytes = 0;
struct sockaddr _addr{0};
struct sockaddr_storage _addr{0};
toolkit::Socket::Ptr _sock;
MediaInfo _media_info;
toolkit::Ticker _last_frame_time;

View File

@@ -53,7 +53,7 @@ public:
}
if (!strong_self->_rtcp_addr) {
//只设置一次rtcp对端端口
strong_self->_rtcp_addr = std::make_shared<struct sockaddr>();
strong_self->_rtcp_addr = std::make_shared<struct sockaddr_storage>();
memcpy(strong_self->_rtcp_addr.get(), addr, addr_len);
}
auto rtcps = RtcpHeader::loadFromBytes(buf->data(), buf->size());
@@ -71,10 +71,13 @@ private:
}
_ticker.resetTime();
auto rtcp_addr = _rtcp_addr.get();
auto rtcp_addr = (struct sockaddr *)_rtcp_addr.get();
if (!rtcp_addr) {
//默认的rtcp端口为rtp端口+1
((sockaddr_in *) addr)->sin_port = htons(ntohs(((sockaddr_in *) addr)->sin_port) + 1);
switch(addr->sa_family){
case AF_INET: ((sockaddr_in *) addr)->sin_port = htons(ntohs(((sockaddr_in *) addr)->sin_port) + 1); break;
case AF_INET6: ((sockaddr_in6 *) addr)->sin6_port = htons(ntohs(((sockaddr_in6 *) addr)->sin6_port) + 1); break;
}
//未收到rtcp打洞包时采用默认的rtcp端口
rtcp_addr = addr;
}
@@ -85,7 +88,7 @@ private:
Ticker _ticker;
Socket::Ptr _rtcp_sock;
uint32_t _sample_rate;
std::shared_ptr<struct sockaddr> _rtcp_addr;
std::shared_ptr<struct sockaddr_storage> _rtcp_addr;
};
void RtpServer::start(uint16_t local_port, const string &stream_id, bool enable_tcp, const char *local_ip, bool re_use_port, uint32_t ssrc) {

View File

@@ -40,7 +40,7 @@ void RtpSession::attachServer(const Server &server) {
RtpSession::RtpSession(const Socket::Ptr &sock) : Session(sock) {
DebugP(this);
socklen_t addr_len = sizeof(_addr);
getpeername(sock->rawFD(), &_addr, &addr_len);
getpeername(sock->rawFD(), (struct sockaddr *)&_addr, &addr_len);
}
RtpSession::~RtpSession() {
@@ -110,7 +110,7 @@ void RtpSession::onRtpPacket(const char *data, size_t len) {
WarnP(this) << "ssrc不匹配,rtp已丢弃:" << rtp_ssrc << " != " << _ssrc;
return;
}
_process->inputRtp(false, getSock(), data, len, &_addr);
_process->inputRtp(false, getSock(), data, len, (struct sockaddr *)&_addr);
} catch (RtpTrack::BadRtpException &ex) {
if (!_is_udp) {
WarnL << ex.what() << "开始搜索ssrc以便恢复上下文";

View File

@@ -50,7 +50,7 @@ private:
uint32_t _ssrc = 0;
toolkit::Ticker _ticker;
std::string _stream_id;
struct sockaddr _addr;
struct sockaddr_storage _addr;
RtpProcess::Ptr _process;
std::shared_ptr<toolkit::ObjectStatistic<toolkit::TcpSession> > _statistic_tcp;
std::shared_ptr<toolkit::ObjectStatistic<toolkit::UdpSession> > _statistic_udp;