Add announce_port support

The `announce_port` setting permits to overwrite the port passed along to trackers as the `&port=` parameter. If left as the default, the listening port is used. This setting is only meant for very special cases where a seed's listening port differs from the effectively exposed port (e.g., through external NAT-PMP). See https://github.com/arvidn/libtorrent/pull/7771 for an example use-case.

This PR adds the relevant setting alongside the existing `announce_ip` setting.

PR #21692.
This commit is contained in:
Maxime Thiebaut
2025-02-08 09:12:50 +01:00
committed by GitHub
parent 9c2e698514
commit 4406a3f173
7 changed files with 53 additions and 1 deletions

View File

@@ -473,6 +473,7 @@ void AppController::preferencesAction()
data[u"announce_to_all_trackers"_s] = session->announceToAllTrackers();
data[u"announce_to_all_tiers"_s] = session->announceToAllTiers();
data[u"announce_ip"_s] = session->announceIP();
data[u"announce_port"_s] = session->announcePort();
data[u"max_concurrent_http_announces"_s] = session->maxConcurrentHTTPAnnounces();
data[u"stop_tracker_timeout"_s] = session->stopTrackerTimeout();
// Peer Turnover
@@ -1144,6 +1145,8 @@ void AppController::setPreferencesAction()
const QHostAddress announceAddr {it.value().toString().trimmed()};
session->setAnnounceIP(announceAddr.isNull() ? QString {} : announceAddr.toString());
}
if (hasKey(u"announce_port"_s))
session->setAnnouncePort(it.value().toInt());
if (hasKey(u"max_concurrent_http_announces"_s))
session->setMaxConcurrentHTTPAnnounces(it.value().toInt());
if (hasKey(u"stop_tracker_timeout"_s))

View File

@@ -1621,6 +1621,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
<input type="text" id="announceIP" style="width: 15em;">
</td>
</tr>
<tr>
<td>
<label for="announcePort">QBT_TR(Port reported to trackers (requires restart) [0: listening port]:)QBT_TR[CONTEXT=OptionsDialog]&nbsp;<a href="https://www.libtorrent.org/reference-Settings.html#announce_port" target="_blank">(?)</a></label>
</td>
<td>
<input type="text" id="announcePort" style="width: 15em;">
</td>
</tr>
<tr>
<td>
<label for="maxConcurrentHTTPAnnounces">QBT_TR(Max concurrent HTTP announces:)QBT_TR[CONTEXT=OptionsDialog]&nbsp;<a href="https://www.libtorrent.org/reference-Settings.html#max_concurrent_http_announces" target="_blank">(?)</a></label>
@@ -2593,6 +2601,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
$("announceAllTrackers").checked = pref.announce_to_all_trackers;
$("announceAllTiers").checked = pref.announce_to_all_tiers;
$("announceIP").value = pref.announce_ip;
$("announcePort").value = pref.announce_port;
$("maxConcurrentHTTPAnnounces").value = pref.max_concurrent_http_announces;
$("stopTrackerTimeout").value = pref.stop_tracker_timeout;
$("peerTurnover").value = pref.peer_turnover;
@@ -3061,6 +3070,12 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
settings["announce_to_all_trackers"] = $("announceAllTrackers").checked;
settings["announce_to_all_tiers"] = $("announceAllTiers").checked;
settings["announce_ip"] = $("announceIP").value;
const announcePort = Number($("announcePort").value);
if (Number.isNaN(announcePort) || (announcePort < 0) || (announcePort > 65535)) {
alert("QBT_TR(The announce port must be between 0 and 65535.)QBT_TR[CONTEXT=OptionsDialog]");
return;
}
settings["announce_port"] = announcePort;
settings["max_concurrent_http_announces"] = Number($("maxConcurrentHTTPAnnounces").value);
settings["stop_tracker_timeout"] = Number($("stopTrackerTimeout").value);
settings["peer_turnover"] = Number($("peerTurnover").value);