- Library is now compiled against JDK 11
- JBT-120:
UdpTrackerModule
now reads the incoming port fromTorrentClientSettings
in favor of duplicating it. - JBT-122: Rewrote the piece selection handling
PieceSelector
has been replaced byPiecePrioritzer
- Piece/Block request state management is no longer owned by
Peer
(has been moved to an internal class) Peer#getFreeWorkTime()
has been removedPeerStateAccess
has been introduced to expose state based on internal state
- #125: Changed ut-metadata module to use java.nio.Path instead of java.io.File
- #127: ut-metadata phases are now able to handle torrents that already have metadata
- Block requests are now rejected until we have a completed metadata fileset
- Introduced UtMetadata to build metadata fileset state according to download state
- JBT-123: Ignore block message for blocks that are not expecting block data
- JBT-104:
NioPeerConnector
is now available. This connector is optimized to run with out a dedicated thread but on the executor threads. - JBT-110:
TorrentClientSettings
is introduced onTorrentClient
to separate client state from configuration
- JBT-98: The network layer has been rewritten to be event driven in favor of polling.
- JBT-100:
AbstractPeerConnectionAcceptor
has been replaced byBitTorrentHandshakeHandler
- JBT-102:
ISocket
has been remodelled around Channels instead of Sockets. - JBT-104:
BitTorrentSocket
is now always a socket which has passed the handshake process. - JBT-99: Peer IO is now processed until it can no longer be executed without blocking.
- JBT-106: Unsupported tracker protocols no longer throw an exception but will log a warning and return
Optional#empty
- JBT-107: UDP Trackers now support the common
/announce
suffix. - JBT-116: Connection queue has been given a priority strategy to (mostly) evenly split over torrents.
- JBT-117:
Peer#addBlockRequest
now rejects when the peer is choked - JBT-117: Metadata phases now use a dedicated choking strategy to show interest into clients which have the metadata and the ut_metadata extension data
- JBT-110:
UtpModule
now reuses the download port set on theTorrentClient
- JBT-102:
Peer#getBitTorrentSocket()
is now deprecated. TheBitTorrentSocket
will become an internal class. Functionality will be replaced. - JBT-110:
UtpModule.Builder#listenOn(int)
now reuses the download port set on theTorrentClient
- JBT-110: Remote connections coming in through uTP now correctly get ignored when
isAcceptingConnections
is false.
- JBT-102:
BitTorrentSocket
has forgotten how to process handshakes.
- JBT-19: Support for HTTP(s) trackers with the
HttpTrackerModule
. - JBT-8: Support for base-32 magnet links.
- JBT-10: A dedicated class
Metadata
to represent the Torrent Metadata.
- JBT-59: Rebuild the uTP implementation from scratch. It's much more stable now
- JBT-39:
Optional<T>
types have been removed as arguments and overloads have been added to compensate. - JBT-10: The internal
Job
system now relies on theAbstractFileSet
of the givenPiece
. This makes the system more re-usable for other systems. - JBT-33: Doubled Torrent download throughput (According to integration test).
- JBT-70:
ISocket
andTcpSocket
have become part of the public API.
- JBT-44: Completion of pieces no longer has a chance to cause
IndexOutOfBounds
- JBT-75: The default included
PhaseData
no longer ingores choke states.
- JBT-50:
IBencodedValue#serialise()
now returnsbyte[]
instead ofString
to correctly be capable of handling Strings which represent byte arrays containing data which is not valid UTF-8. - JBT-10:
Peer#addBlockRequest
now accepts aPiece
instead of the index of the piece. - JBT-10:
Torrent#getMetadata
now returns a dedicated non-null Metadata object with an optionalAbstractFileSet
in case downloading the metadata is supported. - JBT-33:
TorrentClient
now requiresIRequestLimiter
to control how many requests a peer may have. TheRateBasedLimiter
is the old behaviour (but slightly improved to reach higher throughput).
- JBT-43:
IBencodedValue#asBytes
allows for efficient transport of string representing raw bytes (ex. the hashes in the .torrent file)
- JBT-32: Prevent reads on Piece#checkHash when the hash can't possibly be correct.
- JBT-38: uTP is now better capable of dealing with packet loss.
- JBT-40: The ITracker interface was not correctly added to the torrent lifecycle causes no peers to be fetched.
- JBT-41:
Torrent#isDownloadingMetadata()
returnedfalse
too early. This has been corrected. - JBT-42: Fix
FullPieceSelect
having inconsistent piece sorting. - JBT-43:
Bencoding
now takes in anInStream
and reads the input as raw bytes as intended by the spec. This also resolves the encoding issues.
- JBT-43:
Bencoding#getCharactersRead()
The corrected API takes in a stream which won't be consumed further than needed.
Initial release as Maven Module. With this release a lot of the code has been remade or refactored in order to be a modular and decoupled system.