Needlessly Provoking Marsupials

    lt_donthave

    1.0.1 • Public • Published

    lt_donthave npm downloads javascript style guide

    The BitTorrent lt_donthave extension (BEP 54)

    JavaScript implementation of the The BitTorrent lt_donthave extension (BEP 54). Use with bittorrent-protocol.

    The purpose of this extension is to allow peers to indicate that they no longer have a piece. It provides a single donthave message that means the opposite of the standard have message. In addition, when a client receives donthave, it knows that all requests for the matching piece have failed.

    Works in the browser with browserify! This module is used by WebTorrent.

    install

    npm install lt_donthave
    

    usage

    This package should be used with bittorrent-protocol, which supports a plugin-like system for extending the protocol with additional functionality.

    Say you're already using bittorrent-protocol. Your code might look something like this:

    const BitField = require('bitfield')
    const Protocol = require('bittorrent-protocol')
    const net = require('net')
    
    net.createServer(socket => {
      var wire = new Protocol()
      socket.pipe(wire).pipe(socket)
    
      // handle handshake
      wire.on('handshake', (infoHash, peerId) => {
        wire.handshake(Buffer.from('my info hash'), Buffer.from('my peer id'))
    
        // advertise that we have all 10 pieces of the torrent
        const bitfield = new BitField(10)
        for (let i = 0; i <= 10; i++) {
          bitfield.set(i, true)
        }
        wire.bitfield(bitfield)
      })
    
    }).listen(6881)

    To add support for BEP 54, simply modify your code like this:

    const BitField = require('bitfield')
    const Protocol = require('bittorrent-protocol')
    const net = require('net')
    const lt_donthave = require('lt_donthave')
    
    net.createServer(socket => {
      const wire = new Protocol()
      socket.pipe(wire).pipe(socket)
    
      // initialize the extension
      wire.use(lt_donthave())
    
      // all `lt_donthave` functionality can now be accessed at wire.lt_donthave
    
      wire.on('request', (pieceIndex, offset, length, cb) => {
        // whoops, turns out we don't have any pieces after all
        wire.lt_donthave.donthave(pieceIndex)
        cb(new Error('not found'))
      })
    
      // 'donthave' event will fire when the remote peer indicates it no longer has a piece
      wire.lt_donthave.on('donthave', index => {
        // remote peer no longer has piece `index`
      })
    
      // handle handshake
      wire.on('handshake', (infoHash, peerId) => {
        wire.handshake(Buffer.from('my info hash'), Buffer.from('my peer id'))
    
        // advertise that we have all 10 pieces of the torrent
        const bitfield = new BitField(10)
        for (let i = 0; i <= 10; i++) {
          bitfield.set(i, true)
        }
        wire.bitfield(bitfield)
      })
    
    }).listen(6881)

    api

    lt_donthave()

    Initialize the extension.

    wire.use(lt_donthave())

    lt_donthave.donthave(index)

    Tell the remote peer that this peer no longer has the piece with the specified index.

    Opposite of wire.have.

    lt_donthave.on('donthave', index => {})

    Fired when the remote peer no longer has the piece with the specified index.

    Opposite of wire.on('have', index => ())

    After this is fired, all outstanding requests to the remote peer for that piece will automatically fail.

    license

    MIT. Copyright (c) John Hiesey and WebTorrent, LLC.

    Install

    npm i lt_donthave

    DownloadsWeekly Downloads

    1,603

    Version

    1.0.1

    License

    MIT

    Unpacked Size

    7.81 kB

    Total Files

    4

    Last publish

    Collaborators

    • feross
    • mafintosh
    • flet
    • watson
    • diegorbaquero
    • hicom150
    • jhiesey
    • webtorrent-bot