Ecosyste.ms: OpenCollective

An open API service for software projects hosted on Open Collective.

github.com/alanmcgovern/monotorrent

The official repository for MonoTorrent, a bittorrent library for .NET
https://github.com/alanmcgovern/monotorrent

[tests] Update some tests to the new API

There's no need to manually call 'HandlePeerDisconnected' now.
This is called automatically as p...

8188519484e6aa22316a2fc11074f6d0769124b4 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Only have one HandlePeer[Dis]Connected method

This is a bit less ambiguous and confusing now. One
method is just for raising events, the other...

4cf3ce46b57c17b2de6135d664f7d025e3eab674 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Fix some build warnings

77a8a03b6c07bf58e5a45451467f7a0f87625596 authored almost 2 years ago by Alan McGovern <[email protected]>
Merge pull request #574 from alanmcgovern/maybe-fix-failure-on-build-pipeline

[tests] Stop the HttpListener as part of teardown

e3da4c22c4d966191b34cfa674365df3679df3df authored almost 2 years ago by Alan McGovern <[email protected]>
[tests] Stop the HttpListener as part of teardown

Maybe there's a bug in the finalizer chain and it's
causing this crash during app shutdown:

The...

92b77f0b13bdadc8a764d096d5d14fa66ba61992 authored almost 2 years ago by Alan McGovern <[email protected]>
Merge pull request #572 from alanmcgovern/fix-tracker-announce-concurrency

[core] Refactor how announce requests are handled.

72339231604f236d1d5e78e81b14c4ab5e7fbe11 authored almost 2 years ago by Alan McGovern <[email protected]>
[tests] Add tests covering the previous changes

b78a3604a431303ee1acb797b4444c83fd62a7e7 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Allow 15 concurrent tracker requests

01572c0b4b273f74b0a63cf0e1113310b1935332 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Refactor how announce requests are handled.

This should prevent unbounded memory usage by ensuring
all 'periodic' announces fast-path and ex...

bf051d8f310454d9a1cbc5b8930b79ebdbd55339 authored almost 2 years ago by Alan McGovern <[email protected]>
Merge pull request #568 from alanmcgovern/handle-timeouts-requesting-metadata

Handle timeouts requesting metadata

420cb93d06d41e7c30609aceefdb8eade654f074 authored almost 2 years ago by Alan McGovern <[email protected]>
[tests] Ensure tests don't hit upnp port forwarding

These are short running tests, so don't bother init'ing
port forwarding support or DHT.

e4fd8fb769ed9b115a45abc01d175c127e0d9cc2 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Fix a race condition in the new tests

It's possible for the state to be 'Downloading' and
for 100% of the file to have been downloaded...

5ae9852be48b7d1f04cb44373f334e914b9f70c0 authored almost 2 years ago by Alan McGovern <[email protected]>
[tests] Fix the integration tests to run on my computer

Bind directly to 127.0.0.1 instead of using +.

077e9ee6c56657499139dc3dc5c01c268c4d33a6 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Simplify (re)setting LastBlockReceived

This should be accurately tracked in the 3 places it's used.

192f29e2a210aee3226fa462f44f2aa5c23727ce authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Ensure timeouts apply for MetadataMode and PieceHashesMode

If a block is requested from a peer when fetching metadata, or
when fetching the piece hashes of...

49d5a6b5211a9b5eb655ea3ee639d406404cb557 authored almost 2 years ago by Alan McGovern <[email protected]>
Merge pull request #567 from borigas/IntegrationTests

Integration tests

4269be6f3049e0367dcf173bec298a9e2a35d91e authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Simplify (re)setting LastBlockReceived

This should be accurately tracked in the 3 places it's used.

145b5df1cf63679d06e835e829b76ca91c54c62e authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Ensure timeouts apply for MetadataMode and PieceHashesMode

If a block is requested from a peer when fetching metadata, or
when fetching the piece hashes of...

dc319770a649801e988928445e7d98a3464820b4 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Remove PieceRequesterSettings.IgnoreChokeState

This was a hack which shouldn't be in the public API.
There are (now!) two cases where we need a...

70a00ac28b48f8235e8247b1d5fb45c5fe410c3f authored almost 2 years ago by Alan McGovern <[email protected]>
Fix seeding assert

