refactor: remove tr_url_parsed_t.portstr (#2929)
This commit is contained in:
parent
4a2a6b2985
commit
2f97655981
|
@ -285,9 +285,12 @@ struct tr_tracker
|
|||
// format: `${host}:${port}`
|
||||
tr_interned_string tr_announcerGetKey(tr_url_parsed_t const& parsed)
|
||||
{
|
||||
std::string buf;
|
||||
tr_buildBuf(buf, parsed.host, ":"sv, parsed.portstr);
|
||||
return tr_interned_string{ buf };
|
||||
auto buf = std::array<char, 1024>{};
|
||||
auto* const begin = std::data(buf);
|
||||
auto const* const end = fmt::format_to_n(begin, std::size(buf), "{:s}:{:d}", parsed.host, parsed.port).out;
|
||||
auto const sv = std::string_view{ begin, static_cast<size_t>(end - begin) };
|
||||
|
||||
return tr_interned_string{ sv };
|
||||
}
|
||||
|
||||
/***
|
||||
|
@ -1298,9 +1301,9 @@ static void checkMultiscrapeMax(tr_announcer* announcer, tr_scrape_response cons
|
|||
// don't log the full URL, since that might have a personal announce id
|
||||
// (note: we know 'parsed' will be successful since this url has a scrape_info)
|
||||
auto const parsed = *tr_urlParse(url);
|
||||
auto clean_url = std::string{};
|
||||
tr_buildBuf(clean_url, parsed.scheme, "://"sv, parsed.host, ":"sv, parsed.portstr);
|
||||
tr_logAddDebug(fmt::format("Reducing multiscrape max to {}", n), clean_url);
|
||||
tr_logAddDebug(
|
||||
fmt::format(FMT_STRING("Reducing multiscrape max to {:d}"), n),
|
||||
fmt::format(FMT_STRING("{:s}://{:s}:{:d}"), parsed.scheme, parsed.host, parsed.port));
|
||||
multiscrape_max = n;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -89,19 +89,6 @@ constexpr auto tr_saveFile(std::string_view filename, ContiguousRange const& x,
|
|||
return tr_saveFile(filename, std::string_view{ std::data(x), std::size(x) }, error);
|
||||
}
|
||||
|
||||
template<typename... T, typename std::enable_if_t<(std::is_convertible_v<T, std::string_view> && ...), bool> = true>
|
||||
std::string& tr_buildBuf(std::string& setme, T... args)
|
||||
{
|
||||
setme.clear();
|
||||
auto const n = (std::size(std::string_view{ args }) + ...);
|
||||
if (setme.capacity() < n)
|
||||
{
|
||||
setme.reserve(n);
|
||||
}
|
||||
((setme += args), ...);
|
||||
return setme;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get disk capacity and free disk space (in bytes) for the specified folder.
|
||||
* @return struct with free and total as zero or positive integer on success, -1 in case of error.
|
||||
|
|
|
@ -335,8 +335,7 @@ std::optional<tr_url_parsed_t> tr_urlParse(std::string_view url)
|
|||
auto remain = parsed.authority;
|
||||
parsed.host = tr_strvSep(&remain, ':');
|
||||
parsed.sitename = getSiteName(parsed.host);
|
||||
parsed.portstr = !std::empty(remain) ? remain : getPortForScheme(parsed.scheme);
|
||||
parsed.port = parsePort(parsed.portstr);
|
||||
parsed.port = parsePort(!std::empty(remain) ? remain : getPortForScheme(parsed.scheme));
|
||||
}
|
||||
|
||||
// The path is terminated by the first question mark ("?") or
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint> // uint16_t
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
|
@ -33,12 +34,11 @@ struct tr_url_parsed_t
|
|||
std::string_view authority; // "example.com:80"
|
||||
std::string_view host; // "example.com"
|
||||
std::string_view sitename; // "example"
|
||||
std::string_view portstr; // "80"
|
||||
std::string_view path; // /"over/there"
|
||||
std::string_view query; // "name=ferret"
|
||||
std::string_view fragment; // "nose"
|
||||
std::string_view full; // "http://example.com:80/over/there?name=ferret#nose"
|
||||
int port = -1; // 80
|
||||
uint16_t port = 0;
|
||||
};
|
||||
|
||||
std::optional<tr_url_parsed_t> tr_urlParse(std::string_view url);
|
||||
|
|
|
@ -33,7 +33,6 @@ TEST_F(WebUtilsTest, urlParse)
|
|||
EXPECT_EQ("1"sv, parsed->host);
|
||||
EXPECT_EQ("1"sv, parsed->sitename);
|
||||
EXPECT_EQ(""sv, parsed->path);
|
||||
EXPECT_EQ("80"sv, parsed->portstr);
|
||||
EXPECT_EQ(""sv, parsed->query);
|
||||
EXPECT_EQ(""sv, parsed->fragment);
|
||||
EXPECT_EQ(80, parsed->port);
|
||||
|
@ -47,7 +46,6 @@ TEST_F(WebUtilsTest, urlParse)
|
|||
EXPECT_EQ("/some/path"sv, parsed->path);
|
||||
EXPECT_EQ(""sv, parsed->query);
|
||||
EXPECT_EQ(""sv, parsed->fragment);
|
||||
EXPECT_EQ("80"sv, parsed->portstr);
|
||||
EXPECT_EQ(80, parsed->port);
|
||||
|
||||
url = "http://www.some-tracker.org:8080/some/path"sv;
|
||||
|
@ -59,7 +57,6 @@ TEST_F(WebUtilsTest, urlParse)
|
|||
EXPECT_EQ("/some/path"sv, parsed->path);
|
||||
EXPECT_EQ(""sv, parsed->query);
|
||||
EXPECT_EQ(""sv, parsed->fragment);
|
||||
EXPECT_EQ("8080"sv, parsed->portstr);
|
||||
EXPECT_EQ(8080, parsed->port);
|
||||
|
||||
url = "http://www.some-tracker.org:8080/some/path?key=val&foo=bar#fragment"sv;
|
||||
|
@ -71,7 +68,6 @@ TEST_F(WebUtilsTest, urlParse)
|
|||
EXPECT_EQ("/some/path"sv, parsed->path);
|
||||
EXPECT_EQ("key=val&foo=bar"sv, parsed->query);
|
||||
EXPECT_EQ("fragment"sv, parsed->fragment);
|
||||
EXPECT_EQ("8080"sv, parsed->portstr);
|
||||
EXPECT_EQ(8080, parsed->port);
|
||||
|
||||
url =
|
||||
|
@ -94,7 +90,6 @@ TEST_F(WebUtilsTest, urlParse)
|
|||
"&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80"
|
||||
"&ws=http%3A%2F%2Ftransmissionbt.com"sv,
|
||||
parsed->query);
|
||||
EXPECT_EQ(""sv, parsed->portstr);
|
||||
|
||||
// test a host whose public suffix contains >1 dot
|
||||
url = "https://www.example.co.uk:8080/some/path"sv;
|
||||
|
@ -104,7 +99,6 @@ TEST_F(WebUtilsTest, urlParse)
|
|||
EXPECT_EQ("example"sv, parsed->sitename);
|
||||
EXPECT_EQ("www.example.co.uk"sv, parsed->host);
|
||||
EXPECT_EQ("/some/path"sv, parsed->path);
|
||||
EXPECT_EQ("8080"sv, parsed->portstr);
|
||||
EXPECT_EQ(8080, parsed->port);
|
||||
|
||||
// test a host that lacks a subdomain
|
||||
|
@ -115,7 +109,6 @@ TEST_F(WebUtilsTest, urlParse)
|
|||
EXPECT_EQ("some-tracker"sv, parsed->sitename);
|
||||
EXPECT_EQ("some-tracker.co.uk"sv, parsed->host);
|
||||
EXPECT_EQ("/some/other/path"sv, parsed->path);
|
||||
EXPECT_EQ("80"sv, parsed->portstr);
|
||||
EXPECT_EQ(80, parsed->port);
|
||||
|
||||
// test a host with an IP address
|
||||
|
@ -126,7 +119,6 @@ TEST_F(WebUtilsTest, urlParse)
|
|||
EXPECT_EQ("127.0.0.1"sv, parsed->sitename);
|
||||
EXPECT_EQ("127.0.0.1"sv, parsed->host);
|
||||
EXPECT_EQ("/some/path"sv, parsed->path);
|
||||
EXPECT_EQ("8080"sv, parsed->portstr);
|
||||
EXPECT_EQ(8080, parsed->port);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue