lt_donthave
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:
import BitField from 'bitfield'
import Protocol from 'bittorrent-protocol'
import net from 'net'
net.createServer(socket => {
var wire = new Protocol()
socket.pipe(wire).pipe(socket)
wire.on('handshake', (infoHash, peerId) => {
wire.handshake(Buffer.from('my info hash'), Buffer.from('my peer id'))
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:
import BitField from 'bitfield'
import Protocol from 'bittorrent-protocol'
import net from 'net'
import lt_donthave from 'lt_donthave'
net.createServer(socket => {
const wire = new Protocol()
socket.pipe(wire).pipe(socket)
wire.use(lt_donthave())
wire.on('request', (pieceIndex, offset, length, cb) => {
wire.lt_donthave.donthave(pieceIndex)
cb(new Error('not found'))
})
wire.lt_donthave.on('donthave', index => {
})
wire.on('handshake', (infoHash, peerId) => {
wire.handshake(Buffer.from('my info hash'), Buffer.from('my peer id'))
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.