77c45a9aa402222fb93d33b51a245332f771fce7 authored almost 2 years ago by Ben Origas <[email protected]>
Set cache dir

083e9d98c22f10ead96443426935b324bf365264 authored almost 2 years ago by Ben Origas <[email protected]>
Add checks for implicit hash check

b7adf31b842dc97151f110a9ed98d2fbd10e90b8 authored almost 2 years ago by Ben Origas <[email protected]>
Initial integration tests

6e03e3d222f7e599453244598467393abd369017 authored almost 2 years ago by Ben Origas <[email protected]>
Merge pull request #565 from alanmcgovern/more-fixes-for-empty-files

More fixes for empty files

169865c26ce0e62b576f2f4cfc89c21978278775 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Always create empty files when starting a torrent

Empty files are always created on disk as part of starting
the torrent. This simplifies some of ...

3e04af0291571a40a2e9da252803bd029a9f487a authored almost 2 years ago by Alan McGovern <[email protected]>
Files with no content should have no piece root.

WHen checking the hash of piece 0, we should skip past files
with a length of 0. This is importa...

82160bfc95021ca39812038c50532e171b61cfd7 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Add a comment explaining why empty dicts are ok

The spec requires a dictionary to be there, even if it's empty.
qBittorrent also includes an emp...

bec6559af4437d6551d92876ad5a00afad6aeb0b authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Remove a sanity check which doesn't make sense anymore

Both BEP47 (padding files) and BEP52 (BitTorrent V2) introduce the
ability to request blocks whi...

48f00e6d57b3d0ece45862b4324ab64f2c043da7 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Sort files before creating hybrid or v2 torrents

As the underlying storage is a bencoded dictionary, whose
keys must be sorted, you *must* sort t...

3d3937dbdfe44a81923db9d04c25c9c6a1ee0296 authored almost 2 years ago by Alan McGovern <[email protected]>
Merge pull request #562 from alanmcgovern/fix-560-zero-length-files-v2

[bep52] Fix creating v2 torrents with zero length files

eed0a6ef6d3f8cba553a46a2918d95d98aabe8ed authored almost 2 years ago by Alan McGovern <[email protected]>
[bep52] Fix creating v2 torrents with zero length files

Zero length files should not have a root hash as they have
no data. Skip them!

Fixes https://gi...

18a7e84b8d37867967fa101cf627a3c64397d06b authored almost 2 years ago by Alan McGovern <[email protected]>
[bep52] Set the v2 infohash when the first file is empty

The previous logic did not take into account the fact that
the first file could be empty, in whi...

7c8cf1cd4b5e0a12512e130b0a916914d5d2d412 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Correctly write the bittorrent v2 version attribute

This should be in the 'info' dictionary so it's part of
the infohash.

00dedcb91d030d716bd7d38b28d8e8c4f64ce66a authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Ban torrents with length 0

libtorrent also refuses to create torrents when all selected files have
a length of zero. As suc...

5f86349ad8c10153ed36dcd3c14d2b30376e6aad authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Properly clean up disconnected peers from the UnchokeManager

When peers are disposed, their message queue is also disposed, which
forbids new messages from b...

907c4aab786570e32e3fd81d16e1ae7d4afee817 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Use the .NET5 runtime feature to allocate pre-pinned arrays

All of these arrays end up pinned as they're used for FileStream
or Socket reads/writes.

By all...

1e7b28bc3f2f395fbb0d482cb31440f4b1dc4a0f authored almost 2 years ago by Alan McGovern <[email protected]>
[samples] Just load the filepath directly into the engine

It's better for samples to do things in the blessed way so that
people who replicate samples get...

647ed21505a4b94862c157b648929e35c656db37 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Don't constantly create unnecessary IPAddress objects

We just want the octets of the ipaddress written to a Span<byte>
in network order. It's not hard...

81e4a9ea72ef1f00be11fd957dd41539ee46be09 authored almost 2 years ago by Alan McGovern <[email protected]>
[samples] Update the sample client to Mono.Net 3.0.4

0a33930856d3af802cabe483eac341d2bc6fa131 authored almost 2 years ago by Alan McGovern <[email protected]>
[core] Try to enqueue fewer async tasks

Enqueue tasks in a List<T> rather than enqueuing them
with the threadpool. Should be slightly mo...

4fe509fdf7a191c208161895dc0339c7cb9fad8c authored about 2 years ago by Alan McGovern <[email protected]>
[core] Add tests for the peer exchange changes

4c96cffcb7d22468c1abcc66f388068594149e9f authored about 2 years ago by Alan McGovern <[email protected]>
Improve peer message cache logic

c49ad333051313bcaf1c4b777bf472c2cff3a9a1 authored about 2 years ago by Alan McGovern <[email protected]>
Merge pull request #558 from alanmcgovern/small-perf-and-memory-optimisations

Small perf and memory optimisations

d63ceddd0cf271aeb08ed6a7a6fe07188bc7c79b authored about 2 years ago by Alan McGovern <[email protected]>
[core] Replace a dictionary with a generic cache

The power of type specialisation turns this dictionary lookup into
a simple method call. Zoom.

c84938b92773fa3795a302763828217a1e82c93c authored about 2 years ago by Alan McGovern <[email protected]>
[core] Rename the containing file

517ee0f9d24bd673294c779b83e8f7bdb367e92f authored about 2 years ago by Alan McGovern <[email protected]>
Update the stress test for the new API

021633200763c03b8577871558b8cedb5db0e647 authored about 2 years ago by Alan McGovern <[email protected]>
[core] Use Span methods to create allowed fast sets

21ec3afc8715170c07dd448138ad68aaac66e7d7 authored about 2 years ago by Alan McGovern <[email protected]>
[core] Add a proper Equals/GetHashCode override for this

We use List.Remove so we should ensure that we have a proper
Equals method so we don't fall back...

0b28518bc7e3b577f155e26b928cf83f87d24676 authored about 2 years ago by Alan McGovern <[email protected]>
[messaging] Use an AllowedFastBundle

7ff2ee869c8cca4fa185e8f7f608bc5cc6a4aece authored about 2 years ago by Alan McGovern <[email protected]>
[piecepicking] Use a HashSet rather than out IList in the API

If we want a collection of the distinct peers which a piece was
fetched from, we should just use...

90e89d540c1909a5ff96ca5a7bb4da96e38b25a3 authored about 2 years ago by Alan McGovern <[email protected]>
[core] Refactor IPiecePicker to return bools and use out variables

This makes things a bit more consistent. The most common usecase
of this was to check if the nul...

772484f0d81c5031b3410f0a76355a362764dd8c authored about 2 years ago by Alan McGovern <[email protected]>
[core] Remove a dead variable

fcbb849fa7781115947930dd0d9f016dce96ba58 authored about 2 years ago by Alan McGovern <[email protected]>
Merge pull request #557 from alanmcgovern/update-filestreamcache

Tidy up DiskWriter

95d482389e71baf36ec67d572e3aaaf15fb6117e authored about 2 years ago by Alan McGovern <[email protected]>
flush

0bd7f76bea5e9f5cbd5a01a1d5f46812edc1abe9 authored about 2 years ago by Alan McGovern <[email protected]>
[core] Compile net6.0 versions of some libraries

7dc4779641b85d20f439434fee47351952dcac96 authored about 2 years ago by Alan McGovern <[email protected]>
[piecepicking] Use PieceSegment instead of BlockInfo

Piecepicking works on segments, not blocks. They just care about
how many blocks there are in ea...

c4770dc71c38803fc174a40fe82bb34f3e7021e6 authored about 2 years ago by Alan McGovern <[email protected]>
[piecepicking] Hide these extension methods

They're only used by tests

68b8fea43623f416f5b89aa3919569bb3a4bc45e authored about 2 years ago by Alan McGovern <[email protected]>
[bencoding] Use a readonly struct

Clean up the API a little

6eb7fce2fc9c8a57bdb02ead99853c7cd16ae0cd authored about 2 years ago by Alan McGovern <[email protected]>
[core] Emit 'Hashed' events from TorrentCreator

Fixup from prior reworking of this class.

cf278cdd2618e973ae2ea97a5663a0a3e538d110 authored about 2 years ago by Alan McGovern <[email protected]>
Add a downloads badge too

