From fab904a39a941648dd0b595853350948e9b7352e Mon Sep 17 00:00:00 2001 From: Heikki Tampio Date: Wed, 5 Apr 2023 10:55:24 +0300 Subject: [PATCH] multiplex: clean up functions that went in the wrong design direction --- include/uvgrtp/media_stream.hh | 5 +-- src/context.cc | 11 ------ src/media_stream.cc | 69 +++++++++++++++------------------- src/session.cc | 8 +--- src/socketfactory.cc | 13 ++----- src/socketfactory.hh | 2 - 6 files changed, 36 insertions(+), 72 deletions(-) diff --git a/include/uvgrtp/media_stream.hh b/include/uvgrtp/media_stream.hh index 6734d7f..4294738 100644 --- a/include/uvgrtp/media_stream.hh +++ b/include/uvgrtp/media_stream.hh @@ -51,7 +51,7 @@ namespace uvgrtp { public: /// \cond DO_NOT_DOCUMENT media_stream(std::string cname, std::string remote_addr, std::string local_addr, uint16_t src_port, uint16_t dst_port, - rtp_format_t fmt, int rce_flags, bool single_soc, std::shared_ptr socptr); + rtp_format_t fmt, int rce_flags); ~media_stream(); /* Initialize traditional RTP session @@ -330,7 +330,6 @@ namespace uvgrtp { * Used by session to index media streams */ uint32_t get_key() const; - bool is_single_socket() const; /// \endcond /** @@ -395,8 +394,6 @@ namespace uvgrtp { bool ipv6_; rtp_format_t fmt_; - bool single_soc_; - /* Media context config */ int rce_flags_ = 0; diff --git a/src/context.cc b/src/context.cc index 9024942..08a844b 100644 --- a/src/context.cc +++ b/src/context.cc @@ -69,17 +69,6 @@ uvgrtp::session *uvgrtp::context::create_session(std::string address) return new uvgrtp::session(get_cname(), address); } -uvgrtp::session *uvgrtp::context::create_session(std::string remote_addr, std::string local_addr) -{ - if (remote_addr == "" && local_addr == "") - { - UVG_LOG_ERROR("Please specify at least one address for create_session"); - return nullptr; - } - - return new uvgrtp::session(get_cname(), remote_addr, local_addr); -} - uvgrtp::session* uvgrtp::context::create_session(std::string remote_addr, std::string local_addr) { if (remote_addr == "" && local_addr == "") diff --git a/src/media_stream.cc b/src/media_stream.cc index 1946c53..2592372 100644 --- a/src/media_stream.cc +++ b/src/media_stream.cc @@ -31,11 +31,11 @@ uvgrtp::media_stream::media_stream(std::string cname, std::string remote_addr, std::string local_addr, uint16_t src_port, uint16_t dst_port, rtp_format_t fmt, - int rce_flags, bool single_soc, std::shared_ptr socptr) : + int rce_flags) : key_(uvgrtp::random::generate_32()), srtp_(nullptr), srtcp_(nullptr), - socket_(socptr), + socket_(nullptr), rtp_(nullptr), rtcp_(nullptr), remote_sockaddr_(), @@ -46,7 +46,6 @@ uvgrtp::media_stream::media_stream(std::string cname, std::string remote_addr, dst_port_(dst_port), ipv6_(false), fmt_(fmt), - single_soc_(single_soc), rce_flags_(rce_flags), initialized_(false), rtp_handler_key_(0), @@ -83,41 +82,41 @@ rtp_error_t uvgrtp::media_stream::init_connection() { rtp_error_t ret = RTP_GENERIC_ERROR; - if (!single_soc_) { - // Use getaddrinfo() to determine whether we are using ipv4 or ipv6 addresses - struct addrinfo hint, * res = NULL; - memset(&hint, '\0', sizeof(hint)); - hint.ai_family = PF_UNSPEC; - hint.ai_flags = AI_NUMERICHOST; - if (getaddrinfo(local_address_.c_str(), NULL, &hint, &res) != 0) { - if (getaddrinfo(remote_address_.c_str(), NULL, &hint, &res) != 0) { - UVG_LOG_ERROR("Invalid IP address"); - return RTP_GENERIC_ERROR; - } - } - if (res->ai_family == AF_INET6) { - ipv6_ = true; - UVG_LOG_DEBUG("Using an IPv6 address"); - } - else { - UVG_LOG_DEBUG("Using an IPv4 address"); - } + // Use getaddrinfo() to determine whether we are using ipv4 or ipv6 addresses + struct addrinfo hint, * res = NULL; + memset(&hint, '\0', sizeof(hint)); + hint.ai_family = PF_UNSPEC; + hint.ai_flags = AI_NUMERICHOST; - // Initialize socket - if ((ret = socket_->init(res->ai_family, SOCK_DGRAM, 0)) != RTP_OK) { - return ret; + if (getaddrinfo(local_address_.c_str(), NULL, &hint, &res) != 0) { + if (getaddrinfo(remote_address_.c_str(), NULL, &hint, &res) != 0) { + UVG_LOG_ERROR("Invalid IP address"); + return RTP_GENERIC_ERROR; } + } + if (res->ai_family == AF_INET6) { + ipv6_ = true; + UVG_LOG_DEBUG("Using an IPv6 address"); + } + else { + UVG_LOG_DEBUG("Using an IPv4 address"); + } + + // Initialize socket + if ((ret = socket_->init(res->ai_family, SOCK_DGRAM, 0)) != RTP_OK) { + return ret; + } #ifdef _WIN32 - /* Make the socket non-blocking */ - int enabled = 1; + /* Make the socket non-blocking */ + int enabled = 1; - if (::ioctlsocket(socket_->get_raw_socket(), FIONBIO, (u_long*)&enabled) < 0) - UVG_LOG_ERROR("Failed to make the socket non-blocking!"); + if (::ioctlsocket(socket_->get_raw_socket(), FIONBIO, (u_long*)&enabled) < 0) + UVG_LOG_ERROR("Failed to make the socket non-blocking!"); #endif - } + if (!(rce_flags_ & RCE_RECEIVE_ONLY) && remote_address_ != "" && dst_port_ != 0) { // no reason to fail sending even if binding fails so we set remote address first @@ -135,10 +134,7 @@ rtp_error_t uvgrtp::media_stream::init_connection() UVG_LOG_INFO("Sending disabled for this stream"); } - if (single_soc_) { - UVG_LOG_INFO("Using a single socket for receiving"); - } - else if (!(rce_flags_ & RCE_SEND_ONLY)) + if (!(rce_flags_ & RCE_SEND_ONLY)) { if (local_address_ != "" && src_port_ != 0) { if (ipv6_) { @@ -796,11 +792,6 @@ uint32_t uvgrtp::media_stream::get_key() const return key_; } -bool uvgrtp::media_stream::is_single_socket() const -{ - return single_soc_; -} - uvgrtp::rtcp *uvgrtp::media_stream::get_rtcp() { return rtcp_.get(); diff --git a/src/session.cc b/src/session.cc index 513addf..46f99bb 100644 --- a/src/session.cc +++ b/src/session.cc @@ -103,15 +103,9 @@ uvgrtp::media_stream* uvgrtp::session::create_stream(uint16_t src_port, uint16_t rtp_errno = RTP_INVALID_VALUE; return nullptr; } - if (!(rce_flags & RCE_SEND_ONLY)) { - if (!sf_->get_local_bound()) { - sf_->bind_local_socket(src_port); - } - } - std::shared_ptr soc = sf_->get_socket_ptr(); uvgrtp::media_stream* stream = - new uvgrtp::media_stream(cname_, remote_address_, local_address_, src_port, dst_port, fmt, rce_flags, sf_->get_local_bound(), soc); + new uvgrtp::media_stream(cname_, remote_address_, local_address_, src_port, dst_port, fmt, rce_flags); if (rce_flags & RCE_SRTP) { if (!uvgrtp::crypto::enabled()) { diff --git a/src/socketfactory.cc b/src/socketfactory.cc index 054ad27..5af78ce 100644 --- a/src/socketfactory.cc +++ b/src/socketfactory.cc @@ -15,8 +15,7 @@ uvgrtp::socketfactory::socketfactory(int rce_flags) : local_address_(""), used_ports_({}), ipv6_(false), - used_sockets_({}), - local_bound_(false) + used_sockets_({}) {} uvgrtp::socketfactory::~socketfactory() @@ -24,7 +23,7 @@ uvgrtp::socketfactory::~socketfactory() rtp_error_t uvgrtp::socketfactory::set_local_interface(std::string local_addr) { - rtp_error_t ret = RTP_GENERIC_ERROR; + rtp_error_t ret; local_address_ = local_addr; // check IP address family @@ -47,7 +46,7 @@ std::shared_ptr uvgrtp::socketfactory::create_new_socket(uint16_ { rtp_error_t ret = RTP_OK; if (std::find(used_ports_.begin(), used_ports_.end(), local_port) == used_ports_.end()) { - std::shared_ptr socket = std::make_shared(new uvgrtp::socket(rce_flags_)); + std::shared_ptr socket = std::make_shared(rce_flags_); if (ipv6_) { if ((ret = socket->init(AF_INET6, SOCK_DGRAM, 0)) != RTP_OK) { @@ -87,12 +86,8 @@ std::shared_ptr uvgrtp::socketfactory::create_new_socket(uint16_ return nullptr; } -bool uvgrtp::socketfactory::get_local_bound() const -{ - return local_bound_; -} std::shared_ptr uvgrtp::socketfactory::get_socket_ptr() const { - return socket_; + return nullptr; } \ No newline at end of file diff --git a/src/socketfactory.hh b/src/socketfactory.hh index f617b59..8a35546 100644 --- a/src/socketfactory.hh +++ b/src/socketfactory.hh @@ -17,7 +17,6 @@ namespace uvgrtp { rtp_error_t set_local_interface(std::string local_addr); std::shared_ptr create_new_socket(uint16_t local_port); - bool get_local_bound() const; std::shared_ptr get_socket_ptr() const; private: @@ -27,7 +26,6 @@ namespace uvgrtp { std::vector used_ports_; bool ipv6_; std::vector> used_sockets_; - bool local_bound_; }; }