refactor: add tr_address::is_any() (#5398)
As suggested by @tearfur Xref: https://github.com/transmission/transmission/pull/5329#discussion_r1166236165
This commit is contained in:
parent
6b230e753b
commit
3af9645615
|
@ -217,7 +217,7 @@ tr_peer_socket tr_netOpenPeerSocket(tr_session* session, tr_address const& addr,
|
|||
auto const [sock, addrlen] = addr.to_sockaddr(port);
|
||||
|
||||
// set source address
|
||||
auto const [source_addr, is_any] = session->publicAddress(addr.type);
|
||||
auto const source_addr = session->publicAddress(addr.type);
|
||||
auto const [source_sock, sourcelen] = source_addr.to_sockaddr({});
|
||||
|
||||
if (bind(s, reinterpret_cast<sockaddr const*>(&source_sock), sourcelen) == -1)
|
||||
|
|
|
@ -305,6 +305,11 @@ struct tr_address
|
|||
return type == TR_AF_INET || type == TR_AF_INET6;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto is_any() const noexcept
|
||||
{
|
||||
return *this == (is_ipv4() ? any_ipv4() : any_ipv6());
|
||||
}
|
||||
|
||||
[[nodiscard]] bool is_valid_for_peers(tr_port port) const noexcept;
|
||||
};
|
||||
|
||||
|
|
|
@ -324,7 +324,7 @@ public:
|
|||
if (session->allowsDHT() && io->supports_dht())
|
||||
{
|
||||
// only send PORT over IPv6 iff IPv6 DHT is running (BEP-32).
|
||||
if (auto const [addr, is_any] = session->publicAddress(TR_AF_INET6); !is_any)
|
||||
if (auto const addr = session->publicAddress(TR_AF_INET6); !addr.is_any())
|
||||
{
|
||||
protocolSendPort(this, session->udpPort());
|
||||
}
|
||||
|
@ -935,7 +935,7 @@ void sendLtepHandshake(tr_peerMsgsImpl* msgs)
|
|||
tr_variantInitDict(&val, 8);
|
||||
tr_variantDictAddBool(&val, TR_KEY_e, msgs->session->encryptionMode() != TR_CLEAR_PREFERRED);
|
||||
|
||||
if (auto const [addr, is_any] = msgs->session->publicAddress(TR_AF_INET6); !is_any)
|
||||
if (auto const addr = msgs->session->publicAddress(TR_AF_INET6); !addr.is_any())
|
||||
{
|
||||
TR_ASSERT(addr.is_ipv6());
|
||||
tr_variantDictAddRaw(&val, TR_KEY_ipv6, &addr.addr.addr6, sizeof(addr.addr.addr6));
|
||||
|
|
|
@ -303,7 +303,7 @@ std::optional<std::string_view> tr_session::WebMediator::userAgent() const
|
|||
|
||||
std::optional<std::string> tr_session::WebMediator::publicAddressV4() const
|
||||
{
|
||||
if (auto const [addr, is_any] = session_->publicAddress(TR_AF_INET); !is_any)
|
||||
if (auto const addr = session_->publicAddress(TR_AF_INET); !addr.is_any())
|
||||
{
|
||||
return addr.display_name();
|
||||
}
|
||||
|
@ -313,7 +313,7 @@ std::optional<std::string> tr_session::WebMediator::publicAddressV4() const
|
|||
|
||||
std::optional<std::string> tr_session::WebMediator::publicAddressV6() const
|
||||
{
|
||||
if (auto const [addr, is_any] = session_->publicAddress(TR_AF_INET6); !is_any)
|
||||
if (auto const addr = session_->publicAddress(TR_AF_INET6); !addr.is_any())
|
||||
{
|
||||
return addr.display_name();
|
||||
}
|
||||
|
@ -417,15 +417,13 @@ tr_session::BoundSocket::~BoundSocket()
|
|||
}
|
||||
}
|
||||
|
||||
tr_session::PublicAddressResult tr_session::publicAddress(tr_address_type type) const noexcept
|
||||
tr_address tr_session::publicAddress(tr_address_type type) const noexcept
|
||||
{
|
||||
if (type == TR_AF_INET)
|
||||
{
|
||||
// if user provided an address, use it.
|
||||
// otherwise, use any_ipv4 (0.0.0.0).
|
||||
static auto constexpr DefaultAddr = tr_address::any_ipv4();
|
||||
auto addr = tr_address::from_string(settings_.bind_address_ipv4).value_or(DefaultAddr);
|
||||
return { addr, addr == DefaultAddr };
|
||||
return tr_address::from_string(settings_.bind_address_ipv4).value_or(tr_address::any_ipv4());
|
||||
}
|
||||
|
||||
if (type == TR_AF_INET6)
|
||||
|
@ -435,8 +433,7 @@ tr_session::PublicAddressResult tr_session::publicAddress(tr_address_type type)
|
|||
// otherwise, use any_ipv6 (::).
|
||||
static auto constexpr AnyAddr = tr_address::any_ipv6();
|
||||
auto const default_addr = tr_globalIPv6().value_or(AnyAddr);
|
||||
auto addr = tr_address::from_string(settings_.bind_address_ipv6).value_or(default_addr);
|
||||
return { addr, addr == AnyAddr };
|
||||
return tr_address::from_string(settings_.bind_address_ipv6).value_or(default_addr);
|
||||
}
|
||||
|
||||
TR_ASSERT_MSG(false, "invalid type");
|
||||
|
@ -727,14 +724,14 @@ void tr_session::setSettings(tr_session_settings&& settings_in, bool force)
|
|||
{
|
||||
if (auto const& val = new_settings.bind_address_ipv4; force || port_changed || val != old_settings.bind_address_ipv4)
|
||||
{
|
||||
auto const [addr, is_default] = publicAddress(TR_AF_INET);
|
||||
auto const addr = publicAddress(TR_AF_INET);
|
||||
bound_ipv4_.emplace(eventBase(), addr, local_peer_port_, &tr_session::onIncomingPeerConnection, this);
|
||||
addr_changed = true;
|
||||
}
|
||||
|
||||
if (auto const& val = new_settings.bind_address_ipv6; force || port_changed || val != old_settings.bind_address_ipv6)
|
||||
{
|
||||
auto const [addr, is_default] = publicAddress(TR_AF_INET6);
|
||||
auto const addr = publicAddress(TR_AF_INET6);
|
||||
bound_ipv6_.emplace(eventBase(), addr, local_peer_port_, &tr_session::onIncomingPeerConnection, this);
|
||||
addr_changed = true;
|
||||
}
|
||||
|
|
|
@ -193,7 +193,7 @@ private:
|
|||
|
||||
[[nodiscard]] tr_address incomingPeerAddress() const override
|
||||
{
|
||||
return session_.publicAddress(TR_AF_INET).address;
|
||||
return session_.publicAddress(TR_AF_INET);
|
||||
}
|
||||
|
||||
[[nodiscard]] tr_port localPeerPort() const override
|
||||
|
@ -777,13 +777,7 @@ public:
|
|||
|
||||
[[nodiscard]] bool addressIsBlocked(tr_address const& addr) const noexcept;
|
||||
|
||||
struct PublicAddressResult
|
||||
{
|
||||
tr_address address;
|
||||
bool is_any_addr;
|
||||
};
|
||||
|
||||
[[nodiscard]] PublicAddressResult publicAddress(tr_address_type type) const noexcept;
|
||||
[[nodiscard]] tr_address publicAddress(tr_address_type type) const noexcept;
|
||||
|
||||
[[nodiscard]] constexpr auto speedLimitKBps(tr_direction dir) const noexcept
|
||||
{
|
||||
|
|
|
@ -150,7 +150,7 @@ tr_session::tr_udp_core::tr_udp_core(tr_session& session, tr_port udp_port)
|
|||
auto optval = int{ 1 };
|
||||
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char const*>(&optval), sizeof(optval));
|
||||
|
||||
auto const [addr, is_any] = session_.publicAddress(TR_AF_INET);
|
||||
auto const addr = session_.publicAddress(TR_AF_INET);
|
||||
auto const [ss, sslen] = addr.to_sockaddr(udp_port_);
|
||||
|
||||
if (bind(sock, reinterpret_cast<sockaddr const*>(&ss), sslen) != 0)
|
||||
|
@ -184,7 +184,7 @@ tr_session::tr_udp_core::tr_udp_core(tr_session& session, tr_port udp_port)
|
|||
auto optval = int{ 1 };
|
||||
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char const*>(&optval), sizeof(optval));
|
||||
|
||||
auto const [addr, is_any] = session_.publicAddress(TR_AF_INET6);
|
||||
auto const addr = session_.publicAddress(TR_AF_INET6);
|
||||
auto const [ss, sslen] = addr.to_sockaddr(udp_port_);
|
||||
|
||||
if (bind(sock, reinterpret_cast<sockaddr const*>(&ss), sslen) != 0)
|
||||
|
|
Loading…
Reference in New Issue