From 437d20cb58687efec3193c75a86f269d7ad991b0 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Tue, 4 Nov 2025 18:36:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsrt=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E4=B8=8D=E6=94=AF=E6=8C=81=E5=9F=9F=E5=90=8Durl?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srt/SrtCaller.cpp | 15 ++++++++------- srt/SrtCaller.h | 15 +++++++++------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/srt/SrtCaller.cpp b/srt/SrtCaller.cpp index 9fbed896..3871e2ed 100644 --- a/srt/SrtCaller.cpp +++ b/srt/SrtCaller.cpp @@ -35,6 +35,10 @@ void SrtUrl::parse(const string &strUrl) { auto ip = findSubString(url.data(), "://", "?"); splitUrl(ip, _host, _port); + if (!SockUtil::getDomainIP(_host.c_str(), _port, _addr, AF_INET, SOCK_DGRAM, IPPROTO_UDP)) { + throw std::invalid_argument("invalid host: " + _host); + } + auto _params = findSubString(url.data(), "?" , NULL); auto kv = Parser::parseArgs(_params); @@ -80,10 +84,9 @@ SrtCaller::~SrtCaller(void) { void SrtCaller::onConnect() { //DebugL; - auto peer_addr = SockUtil::make_sockaddr(_url._host.c_str(), (_url._port)); _socket = Socket::createSocket(_poller, false); - _socket->bindUdpSock(0, SockUtil::is_ipv4(_url._host.data()) ? "0.0.0.0" : "::"); - _socket->bindPeerAddr((struct sockaddr *)&peer_addr, 0, true); + _socket->bindUdpSock(0, _url._addr.ss_family == AF_INET ? "0.0.0.0" : "::"); + _socket->bindPeerAddr((struct sockaddr *)&_url._addr, 0, true); weak_ptr weak_self = shared_from_this(); _socket->setOnRead([weak_self](const Buffer::Ptr &buf, struct sockaddr *addr, int addr_len) mutable { @@ -280,8 +283,7 @@ void SrtCaller::sendHandshakeInduction() { req->srt_socket_id = _socket_id; req->syn_cookie = 0; - auto dataSenderAddr = SockUtil::make_sockaddr(_url._host.c_str(), _url._port); - req->assignPeerIPBE(&dataSenderAddr); + req->assignPeerIPBE(&_url._addr); req->storeToData(); _handleshake_req = req; sendControlPacket(req, true); @@ -326,8 +328,7 @@ void SrtCaller::sendHandshakeConclusion() { req->srt_socket_id = _socket_id; req->syn_cookie = _sync_cookie; - auto addr = SockUtil::make_sockaddr(_url._host.c_str(), _url._port); - req->assignPeerIPBE(&addr); + req->assignPeerIPBE(&_url._addr); HSExtMessage::Ptr ext = std::make_shared(); ext->extension_type = HSExt::SRT_CMD_HSREQ; diff --git a/srt/SrtCaller.h b/srt/SrtCaller.h index e8ec679b..41145479 100644 --- a/srt/SrtCaller.h +++ b/srt/SrtCaller.h @@ -34,14 +34,17 @@ namespace mediakit { // 解析srt 信令url的工具类 class SrtUrl { public: - std::string _full_url; - std::string _params; - std::string _host; - uint16_t _port; - std::string _streamid; + void parse(const std::string &url); public: - void parse(const std::string &url); + std::string _full_url; + std::string _params; + std::string _streamid; + sockaddr_storage _addr; + +private: + uint16_t _port; + std::string _host; }; // 实现了webrtc代理拉流功能