From c0c00d0d191f647ebe09eba6e9e9817274933c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C5=93ur?= Date: Mon, 1 Apr 2024 18:53:04 +0200 Subject: [PATCH] Replace mac app default BindPort with a random port (#5102) --- macosx/Controller.mm | 11 +++++++++++ macosx/Defaults.plist | 2 -- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/macosx/Controller.mm b/macosx/Controller.mm index 367212ce4..1f84de1e3 100644 --- a/macosx/Controller.mm +++ b/macosx/Controller.mm @@ -510,6 +510,17 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool tr_variantDictAddInt(&settings, TR_KEY_peer_limit_global, [_fDefaults integerForKey:@"PeersTotal"]); tr_variantDictAddInt(&settings, TR_KEY_peer_limit_per_torrent, [_fDefaults integerForKey:@"PeersTorrent"]); + NSInteger bindPort = [_fDefaults integerForKey:@"BindPort"]; + if (bindPort <= 0 || bindPort > 65535) + { + // First launch, we avoid a default port to be less likely blocked on such port and to have more chances of success when connecting to swarms. + // Ideally, we should be setting port 0, then reading the port number assigned by the system and save that value. But that would be best handled by libtransmission itself. + // For now, we randomize the port as a Dynamic/Private/Ephemeral Port from 49152–65535 + // https://datatracker.ietf.org/doc/html/rfc6335#section-6 + uint16_t defaultPort = 49152 + arc4random_uniform(65536 - 49152); + [_fDefaults setInteger:defaultPort forKey:@"BindPort"]; + } + BOOL const randomPort = [_fDefaults boolForKey:@"RandomPort"]; tr_variantDictAddBool(&settings, TR_KEY_peer_port_random_on_start, randomPort); if (!randomPort) diff --git a/macosx/Defaults.plist b/macosx/Defaults.plist index c3ed9bdb3..115825501 100644 --- a/macosx/Defaults.plist +++ b/macosx/Defaults.plist @@ -14,8 +14,6 @@ BadgeUploadRate - BindPort - 51413 BlocklistAutoUpdate BlocklistNew