70fa6e8b6bb6640fa0d884bce263b5b8b68989b0 authored about 2 years ago by Alan McGovern <[email protected]>
Update NuGet badges too

a8ab485858cd90293f047286a6571c2e6e3da982 authored about 2 years ago by Alan McGovern <[email protected]>
Update the badges

6028eef19a9b49a7ef2c93876bd844baf3fa6244 authored about 2 years ago by Alan McGovern <[email protected]>
Set up CI with Azure Pipelines yaml

Migrate to a yaml based solution [skip ci]

b2fa7469cb984fa09a4bbff833c304866f5170ce authored about 2 years ago by Alan McGovern <[email protected]>
[core] Push a change to the sample

b9d8681451ebbbcf34cdc9876d672065fd43f230 authored about 2 years ago by Alan McGovern <[email protected]>
[core] Improve primary/secondary piece cancellation requests

Fix a bug whereby the 'most recent request' wasn't cleared correctly
if two peers were tasked wi...

16d7a26be12b662ef4fab27d7339813c70cd84b7 authored about 2 years ago by alan.mcgovern <[email protected]>
[samples] Update the vlc path

This works for me :)

748aef04f3873348fd40389ff8f0c0631999bc72 authored about 2 years ago by alan.mcgovern <[email protected]>
[core] Fix some cleanup code

We should cancel all pending requests before disposing the message
queue.

90cdd8a806aaab5d0767cd9d1c4994176d5d4b21 authored about 2 years ago by alan.mcgovern <[email protected]>
[core] Use a string based HTTP prefix

Also expand the API for IUriStream/IHTTPStream to better support
using + or * as part of the HTT...

63dc93c549964ef993109b39094eb7cc55511743 authored about 2 years ago by alan.mcgovern <[email protected]>
Merge pull request #549 from alanmcgovern/configurable-http-prefix

[core] Make the Http streaming uri configurable

888e39a62a5724d1c673f3326bf2ac06b42fd04f authored about 2 years ago by Alan McGovern <[email protected]>
[core] Make the Http streaming uri configurable

THe library can now be configured to use any ip or port when
setting up the HttpListener to serv...

220efd2386889f69fc2fcacf53f4820ca65e38fd authored about 2 years ago by Alan McGovern <[email protected]>
[tests] Change an async void -> async Task

Fixes a buggy test.

beb6930ce1f568c6b7d1ee803b43eb3034b7945b authored over 2 years ago by Alan McGovern <[email protected]>
[core] target .net5 first

This will make the framework version selector automatically
choose 5.0 when working within the IDE.

6ab286b143395172a7c66414abd3ed0ee2c84a2a authored over 2 years ago by Alan McGovern <[email protected]>
Update dependencies

542fed2c434325e46f69fe6ffe1336b9f5a3e20c authored over 2 years ago by Alan McGovern <[email protected]>
Prepare the first beta release

224728409d7a183cabb68a3c5cf2cfaf79123a09 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Fix some null warnings

f3d05ffe4d3a6c94163f2bb86542411612e612d4 authored over 2 years ago by Alan McGovern <[email protected]>
[core] misc cleanups

9b3a29687fd25b2f044324833bf16212117587e5 authored over 2 years ago by Alan McGovern <[email protected]>
Merge pull request #547 from alanmcgovern/cache-v2-hashes

[core] Cache bittorrent v2 hashes after retrieving them

e78ebfa66f0926642b715ab3e91fafc49b5b7cc8 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Cache bittorrent v2 hashes after retrieving them

If a V2 (or hybrid) magnet link is used and the v2 hashes are missing,
then we will fetch them f...

57047c8a67e05b9641047a2829f13b25ff95f1b9 authored over 2 years ago by alan.mcgovern <[email protected]>
Merge pull request #546 from alanmcgovern/dht-fix

[dht] Fix a DHT initialization issue

56d4bcc4d95cdcf93cd1117e5e4c93b53f521f51 authored over 2 years ago by Alan McGovern <[email protected]>
[dht] Fix an initialization issue

Handle adding nodes to the engine before calling StartAsync.

36ae567e32112d9f51cf75e827da4490a72d3a87 authored over 2 years ago by Alan McGovern <[email protected]>
[tests] Make this a little simpler

