DizzyTorrent is a functional BitTorrent client implemented for the Amiga 68k
that operates on real classic hardware, and can be controlled with
or without a GUI and with AREXX.
DizzyTorrent is also tested to work on PPC AmigaOS4.1, and MorphOS 3.9+.
Please do not use this program for copyright infringement or the distribution
of any data which may be prohibited or unlawful. DizzyTorrent is intended for
the distribution/downloading of legal content archives such as public domain
classic movies, software distributions, or materials specifically allowed by
Full Documentation in AmigaGuide format: dizzytorrent.guide.
THIS SOFTWARE IS PROVIDED AS IS.
NO WARANTEE IS MADE AS TO THE SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE AND
THE AUTHOR ASSUMES NO RESPONSIBILITY FOR ANY DAMAGE IT MAY CAUSE.
IF YOU USE THIS SOFTWARE YOU AGREE THAT YOU UNDERSTAND AND ACCEPT ALL RISKS.
DizzyTorrent is copyright (c) David Zvekic 2016-2018.
Permission is granted to copy and distribute this entire archive provided that
it is not modified, no fee is charged beyond the reasonable cost of
distribution, no misrepresentation is made regarding authorship, and this
copyright notice remains intact.
The source code of DizzyTorrent is not provided in this archive and all rights
are reserved to the Author, David Zvekic.
DizzyTorrent is based on the BitTorrent protocol specification but no part is
derived from any BitTorrent software, object or source code.
Portions of DizzyTorrent are derived from the TLSF Memory Allocation
Implementation by Matthew Conte and adapted for use with AmigaOS, Motorolla
68020 and DizzyTorrent. This use is governed by a BSD style license which only
requires credit to the author, and no distribution of source code.
Please see LICENSE.txt for credit and license details.
DizzyTorrent Version History
1.11 October 6 2018
* Reduced CPU usage - minor bug introduced a busy-wait not apparent on my
1.10 September 30 2018
* Since v1.07 CHOKE messages were sent inappropriately, causing some peers
to not receive data from DizzyTorrent even though local client
is sending. fixed
* client may not recognize that a peer has needed pieces to share unless
peer has 100% of pieces (since 1.07) - fixed.
* Example dz.config file has Delay setting set too high for newer improved
throttling mechanism this would cause very slow performance on fast
machines. Internal default delay of 0 is now almost always the best.
1.09 September 16 2018
* Fixed buffer overrun bug that would cause application crash on torrents
with more than aproximately 60 trackers, or 110 files.
1.08 September 1 2018
* resource balancing, performance, and stability improvements.
* Fixed occasional crash when shutting down program while downloading.
* Improved support for BEP-20 PeerID Convention using -DZxxxx- PeerID.
* Improved support for BEP-10 Extension Protocol - now transmiting Client
Version 'v' as well as 'reqq' messages.
* dizzytorrent.guide file was accidentaly saved with CRLF text format. Not
correct AmigaOS LF format. This made it unreadable by Multiview.
* New AREXX command - SetThrottleDelay, SetMaxPeers
1.07 August 28 2018
* resource balancing, performance, and stability improvements.
* Significantly reduced OS memory fragmentation during process lifecycle.
* fixed 5 memory leaks.
* DizzyTorrent could try to connect to itself when behind a NAT. fixed.
* PeerID was not properly randomized. fixed.
* Bug preventing upload to other peers fixed.
* Program will now exit automatically if launched with NOGUI and ARexx is
not available. (without AREXX or GUI there is no way to control program)
* Added BanPeer,UnbanPeer,KillPeer,KillAllPeers, MemReport Arexx commands.
* Added more information to GetPeerStatus : ProcessCycles
* Added more information to GetTorrentStatus : InvocationTime
* Bug which let DizzyTorrent stay connected to an idle peer without
any KeepAlive messages fixed.
* Improved accuracy of bandwidth throttling mechanism.
1.06 August 2 2018
* AREXX GetTorrentStatus(), GetFileStatus(), GetTorrentFiles() was only
updating if the mainwindow is not hidden.
* 'About' window now displays ARexx port name.
* DizzyTorrent AREXX reference improvements, errata.
* Use ReadArgs( )to parse command line switches. Amiga User Interface Style
* New command line switch PORTNAME to set AREXX portname
* New command line switch NOGUI to start with no GUI active.
* New command line switch SETTINGS to override default settings file
* Changes in AREXX Api to use standard Amiga templates.
* Removed some some overlap in AREXX Api.
* Added AREXX HELP, DizzyTorrent command.
* AREXX API now returns error details in RC2 variable.
* Created /arexx/ subdirectory and ARexx program dz-status.rexx to allow
checking status of DizzyTorrent when there is no GUI
* DizzyTorrent AREXX can now be addressed with the ADDRESS command and no
longer automatically loads itself as a function library.
1.05 July 18 2018
* Virtually all functionality can be controlled via AREXX, including
hidden mode to remove GUI to run as a background resident process.
* Moved Documentation into AmigaGuide format dizzytorrent.guide.
* Readme file now only contains history.
1.04 April 5 2018
* OS4.1 FE when the last byte in a file lines up with the piece boundary,
program could not complete the download. 1.03 showed error. Earlier
versions become slower and appeared to stop downloading. Fixed.
* GUI - Torrent comments now adjust wrap width when window it resized.
* Hitting cancel on file requestor would cause program to exit without
closing shared libraries - fixed.
* Morphos 3.9+: SetSocketSignal caused undefined side effects on MorphOS.
Replaced with SocketBaseTagList. MorphOS reported that
graphics.library can't be opened.
* Morphos: Proportional gadget didn't work due to different treatment of
excessive PGA_Visible attributed. Fixed.
* Minor improvements to GUI cpu efficiency.
1.03 March 30 2018
* Fixed Bug: Peers that didn't complete a handshake could stay alive
* Fixed Bug: a number of illegal memory accesses - (caused grim reapers in
OS4.1. Probably caused less frequent problems in OS2 and 3 as well).
* Some rules regarding gadgets that OS4 enforces which I can't find
documentation of in 3.x, are now followed, removing some grim reapers.
* Main window now opens only after the torrent file is read and processed.
* A 1-time memory allocation at program launch was missing an associated
deallocation - losing as much ram as the filesize of the torrent file.
* Peer info page was rendering information about 'suspended peers',
which have no current TCP connection. Removed this information.
* Improved handling of in-memory peer list.
* CTRL-C was incorrectly interrupting sockets.
* Trackers are polled less frequently, slightly reducing overhead in
torrents with many trackers.
* ixemul.library is no longer used or required - increasing stability in
OS4 when 2 or more instances are running.
* Automatically sets own stacksize to 32kb if necessary.
* Errors generated when run from Workbench will automatically open a
console window rather than be invisible.
* Added sha_taskname configuration setting
1.02 Amiga OS 4 Improved Compatability (Feb 28 2018)
* Fixed bug that caused crash in OS4 if menu was activated but no item was
* Fixed a bug that cause crash in OS4 if About Window, or Add Peer window
was closed with close gadget.
* Fixed graphical bug in menus that caused menu to appear grayed out
invisible (especially in OS4).
* Increased Stack size in .info file to 32000 bytes.
* Change default task priority in info file to -10
* dz_FS and dz_SHA1 tasks now copy the parent priority.
* DizzyTorrent now appears Amiga OS4.1 compatible (requires Ixemul).
1.01 (hotfix) (February 4 2018)
* 1.0 added a bug that when when launched from CLI, DizzyTorrent could
unlock the current directory, this can cause the shell to freeze or
act abnormally after DizzyTorrent terminates. fixed
* When launched from Icon, DizzyTorrent would leak a lock on the starting
directory. This would prevent you from deleting that directory without
1.0 First Official Release (February 3 2018)
* DizzyTorrent now has a tool icon.
* All configuration settings can be set as Tooltypes.
* Select a torrent and double click tool to launch DizzyTorrent directly
from workbench and start torrenting.
* Uncommon crash on exiting DizzyTorrent introduced in 1.0b7-fixed.
* "About" window with copyright info.
* AppIcon uses DizzyTorrent logo.
* Improved protothread control to make GUI more responsive to user.
* GUI fixed to work with non-proportional fonts.
* Some optimizations.
* font configuration can now be set to "default" to use default screen font.
* font sizes can be set to -1 to use default screen font size.
* "Add Peer" window now opens centered on screen.
* GUI scroller gadget now reacts continuously in realtime.
* Improved layout of files info page.
1.0 Beta 9 (hotfix) (January 25 2018)
* Slightly tweaked load balancing for better performance across wider range
1.0 Beta 8 (January 24 2018)
* DizzyTorrent would terminate immediately with a bencoding error if
loading a torrent that had 0 trackers. Fixed.
* Show count of Trackers on torrent view page.
* A bug in parsing of torrent announce-lists, caused lists to be reloaded
repeatedly leading to slow load times and memory waste when loading a
torrent with a very long announce-list. Fixed.
* Performance improvements.
* Passing invalid torrent specification on command line returns with more
sensible error message "Could not find torrent".
* Beta 7 would output random number seed on start. Removed.
1.0 Beta 7 (January 16 2018)
* removed all linkage to pthread library. Smaller binary. Less memory
usage. Faster. No dependancy on any LGPL software.
* DizzyTorrent now uses non-blocking sockets for UDP. DizzyTorrent can
abort while awaiting response. Unresponsive UDP Trackers caused
DizzyTorrent to become unresponsive while waiting for UDP to timeout.
* Better gui response during Announce.
* A torrent with many trackers (dozens), will cause DizzyTorrent to use
too many sockets and lead to system instability. Now DizzyTorrent only
works on [throttle]concurrent_announce trackers simultaneously, and
works its way through the list sequentially.
* create new [throttle]concurrent_announce setting in dz.config. Default
* Now seems to work on OS 4.0 JIT emulation.
1.0 Beta 6 (January 6 2018)
* optimization reduces protocol overhead and slightly reduces cpu usage.
* Dizzytorrent was not properly indicating when an unsupported tracker URL
protocol was detected. (https tracker specifically)
* Handles trackers returning a failure with a non bencoded
"Invalid Request" html page.
* Implemented BEP-24 to discover external IP - but unverified.
* Implemented BEP-10 Extension protocol.
* Displays peer client version, if peer used extension handshake.
* Improve calculation for the proportional gadget and minor layout change.
1.0 Beta 5 (Dec 27 2017)
* More SHA1 optimization, about 44% faster SHA1 than beta 4. (SHA1 on 512KB
block takes 1.43 seconds vs 2.59 seconds on 50mhz 68030.)
* End game strategy improved to reduce redundant download blocks.
* Improvements to automatic load moderating to have a better balance of
concurrent peers matched to cpu utilization.
* Improvement to bandwidth throttling.
* Improvements to block request scheduling to reduce protocol overhead.
* Fixed bug where throttling would result in closure of peers.
* optimized throughput metering code.
* Overall downloading with beta5 on a 50mhz 030 using plipbox and AmiTCP 3
is about 12% faster than Beta4.
1.0 Beta 4 (Dec 18 2017)
* Performance improvements connecting to HTTP Trackers
* Minor SHA1 optimization
* graphics text rendering bug on Torrent Details page
1.0 Beta 3 (Dec 13 2017)
* Improved operation with torrents with many Trackers.
* Improved operation with trackers with many unreachable peers
* File progress display bug fixed
* aminet back up so hopefully this version can be listed.
1.0 Beta 2 (Dec 12 2017)
* DZ would hang when accessing a UDP tracker
* Interval timer wrong for UDP tracker
1.0 Beta 1 (December 10 2017)
* Presented at World of Commodore Toronto 2017