Commits on Sep 12, 2009
  1. This is v0.051

    committed Sep 12, 2009
  2. git clean to ignore fake rcs

    committed Sep 12, 2009
  3. Developer stuff

    committed Sep 12, 2009
  4. Fixing DHT bug reported by Wouter Godefroy <>

        - DHT nodes found in metadata were not being added according to spec
        - Updating Changes to note the above fix
    committed Sep 12, 2009
  5. Moving developer stuff out of Build.PL

        - Do not add /inc/ (location of Developer install class) to MANIFEST
    committed Sep 6, 2009
Commits on Apr 27, 2009
  1. Moved various dispatch tables up to nearest package level. Will this …

    …speed things up? Probably not...
    committed Apr 27, 2009
Commits on Apr 20, 2009
Commits on Apr 18, 2009
  1. NB v0.050_002: Metadata and POD updates for issue tracker

        - Issue tracking had moved to github
        - Adding a .gitignore file for sanity
    committed Apr 18, 2009
Commits on Feb 17, 2009
  1. Minor Metadata changes

        * /scripts/ should not be indexed
        * More related tags in meta.yml's keywords block
    committed Feb 17, 2009
  2. And the cycle begins anew

        * New script /scripts/ is installed with distribution. It
            is a very short version of /tatoeba/
        * Version bump to 0.050_001
        * New dev build action 'testkwalitee' and an expanded 'testpod'
        * Dev build action 'changes' no longer burps on new, uncommited files
    committed Feb 17, 2009
Commits on Feb 13, 2009
  1. Minor pre-tag changes

            * update all version numbers to 0.050
            * now requires perl 5.8.8 or better because I'm tired of wasting time
                making sure N::B works with ancient versions
    committed Feb 13, 2009
