lt_donthave

The BitTorrent lt_donthave extension (BEP 54)

Showing:

Popularity

Downloads/wk

1.6K

GitHub Stars

8

Maintenance

Last Commit

2mos ago

Contributors

3

Package

Dependencies

2

Size (min+gzip)

2.9KB

License

MIT

Type Definitions

Tree-Shakeable

No?

Categories

Readme

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.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100
No reviews found
Be the first to rate

Alternatives

No alternatives found

Tutorials

No tutorials found
Add a tutorial