DizzyTorrent is a functional BitTorrent client implemented for the Amiga that
operates on real classic hardware. DizzyTorrent was implemented from scratch
from the BitTorrent protocal specification alone and does not derive from any
bittorrent code from other sources.
Implemented protocols are:
BEP-3 The BitTorrent Protocol Specification
BEP-6 Fast Extension
BEP-10 Extension Protocol
BEP-12 Multitracker Metadata Extension
BEP-15 UDP Tracker Protocol
BEP-23 Tracker Returns Compact Peer Lists
BEP-24 Tracker Returns External IP
Your feedback about which features you'd like to see are valuable to me.
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
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.
COLLECTION OF PERSONAL INFORMATION
Please be aware that this program follows the BitTorrent protocol and your IP
address will be shared with Trackers and other BitTorrent peers as per the
BitTorrent protocol. Use of BitTorrent to download or share a file
makes your IP address publically visible and the SHA1 Hash of any files you are
sharing or downloading. The Author (David Zvekic) does not collect any
information from you by the use of this software and this software does not
collect or transmit any information that is not part of the BitTorrent
OS 2.04+, 68020-060, or Vampire and 16MB of ram (32 to 64 MB
preferred), AmiTCP 3, EASYNET, MiamiDX, Roadshow or compatible network
connection. Lots of disk space.
DizzyTorrent has been tested on OS4.1 under emulation, and is reported
to work under MorphOS.
* Copy dz.config to Envarc:dizzytorrent/
* Copy DizzyTorrent, and the associated .info file anywhere you want to put it,
ideally on a large partition.
* Edit dz.config if you want to change any settings.
NOTE: You may need to increase TCP STACK memory buffers, In AmiTCP (I use 2 to
4 meg); With Roadshow I didn't need to adjust anything.
In AmiTCP 3 :
Membuffers are set in Amitcp:db/amitcp.config.
Add or set the line: MEMBUF_CONF MaxMem=4096
****** (Also See Configuration File:)
Type dizzytorrent and pick a torrent file from the file requestor.
You can also specify the torrent file as a command line argument when launched
from a shell or CLI.
Double click the DizzyTorrent icon and you will be presented with a file
requestor. Select a torrent file from the file requestor.
You can also hold the shift key when you click on a torrent, and then while
continueing to hold shift, double click the DizzyTorrent icon. This will
automatically launch DizzyTorrent with the select torrent preloaded.
If DizzyTorrent suddenly vanishes, try running from a CLI. It probably would
have printed an error message. (See Known Bugs).
****** Menu Options
Announce Immediately - Forces all trackers to immediately re-announce. This is
useful if your internet connection went away, and you don't want to wait
until the next scheduled announcement which could be 20 or 30 minutes
Add Peers - Opens a window and lets you type the IP and Port number of a peer.
Could be used to force connection to a peer you know exists, but can't
find on a tracker. For instance if the torrent file only has dead
or non-supported trackers.
Iconify - turns Dizzytorrent into a Workbench Appicon. Double click the icon
to restore the GUI.
View - Torrent - Switches DizzyTorrent to the torrent status page. Drag the
window taller to see the trackers.
View - Peers - Switches DizzyTorrent to the Peer view. Individual progress
of each connected peer is shown.
View - Files - Switches DizzyTorrent to the File View. Individual progress
of each file in the torrent is shown. When an individual file is
complete you can use it immediately. DizzyTorrent will not write
to it again.
***** Multiple Torrents:
You can run multiple copies of dizzytorrent using different torrents
simultaneously if you have enough RAM. All instances share a single
SHA1 hasher task that queues requests for SHA1 checksums.
NOTE: Don't run multiple copies to download the same torrent to the same
location as this will result in undefined behavior - I believe it will simply
waste bandwidth and report IO errors, but I haven't tested it because there is
no good reason to try to use the program this way.
HALT and RESUME:
You can close DizzyTorrent and resume your download later. A file is created
that tracks progress in the bitmaps directory.
I have found setting task priority to -10 generally leaves AmigaOS fully
responsive, and with no significant performance penalty.
CONFIGURATION TOOLTYPES and dz.config:
Configuration parameters can be controlled via tool types in DizzyTorrent.info.
Each setting can be overridden by the dz.config configuration file, and the
configuration file will take precedence if it is found in ENV:dizzytorrent/.
The most important setting is program.bitmappath and program.downloadpath (or
[program] bitmappath and downloadpath in dz.config), as these control where
DizzyTorrent will store potentially very large amounts of downloaded data. The
rest can generally be left at default values.
Tooltype Keys and their equivalent in dz.config are shown here. The setting
meanings are described in the distributed dz.config.
In DizzyTorrent.info Tooltype the tooltype of:
corresponds in dz.config with:
The configuration file is not required except for CLI usage, as all setting
can be controlled with with the tool types in DizzyTorrent.info.
The permanent location of the configuration file should generally be:
ENVARC:dizzytorrent/dz.config is copied to ENV:dizzytorrent/dz.config
automatically when the Amiga reboots (part of the normal Startup-Sequence of a
standard Workbench install).
At runtime the copy in ENV:dizzytorrent/ is used.
dz.config is organized in sections, with variable assignments in each sections.
Please see the comments in the included dz.config file for an explanation.
If both configuration methods are used then dz.config takes priority.
Filenames: FFS is limited to 30 characters and therefore torrents using longer
names may fail or corrupted data because filenames will be truncated.
If all the files have unique characters in the leading 30 places then it is
possible to download the torrent even if the names are too long.
FFS performance starts of very slow due to limitations in random access on
large files which is essential to BitTorrent. DizzyTorrent works around
this limitation, however it requires building up a cache of file handles.
FFS performance increasing as the download progresses due to this caching.
FFS performance is improved with a larger pagesize.
Filenames up to the limit supported by your filing system should be safe.
SFS: supports 107 length filenames.
Maglinks - are not yet supported.
HTTPS Trackers - are not yet supported
File Size: Torrents of any size are supported however no individual file may
exceed 2 GB.
The software has been tested and appears to work well on:
* Amiga 1000 using an Individual ACA500plus and Blizzard 1230 MK IV with 128
Mb of ram, under OS 3.1 with AmiTCP 2.98b2, and Roadshow and a PlipBox
using firmware version 0.6. SFS on a 28 GB partition, FFS on a 4 GB
partition, and FAT32 on a 16GB partition.
* Amiga 1200 with Microbotics M1230 XA, with 128MB ram, OS 3.1 with Cloanto
3.x roms, PCMCIA wifi adaptor, as well as Plipbox 0.6. FAT32 32 GB
partition. SFS 4 GB partition. AmiTCP 4.1 Pro (aka EasyNet).
* AmigaForever 2016, on the included AmigaSYS machine with with and without
using JIT emulation. FFS 2 GB. and passthrough to host OS filesystem
(Windows 10 NTFS).
* AmigaForever 2016, PPC AmigaOS 4.1 FE with and without JIT emulation.
Native SFS partition, Roadshow TCP and RTL8029 networking.
* MorphOS 3.9 on Ibook G4, demo mode.
* I've recieved a report that DizzyTorrent works on a Vampire under FFS but
possibly corrupted a FAT32 partition on Vampire. Used with MiamiDX, and
Magnet Links, Peer Exchange, DHT.
uTP protocol to throttle bandwidth.
Interprocess Control via AREXX Port, or Socket control.
Unified mode with all torrents in a single interface.
Morphos, AROS and OS4 native ports if enough people ask. (The JIT emulated 68k
is so fast maybe noone cares if it is native?)
* I haven't found any trackers that support BEP-24 so I can't test it.
* DizzyTorrent contacts all Trackers in a sequence whether or not more peers
are needed. BEP-12 specifies Bittorrent should only ask for more peers
if they are needed, and the announce list is to be prioritized depending on
which trackers are responsive. DizzyTorrent is technically not compliant.
* Nonresponsive UDP trackers stay 'announcing' for a very long time. If a
torrent has many non responsive UDP trackers, it may take a long time before
DizzyTorrent finds a responsive tracker because it will only keep a limited
number of open announcements pending as per the concurrent_announce
* Throttling bandwidth specifies an upper cap, but the system tries to stay
under it, and generally only runs from 50 to 75% of the cap. Users would
expect DizzyTorrent to run at closer to 100% of the cap. Actual bandwidth use
also fluctuates between 0 and max capacity rather than staying close to the
* Changing system clock while DizzyTorrent is running will confuse it and
result in performance metrics being incorrect and the program
will try compensate by adding or closing peers.
Dizzy Torrent Version 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