qbittorrent / qBittorrent

qBittorrent BitTorrent client
https://www.qbittorrent.org
Other
26.13k stars 3.84k forks source link

Allow seeding private torrents with the same hash multiple times with different trackers #18933

Open somerandomcontrib opened 1 year ago

somerandomcontrib commented 1 year ago

Suggestion

Allow torrents with the same hash to be added to qBittorrent multiple times with different trackers.

Use case

This change would allow to reseed the same torrent to different private trackers.

Extra info/examples/attachments

Right now when you add private torrent with the same hash you're given the following error message: error BTW. If you're using WebUI there is no error message at all. The upload window just disappears.

The suggested action would be to ask a user if they want to add torrent with the same hash again or merge trackers with an existing torrent (only in case of a public torrent as is right now).

glassez commented 1 year ago

This change would allow to reseed the same torrent to different private trackers.

But doesn't this contradict the very essence of private torrents?

glassez commented 1 year ago

According to BEP_27:

When a BitTorrent client obtains a metainfo file containing the "private=1" key-value pair, it MUST ONLY announce itself to the private tracker, and MUST ONLY initiate connections to peers returned from the private tracker.

However, there is some another clause there:

When multiple trackers appear in the announce-list in the metainfo file of a private torrent, each peer MUST use only one tracker at a time and only switch between trackers when the current tracker fails. When switching between trackers, the peer MUST disconnect from all current peers and connect only to those provided from the new tracker.

So if libtorrent supports such a limited multitracker feature with private torrents, then we could try to provide the possibility of merging trackers for private torrents. @Chocobo1, @xavier2k6, @thalieht, what do you think? @arvidn, could you participate?

stalkerok commented 1 year ago

@somerandomcontrib, at the moment you can manually add multiple announces from private trackers.

somerandomcontrib commented 1 year ago

But doesn't this contradict the very essence of private torrents?

Probably yes, but if you're on multiple private trackers there is high chance you will find exactly the same file you have downloaded on the other tracker. If torrent slightly differs (for ex. different filenames) you can reseed the files without redownloading it using symbolic/hard link. In some cases torrent is exactly the same (only with different tracker URL) thus hash is exactly the same and when this happens qbitorrent won't let me allow another instance of this torrent.

What I'm asking is not the ability to merge trackers into private torrents but to have few instances of the same torrent with different trackers independent of each other.

glassez commented 1 year ago

to have few instances of the same torrent with different trackers independent of each other.

It is impossible.

Chocobo1 commented 1 year ago

What I'm asking is not the ability to merge trackers into private torrents but to have few instances of the same torrent with different trackers independent of each other.

You might want to look into this: https://www.reddit.com/r/qBittorrent/comments/93sepm/when_making_a_torrent_whats_the_source_line_for/ It was referring to the Source field under Tools -> Torrent Creator.

somerandomcontrib commented 1 year ago

@Chocobo1 Thanks I didn't know about this, but it still won't help me when downloading someone else's torrent. It's not as uncommon to have infohash collide between trackers. Especially in cases when torrent has only a single file.

I tested other BitTorrent clients behavior when adding private torrent with the same infohash: rTorrent: error uTorrent: error Deluge: trackers merged Transmission: error

I even tested the libtorrent-rasterbar's client_test example client and I also haven't been able to add 2 torrents with the same infohash. It looks like it's a libtorrent-rasterbar limitation rather than qBittorrent itself. Unfortunately there doesn't seem to be any client that would allow me to do this.

Right now I kinda solved it by just running another BitTorrent client alongside qBittorrent but it's annoying to have some torrents splitted between clients and also you need to forward second port for another client.

stalkerok commented 1 year ago

@somerandomcontrib, just add a second tracker manually.

somerandomcontrib commented 1 year ago

just add a second tracker manually.

That won't work. If you add second tracker to a private torrent it won't even try to connect to it as long as the first tracker is working. It looks like qBittorrent is actually following BitTorrent specification @glassez quoted.

stalkerok commented 1 year ago

@somerandomcontrib, try checking both boxes 2023-05-07_071443

Roardom commented 1 year ago

Sometime around 2017 or so, private trackers started editing all newly uploaded torrents to add a source key in the info dict to prevent this issue. Before private trackers added this feature, it was common for the same files to be uploaded to multiple trackers hashed with the same piece size, causing the same infohash to be used across multiple private trackers. Most users often use multiple torrent clients on different ports to continue seeding these files (either using multiple dockerized qbittorrent clients, or other completely different GUI clients from other developers). Adding multiple private trackers to the same torrent wouldn't be correct as peers can't be mixed between private trackers, and the upload/download stats have to be recorded per tracker instead of mixed together.

stalkerok commented 1 year ago

Just for example. 2023-05-07_205836

WoodpeckerBaby commented 1 year ago

I don't get what this means. I cross-seed RED and a few other trackers in qBit.

Just set source flag to different trackers in the torrent file.

WoodpeckerBaby commented 1 year ago

to have few instances of the same torrent with different trackers independent of each other.

It is impossible.

It's already possible, I've been doing that for a long time.

Al you need to do is to write something in the source field of the torrent file.

glassez commented 1 year ago

to have few instances of the same torrent with different trackers independent of each other.

It is impossible.

It's already possible, I've been doing that for a long time.

Al you need to do is to write something in the source field of the torrent file.

If you mean source field of info section then modifying it produces different torrent (i.e. torrent that has different info hash) although it distributes the same data.