btfs icon indicating copy to clipboard operation
btfs copied to clipboard

Add support for I2P torrents

Open TheNain38 opened this issue 8 years ago • 23 comments

It would be cool to be able to use BTFS with I2P torrents :)

Maybe #9 could be updated to add I2P support? Because libtorrent-rasterbar support I2P_proxy option: http://www.libtorrent.org/reference-Settings.html and you could also add this option allow_i2p_mixed http://www.libtorrent.org/reference-Settings.html#allow_i2p_mixed

TheNain38 avatar Jan 10 '16 15:01 TheNain38

Metadata collection is done through curl, which does not support i2p as far as I can tell.

PlasmaPower avatar Jan 10 '16 15:01 PlasmaPower

However, only http and https metadata collection is done through curl. If I2P support was implemented for other types of torrents, would that work for you?

PlasmaPower avatar Jan 19 '16 20:01 PlasmaPower

It would be for I2P torrents only, not for normal torrents

TheNain38 avatar Jan 19 '16 20:01 TheNain38

Sorry, I'm not quite sure how an I2P torrent is different than a normal one - is there a different format? I had assumed it was just a proxy type.

PlasmaPower avatar Jan 19 '16 21:01 PlasmaPower

Yes it is just a proxy type, but I don't know how metadata collection can be done... Maybe @str4d could help here to give some details ^^ (He is an I2P developer)

TheNain38 avatar Jan 19 '16 21:01 TheNain38

Is it possible I2P torrents are already supported? Looking in libtorrent, there's already some code to check if a torrent is an I2P torrent, and code to deal with I2P torrents. Is there a difference between an I2P torrent and an I2P proxy?

PlasmaPower avatar Jan 19 '16 21:01 PlasmaPower

In libtorrent-rasterbar it is just a type of proxy. Also, when saying I2P proxy, in fact it is the address of the SAM TCP bridge which communicates with the I2P router. What I said is that I don't know how metadata collection could be done using curl...

TheNain38 avatar Jan 19 '16 21:01 TheNain38

Does an I2P torrent start with http:, https:, magnet:, something else, or is it a file?

PlasmaPower avatar Jan 19 '16 21:01 PlasmaPower

It is like normal torrents, it just uses I2P trackers and also I2P peers, but it should use I2P to get the file if an url is specified

TheNain38 avatar Jan 19 '16 21:01 TheNain38

@PlasmaPower an I2P torrent is a regular torrent running over the I2P network. In fact, if there are bridging nodes (torrent peers connected both to clearnet and I2P swarms) then a clearnet magnet link or torrent file can often be opened up with an I2P torrent client. See the documentation for further details, although most of that should be abstracted behind libtorrent. And yes, when the libtorrent documentation refers to "I2P proxy" it really means "I2P SAM API", because that is the API that libtorrent is using to make I2P connections via the user's I2P router.

If you separately wanted to connect to trackers outside of libtorrent, then you could use the I2P HTTP proxy (which by default is 127.0.0.1:4444, though a config option should be provided to change it, as with the SAM API).

str4d avatar Jan 21 '16 05:01 str4d

I think I2P support should be in the latest version of my proxy support PR. Could someone check if it works?

PlasmaPower avatar Jan 21 '16 14:01 PlasmaPower

@PlasmaPower Tested this command with i2pd and it didn't work. btfs --i2p-http-proxy=http://127.0.0.1:4446 --proxy-type=i2p

donat-b avatar Jan 21 '16 16:01 donat-b

@donat-b If you pass -f to btfs, does it output any errors/warnings? Also, I should be able to troubleshoot it myself in ~5 hours when I'm not on a network that probably blocks i2p.

Edit: Oh, also, you might need a proxy hostname+port (specified with --proxy), from the libtorrent documentation:

The only used fields in the proxy settings structs are hostname and port.

PlasmaPower avatar Jan 21 '16 16:01 PlasmaPower

@PlasmaPower no errors or anything suspicious. It's just not receiving anything, I guess.

donat-b avatar Jan 21 '16 16:01 donat-b

@donat-b with the config options in that PR, I believe you need to run:

btfs --proxy=127.0.0.1:7656 --proxy-type=i2p --i2p-http-proxy=127.0.0.1:4446

ie. SAM port must be specified, and I don't believe the http:// is necessary (but I could be wrong on that).

@PlasmaPower 127.0.0.1:7656 is the default SAM API port, which you could use for --proxy by default if --proxy-type=i2p (but of course listen to --proxy if set).

str4d avatar Jan 21 '16 16:01 str4d

@str4d I'll look into implementing a default, but yeah, that's what I edited into my post. Also, yes the http:// is optional.

PlasmaPower avatar Jan 21 '16 16:01 PlasmaPower

I've added a default for i2p proxies.

PlasmaPower avatar Jan 21 '16 17:01 PlasmaPower

I've gotten i2pd setup, and metadata collection through i2p is now working. However, it seems to stall whenever you try to cat a "file". I'll look into this more tomorrow.

PlasmaPower avatar Jan 22 '16 02:01 PlasmaPower

In your setup you should make sure you enabled SAM, because by default it isn't

TheNain38 avatar Jan 22 '16 08:01 TheNain38

I enabled SAM and ensured that the port was open, but still nothing when I try to cat a file. Any ideas for how to investigate? The log.txt just has Azureus5.7.0.0.jar added, and there's nothing from the console when running with -f. Looking at it with -d, it would appear that the read calls are locking up as expected.

PlasmaPower avatar Jan 22 '16 13:01 PlasmaPower

Oh, also, it's really annoying because the cat process gets locked up in the D state, so it's a bit of a pain to clean up.

PlasmaPower avatar Jan 22 '16 13:01 PlasmaPower

@PlasmaPower that's exactly the result I have.

donat-b avatar Jan 22 '16 14:01 donat-b

Just FYI, I2P has launched a development program aimed at helping developers integrate I2P into their apps. If you'd like some help with this in July during our Apps month, let me know! We are currently in APIs month, and have a contributor looking at updating/improving libtorrent's I2P support.

str4d avatar Jun 09 '16 23:06 str4d