support numeric suffixes to magnet link parameter names

This commit is contained in:
arvidn 2019-02-15 14:34:27 +01:00 committed by Arvid Norberg
parent 42bf915437
commit 1b7884b220
3 changed files with 31 additions and 0 deletions

View File

@ -1,3 +1,4 @@
* support magnet link parameters with number siffixes
* consistently use "lt" namespace in examples and documentation
* fix Mingw build to use native cryptoAPI

View File

@ -185,6 +185,16 @@ namespace libtorrent {
string_view value;
std::tie(value, sv) = split_string(sv, '&');
// parameter names are allowed to have a .<number>-suffix.
// the number has no meaning, just strip it
// if the characters after the period are not digits, don't strip
// anything
string_view number;
string_view stripped_name;
std::tie(stripped_name, number) = split_string(name, '.');
if (std::all_of(number.begin(), number.end(), [](char const c) { return is_digit(c); } ))
name = stripped_name;
if (name == "dn"_sv) // display name
{
error_code e;

View File

@ -538,3 +538,23 @@ TORRENT_TEST(parse_magnet_select_only_invalid_quotes)
test_select_only("magnet:?xt=urn:btih:cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
"&dn=foo&so=\"1,2\"", {});
}
TORRENT_TEST(magnet_tr_x_uri)
{
add_torrent_params p = parse_magnet_uri("magnet:"
"?tr.0=udp://1"
"&tr.1=http://2"
"&tr=http://3"
"&xt=urn:btih:c352cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd");
TEST_CHECK((p.trackers == std::vector<std::string>{
"udp://1", "http://2", "http://3"}));
TEST_CHECK((p.tracker_tiers == std::vector<int>{0, 1, 2 }));
p = parse_magnet_uri("magnet:"
"?tr.a=udp://1"
"&tr.1=http://2"
"&xt=urn:btih:c352cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd");
TEST_CHECK((p.trackers == std::vector<std::string>{"http://2" }));
TEST_CHECK((p.tracker_tiers == std::vector<int>{0}));
}