Short: AmigaOS BitTorrent client with MUI+AREXX Author: David Zvekic Uploader: David Zvekic Type: comm/tcp Version: 2.20 Requires: 8MB fastram, 68020+/Vampire, MUI 3.9+ Architecture: m68k-amigaos >= 2.0.4 DizzyTorrent is an efficient BitTorrent implemention, written for the Amiga 68k that operates on real classic hardware, or emulation and can be controlled with a MUI based graphical interface or using AREXX. DizzyTorrent is designed for AmigaOS 3.1 but is also tested to work on PPC AmigaOS 4.1, and MorphOS 3.9+. Registering DizzyTorrent will help the author finance his extensive coffee bill. 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-20 PeerID Convention BEP-23 Tracker Returns Compact Peer Lists BEP-24 Tracker Returns External IP Additional Features include : File prioritization Multiple concurrent torrents Bandwidth, CPU and memory throttling Customizable GUI using MUI. Full Arexx scripting control and monitoring of all functions. Load save multiple torrent settings together as a single project. 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 copyright holders. Full Documentation in AmigaGuide format: DizzyTorrent.guide. =============================================================================== DISCLAIMER =============================================================================== 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. =============================================================================== COPYING =============================================================================== 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, Motorola 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 =============================================================================== 2.20 Jan 19 2019 * Performance enhancements, and assorted bug fixes, reduced memory and CPU requirements when hash check disabled. * Improved load balancing of available peer connections between multiple torrents. * ARexx does not need to be explicitly started before DizzyTorrent anymore. * Significantly improved flow control between network, SHA1 and file system. * New Command line switch - EMPTYPROJECT * Hash check can be disabled when downloading torrent (at launch or any time). Significantly reduced memory and CPU requirements in this mode. * Bitmap and Download Data path can be explicitly set independantly for each torrent when it is first opened. * New LOADTORRENT Arexx command. (Registered Users Only) * Validate the SHA1 hash of any torrent as a co-process. (This is most useful when disk SHA1 validation was turned off, or data corruption is suspected). 2.11 Dec 20 2018 * German, Greek localization. * memory efficiency, and other performance enhancements. Lower RAM requirements (tested as low as 8MB fastram). * Bug fixes. * added maxOpenRequestsPerPeer throttle setting. * Information dialog was wrongly titled with the word "Error". 2.10 November 26 2018 * Support for Localization. (Italian, Swedish, Serbian, French, Finnish, English) * Open torrents on close are now automatically resumed on launch. * Typographical correction suggested by Samir Hawamdeh * Program now refuses to start if stack is less than 16384 bytes. * Launch argument PROJECT or TORRENTFILE may be provided. * Bug fixes 2.0 October 19 2018 * DizzyTorrent is now Shareware. * MUI 3.9/4.0/5.0 user interface. * Replaced previous AREXX port with MUI based AREXX port to work like other MUI programs. Default name is DZREXX.1 instead of DZREXX.01 * Multiple simultaneous torrents in 1 program instance. * File Download Prioritization * Performance Improvements * Fix bug in iconfication. Depending on the launch method used Program could always locate the .info file. * Save/Load Project files. Multiple torrents in 1 file. * Added TorrentCount,CloseTorrent ARexx function. 1.11 October 6 2018 * Reduced CPU usage - minor bug introduced a busy-wait not apparent on my test systems. 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 Guide compliant. * 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 as 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 permanently. * 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 February 28 2018 (AmigaOS 4 Improved Compatibility) * Fixed bug that caused crash in OS4 if menu was activated but no item was selected. * 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 February 4 2018 (hotfix) * 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 rebooting. fixed. 1.0 February 3 2018 (First Official Release) * 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 of systems. 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 is 5. * Now seems to work on AmigaOS 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