848d1ad06a0c2364f645d1c25e7e3b4c1ca38458 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Add tests covering MessageQueue disposing

Further tweaks to message queue to finally add the disposes
which are needed to avoid losing buf...

1a78f84cf8c1021225321d0fa4643003be4c52f0 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Put ReusableTaskCompletionSources back in the cache

Oops :)

Now these are cached correctly!

e49ee9773dd8f76c37e706fd3af4247de3204bfa authored over 2 years ago by Alan McGovern <[email protected]>
[core] Clean up some caches when needed

Ensure we don't keep peer info alive forever at the end
of a cached/reused array.

85fe57ac4aeb2fe7019b9f18235d9ea47a7b15b7 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Release all messages when closing connections

If there are any pending sends/receives, ensure we dispose
them and release them back to their c...

a66c5f95b7c635fa81fcd3fc0d0c81df112b2bdf authored over 2 years ago by Alan McGovern <[email protected]>
[core] Send have messages every 5 seconds

We can glob these together so we don't send N messages twice
every second.

feccc7fbb543046fa5647ca408290c1e012e9ce8 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Disable an unnecessary test

561369b72ceef420227d9e86e5955475a2a52f73 authored over 2 years ago by Alan McGovern <[email protected]>
[dht] Announce V1 and truncated V2 infohashes to DHT

This ensures that the delayed announce, the one that
occurs when the engine completes initializa...

9902cf52a4b7d332715bd003ab4bc11a03dc183e authored over 2 years ago by Alan McGovern <[email protected]>
[core] Support V1 and V2 encrypted connections

Both the V1 hash and the truncated V2 hash should be addded
as skeys.

88789cd7f3f172790177bb24187bf93aee9a7a92 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Support checking the length of v1 and v2 pieces

For hybrid torrents we will need to be able to distinguish
between V1 and V2 pieces.

V1 peers c...

4cb2449c86fda2877bcc7e6a761d7ed2b26fbf56 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Add the ability to expand infohashes to full V2 hash

If we receive a truncated infohash we should have an easy way
to expand it into the full 32byte ...

d8c1b3529eb80ecd9555ee316c38d3caf58af6f6 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Hide 'Peer' internally

Rely on PeerInfo as the public interface for peers which have
no active connection.

PeerId is s...

fc64c0192d88ae823d082566fcd84da7f049aef3 authored over 2 years ago by Alan McGovern <[email protected]>
[dht] Fix some threading issues in DHT

Add some DEBUG only thread checks to ensure that dht related
tasks are really executing on the c...

a4a61b6d42db5685a364c522ac571040713aded7 authored over 2 years ago by Alan McGovern <[email protected]>
Merge pull request #544 from alanmcgovern/faster-torrent-creator

[core] Optimise TorrentCreator performance

7ccfa968b344986acad6392a710f2ac6b9270b4f authored over 2 years ago by Alan McGovern <[email protected]>
[core] Optimise TorrentCreator performance

Use some fancier threading here to ensure disk IO happens in
parallel with hashing data.

e30b8bf179fcc0274dd4bb3e9fa5864f1a85bfe1 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Fix a threading issue when caching reads

We need to be on the correct thread for this. Do not use a
ConfigureAWait (false) or there will ...

388aacff7644a2e6c21d79bddbc8be176e4d3b67 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Add a zero-contention fastpath to ReusableExclusiveSemaphore

Increment a count when the lock is acquired, and decrement it when
it's released.

If the lock i...

c7a12ec9660eb9bd16f474fc300d36bf428369a2 authored over 2 years ago by Alan McGovern <[email protected]>
[core] Simplify calculating merkle roots

Add a simple method to calculate and return the merkle root
of a given set of hashes.

67efca5268e9baba48a27d3d3a3e15f79ba5090e authored over 2 years ago by Alan McGovern <[email protected]>
Identify BEP 47 and BEP 52 as being supported

ae314f5d19c7e751fe850af72cd6b2cc8b98e317 authored over 2 years ago by Alan McGovern <[email protected]>
Merge pull request #543 from alanmcgovern/test-hasher-changes

Add support for creating V1/V2 hybrid torrents, and V2 torrents

c8cc7f03cc235cb4e80d4af2867728a837e27b70 authored over 2 years ago by Alan McGovern <[email protected]>