Skip to content

0.6.0

Latest

Choose a tag to compare

@daniboybye daniboybye released this 04 Aug 14:54

Added

  • BEP 14 (LSD): Local Service Discovery via UDP multicast (BT-SEARCH)
  • BEP 19 (WebSeed): HTTP Range seeding from url-list via Torrent.WebSeed
  • BEP 48: periodic tracker scrape; skip confirmed dead-swarm announce URLs
  • BEP 52 (phases 1–2/6): detect v1/hybrid/v2, parse peers' v2 handshake capability; accept hybrid torrents/magnets; reject pure-v2 cleanly
  • Lazy piece storage: on-demand piece read/write/verify workers with idle terminate
  • Peer.ConnectionManager: outbound dial orchestration with per-family throttle
  • Mid-download session checkpoint (bitfield + counters every 30s)
  • Magnet x.pe peers kept as live dial candidates after metadata fetch
  • Developer quality gate: warnings-as-errors compile, Dialyzer, and all enabled Credo checks at every priority via mix quality

Changed

  • Magnet.Connection sources its BEP 3 choke/unchoke/interested wire ids from Peer.Const instead of a local copy
  • CI publish workflow renamed to build-and-publish, gated to run mix hex.publish on semver tag pushes

Fixed

  • NAT-PMP and UPnP passive UDP receive handling now decodes the datagram payload instead of the source-address tuple
  • Global 2 MiB recv-buffer ceiling now bounds every wire frame's declared length, not only the six previously-capped ids
  • Per-connection stall watchdog disconnects peers that trickle a declared frame length in forever instead of completing it
  • Declared bitfield/piece frame lengths capped ahead of buffering, closing a memory-amplification gap alongside the existing LTEP/BEP 52 caps
  • Tracker started is now resent on the first announce of every session (e.g. after a cold restart), not only once per info hash ever