Commits on Feb 12, 2009
  1. Code freeze. Like... for real this time.

        * New public accessors for Net::BitTorrent::Peer: am_choking,
          am_interested, bitfield, host, incoming, peer_choking, peer_interested,
          port, reserved_bytes, source, torrent. See the docs.
    committed Feb 12, 2009
  2. More prep for v0.050 stable

        * Update copyright notices for current year in all recently modified files
        * Retry outgoing connection with plain text when MSE handshake fails
        * Fix: Math::BigInt try => [...] requires v1.78+ (see failures in
            cpants://3252890 and cpants://3253722)
        * Net::BitTorrent->_schedule() now accepts fractional seconds. Just in
            case the user has used Time::HiRes...
        * Fixed skip() calls in all tests
        * New auto_feature for Math::Pari and Math::BigInt::Pari
        * M::Pari and M::BigInt::Pari are now in the list of recommended modules
    committed Feb 12, 2009
Commits on Feb 11, 2009
  1. Random changes running up to v0.050 stable

        * Message Stream Encryption is enabled by default (plaintext out, RC4 in)
        * Update (some) Copyright notices where appropriate
        * Documentation updates in N::B::Notes
        * Made unknown packet reporting a lot less stupid (creates a block users
            can c+p right into the issue tracker)
        * New demo: /tatoeba/
        * Remove call for assistance from's POD (message remains in
    committed Feb 11, 2009
Commits on Feb 9, 2009
  1. Prepping a devel CPAN dist

    committed Feb 8, 2009
Commits on Feb 8, 2009
  1. Belay that

        * Previous commit was made by... someone with an extra chromosome... Yeah.
        * Undo some of the silly stuff I left in (I don't want to merge commits)
    committed Feb 8, 2009
  2. More encryption stuff and step one of the N::B::Peer Internal Structu…

    …re Shuffle
        * Recommended perl version is 5.10.0. Now that it's been out more than a
            year, I see no reason to continue going out of my way to support
            ancient perl versions. Even most modern Linux distributions come with
            5.10.0 now. ...and I dev on bleadperl.
        * N::B::Peer->_rw() progress has changed from...
            - write
            - read
                + process_packets (if read)
            - read
            - write
            - process_packets (on a timer)
        * t/[...]/007_miniswarm_http.t now uses encryption. ...for now.
        * Full RC4 encrypted sessions (kinda) work. It's (very) unstable.
    committed Feb 8, 2009
Commits on Feb 5, 2009
  1. Encrypted Protocol headers are complete and various unrelated tweaks

        * Internal status is kept during handshake
        * Shorter waiting period before filling requests (15s -> 3s)
        * Build.PL requires Math::BigInt on all systems
        * Default for number of allowed connections per host has changed (2 -> 1)
    committed Feb 5, 2009
Commits on Feb 4, 2009
  1. Major bugfix and protocol encryption

        * Protocol encryption is now supported in both plaintext and RC4 modes
        * Fix for HAVE reporting bug
    committed Feb 4, 2009
  2. Last pre-encryption commit

        * Define bitfield (scalar ref) in N::B::Peer->new() to silence the "Can't
            use an undefined value" warning if N::B::Peer->_bitfield() is called
            before we recieve a handshake (in peer_connect callback, for example)
        * N::B::Peer objects have their sockets closed and removed before calling
            peer_disconnect callback
        * Early protocol encryption stuff in lib/Net/BitTorrent/
        * New private Net::BitTorrent::Torrent->_add_node('XXX.XXX.XXX.XXX:XXX') method
    committed Feb 3, 2009
Commits on Jan 28, 2009
  1. Previous commit continued and one test bug 'fixed'

        * Removed test #40 ("...rmdir temp dir to test _mkpath") from
            t/700_classes/Net/BitTorrent/Torrent/File.t. It was testing a
            File::Temp trick which certainly fails on non-Win32 platforms
        * I forgot /tatoeba/ in the previous commit
    committed Jan 28, 2009
Commits on Jan 27, 2009
  1. Minor documentation fixes

        * Proofreading N::B::Notes
        * Brief message in example scripts about viewing the source
    committed Jan 27, 2009
  2. More protocol test fixes and cleanup

        * Improved test names in t/[...]/Protocol.t
        * More edge case tests in t/[...]/Protocol.t
    committed Jan 27, 2009
  3. 32-bit math fixes in the test suite

        * More pod cleanup
            - Fix bad internal link in N::B::Version
        * fix t/[...]/Protocol.t failures due to the limits of 32-bit math
        * tatoeba/*.pl shorten =head1 NAME content so it doesn't wrap on
    committed Jan 27, 2009
  4. Move into github and code clean up

      * Several updates in the language used in N::B::Version's pod
      * N::B::Notes has been trimmed down a bit
      * N::B's pod has been trimmed
      * ALL tests are run even on non-dev systems
        - I'm doing this to shake out the last few (I hope) crash/protocol bugs
          before really putting effort into more advanced stuff
    committed Jan 26, 2009
Commits on Jan 5, 2009
  1. Resume system v2, half-open timeouts, peers remember source

     * [fix] N::B::Peer->as_string(1) now gives correct choke/interest statuses
     * [etc] Improved description for N::B::Peer disconnect when sent
             unrequested piece.
     * [new] Several new private methods:
               - N::B->_set_half_open()
               - N::B->_set_peers_per_torrent()
               - N::B->_set_connections_per_host()
     * [fix] N::B->_set_max_ul_rate() requires a value greater than 0 (zero)
     * [etc] Various tests tie STDERR to make sure as_string() is handled
     * [api] Major: Lists of potential peers and complete/incomplete counts (if
             applicaable) are kept by their source (Net::BitTorrent::DHT,
             Net::BitTorrent::Torrent::Tracker::UDP) rather than in the related
             Net::BitTorrent::Torrent object. Net::BitTorrent::Torrent keeps
             only a few nodes in an internal cache to speed things along.
             Eventually, Net::BitTorrent::Peer objects will contain info about
             how we found them. This was a Short Term Goal.
     * [etc] /tatoeba/ only works until the torrent is completed
     * [etc] shorter timeouts for miniswarm tests
     * [api] Major: Resume system (yeah, the thing I added a little over a week
             ago) is deprecated and has been replaced.  I thought about it and
             changing the original .torrent's metadata is a bad idea so I
             switched from Rakshasa- to Rasterbar-like.  The internal structure
             is still subject to change and the docs probably don't match.
    committed Jan 5, 2009
Commits on Jan 2, 2009
  1. New demos, schedule fixes, half open peer timeouts, quicker HTTP trac…

    …ker retries
     * [fix] /tatoeba/ was using builtin sleep which (of course) does not support fractional periods
     * [fix] Various N::B::Torrent status and internal schedule fixes.
     * [fix] N::B::Torrent->hashcheck() no longer stops the torrent first
     * [fix] Expanded limits on what a N::B::Torrent object can do while being hashchecked or stopped or standalone.
     * [etc] When we're a seed, we don't attempt new connections as often.
     * [etc] N::B::T::Tracker::HTTP retry is now 30s on socket error (formerly 5m)
     * [new] N::B::Peer objects are disconnected if they don't complete handshake within 30s.   We used to wait for the OS to tell us the socket was disconnected (perhaps 1-2m).
     * [etc] Private N::B::Torrent->_status_as_string() for 'nice' status strings
     * [api] Net::BitTorrent::Torrent->peers() is now public
     * [new] /tatoeba/ - Trivial, Multi-threaded Example
     * [new] /tatoeba/ - Demonstration of Net::BitTorrent::Torrent's Resume System
     * [fix] Build.PL exit(0) when perl < v5.8.1 or M::B < v0.3
    committed Jan 2, 2009
Commits on Dec 31, 2008
  1. New debugging example and testing usefulness of half_open limit

     - [etc] new debugging script: /tatoeba/
     - [etc] Don't constrain outgoing connection attempts with half_open limit (temporary change for testing)
     - [etc] Net::BitTorrent::Peer->as_string(1) tweaks (with much more to do)
     - [fix] Correct MailingList metadata generated by Build.PL
    committed Dec 31, 2008
Commits on Dec 30, 2008
  1. Major API-related bug fix and first few example scripts

     - [doc] Removed reference to N::B::DHT::Node from N::B::Notes
     - [doc] Various documentation changes in N::B::Notes
     - [etc] tries to require Module::Build 0.3
     - [api] Separated 'Path' arg tests in Net::BitTorrent::Torrent to provide more appropriate error messages
     - [fix] r45 N::B::Torrent->new failed to set set defaults, generate a peerid, or create a DHT object when called without arguments.
     - [api] N::B::T::Tracker->urls() is now public
     - [api] N::B::T::HTTP->url() and N::B::T::UDP->url() are now public
     - [etc] tracker-related tests updated to new url() and urls() public status
    committed Dec 30, 2008
Commits on Dec 26, 2008
  1. Stable resume system and more socket fixes

     - Close all sockets on client destruction just in case (left a few FIN_WAIT1 connections on Win32)
     - The announce and discussion lists have been combined into a single list found at
     - N::B::Torrent->raw_data( [ RAW ] ) and N::B::Torrent->resume_data( [ RAW ] ) return bencoded or raw metadata based on bool parameter
     - N::B::T::T::UDP and N::B::T::T::HTTP have been updated to match N::B::T->raw_data( [ RAW ] ) change
     - N::B::T->hashcheck() clears the bitfield before starting
     - N::B::T::T::UDP and N::B::T::T::HTTP default to 0 when tcp_port is undef (happens when we fail to open port)
     - 'Progress' value in N::B::Torrent->as_string(1) only considers pieces we want
     - Documentation tweaks throughout
     - Resume system has been gutted and rewritten to be per-torrent only.
     - Suggestions for Client-wide resume is in Net::BitTorrent::Notes
     - s=c\Kie=ei=g;
     - scripts/ skips hashcheck when resume data loads okay
    committed Dec 26, 2008
Commits on Dec 18, 2008
  1. Resume system and DHT fixes

     - [etc] scripts/ was reading nodes from the wrong file
     - [fix] N::BitTorrent is taint 'safe' again
     - [fix] Separated TCP and UDP socket creation in lib/Net/
     - [fix] Reporting wrong port number in DHT announce (udp rather than tcp...)
     - [fix] Skip related tests on broken systems in t/700_classes/Net/BitTorrent.t
     - [API] N::B->_use_dht() now takes into account whether or not we have an open udp port
     - [API] Pre-alpha resume system for N::BitTorrent, N::B::DHT, and N::B::Torrent
     - [fix] N::B::DHT no longer sees boot nodes and 'regular' nodes differently
     - [etc] N::B::DHT attempts to contact all newly added nodes rather than throwing them in a bin (which we never got around to using...)
     - [fix] N::B::DHT deletes nodes we haven't seen in 15m
     - [fix] N::B::DHT deletes nodes with more than 10 errors (ignored/lost packets)
     - [fix] N::B::DHT resets fail count to zero when a node sends us a packet
     - [fix] N::B::DHT keeps a runny tally of how many good packets a node has sent
     - [fix] N::B::DHT pings every node every 8m
     - [fix] N::B::DHT heartbeat moved from 25s to 45s
     - [fix] N::B::DHT no longer dies when we get a bad packet
     - [API] Seeing as N::B::Torrent keeps nodes compact anyway, N::B::T->_compact_nodes() has been renamed N::B::T->_nodes() and N::B::T->_append_compact_nodes() is now N::B::T->_append_nodes().  Various modules have been updated in compliance.
     - [etc] The variables behind most private functions have been renamed to reflect their nature
     - [etc] scripts/ can use the resume/restore functions (in their current state)
     - [doc] Light docs for resume stuff in N::B::Notes
    committed Dec 18, 2008
Commits on Dec 11, 2008
  1. Mainline DHT is finally functional but still un(der)tested

     - [doc] link rfc://3986 to X<> in See Also; CPAN was confused by it.
     - [etc] Makefile.PL exits with 0 on < v5.8
     - [API] Net::BitTorrent::DHT::Node is gone.
     - [etc] t/700_classes/Net/BitTorrent/DHT/Node.t is gone
     - [doc] Temporary change to ip_filter callback documentation (DHT boot stuff)
     - [etc] ip_filter tests in t/700_classes/Net/BitTorrent/Peer.t are temporarily TODO tests (DHT boot stuff)
     - [API] Advanced output from N::B::->as_string() now includes local DHT NodeID
     - [API] N::B::DHT->_add_node() now expects a hashref with separate ip' and 'port' keys
     - [int] N::B::Peer->__handle_ext_protocol() changed to reflect change in expected params to N::B::DHT->_add_node();
     - [API] N::B::Protocol now exports a :dht tag. You get both the query and reply packet builders. Note: they are, at this time, undocumented and are certainly subject to change. In the future, these will be rolled into the :build tag. Probably.
     - [new] N::B::Torrent schedules future DHT _scrape and _announce processes
     - [fix] N::B::Version::gen_node_id() was just plain wrong
     - [etc] More messing around with scripts/ (unstable/stupid stuff that will probably be rolled back before CPAN)
     - [etc] More in-the-middle DHT nodes to climb through in t/000_miniswarm/008_miniswarm_dht.t
    committed Dec 11, 2008