diff options
author | Feross Aboukhadijeh <feross@feross.org> | 2013-10-27 15:18:29 +0400 |
---|---|---|
committer | Feross Aboukhadijeh <feross@feross.org> | 2013-10-27 15:18:29 +0400 |
commit | c23943159b8ef50af22b8f2728b581a2b85fbd94 (patch) | |
tree | 5ecc6c3b217f31a52aa548a9e21a7a5ae409dfdf /lib | |
parent | 3232e5ee9b8a771a52f3a484a7f56a82d4340b29 (diff) |
use bops to make bencode work in browser
Sent a pull request to upstream (see:
https://github.com/a2800276/bencode.js/pull/12).
In the meantime, use my fork at feross/bencode.js.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bittorrent-dht/index.js | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/lib/bittorrent-dht/index.js b/lib/bittorrent-dht/index.js index d29c00d..ed26557 100644 --- a/lib/bittorrent-dht/index.js +++ b/lib/bittorrent-dht/index.js @@ -4,7 +4,8 @@ module.exports = DHT -var bncode = require('bncode') +var bencode = require('bncode') +var bops = require('bops') var compact2string = require('compact2string') var EventEmitter = require('events').EventEmitter var socket = require('../../socket') @@ -59,7 +60,7 @@ function DHT (infoHash) { // Support infoHash as string or Buffer if (is.isString(infoHash)) { - infoHash = new Buffer(infoHash, 'hex') + infoHash = bops.from(infoHash, 'hex') } else if (!is.isBuffer(infoHash)) { throw new Error('DHT() requires string or buffer infoHash') } @@ -73,11 +74,13 @@ function DHT (infoHash) { self.missingNodes = 0 self.nodeId = randomId() + console.log('our node id: ' + bops.to(self.nodeId, 'hex')) + console.log(self.nodeId) self.requestId = 1 self.pendingRequests = {} - self.message = new Uint8Array(bncode.encode({ + self.message = { t: self.requestId.toString(), y: 'q', q: 'get_peers', @@ -85,9 +88,9 @@ function DHT (infoHash) { id: self.nodeId, info_hash: self.infoHash } - })) + } console.log(self.message) - console.log(typeof self.message) + self.message = bencode.encode(self.message) self.pendingRequests[self.requestId] = 1 @@ -97,20 +100,20 @@ function DHT (infoHash) { DHT.prototype._onNode = function (addr) { var self = this - log('node ' + addr) if (self.nodes[addr]) return // already know about this node // if (self.missingNodes > 0) return self.query(addr) // if (self.queue.length < 50) self.queue.push(addr) + process.nextTick(function () { + self.emit('node', self.infoHash, addr) + }) } DHT.prototype._onPeer = function (addr) { var self = this - log('peer ' + addr) if (self.peers[addr]) return self.peers[addr] = true self.missingNodes = Math.max(0, self.missingNodes - 1) process.nextTick(function () { - // ??? if the query is satisfied now, the socket must be closed before a new query is started self.emit('peer', self.infoHash, addr) }) } @@ -120,22 +123,21 @@ DHT.prototype._onData = function (data, host, port) { log(data) log(host) log(port) - data = new Buffer(new Uint8Array(data)) self.nodes[host+':'+port] = true - window.foobar = data - + throw new Error('on Data') var message try { - message = bncode.decode(data) + console.log(data) + message = bencode.decode(data) } catch (err) { + console.error(err.message) console.warn('Failed to decode UDP data from node ' + host + ':' + port) return } - window.message = message - - if (message.t.toString() != self.requestId) return + // TODO: remove the toStrings here? + if (message.t.toString() != self.requestId.toString()) return var r = message && message.r var nodes = r && r.nodes || [] @@ -165,7 +167,6 @@ DHT.prototype.findPeers = function (num, timeout) { while (self.queue.length) { self.query(self.queue.pop()) } - log('done looping') if (timeout) setTimeout(self.stop.bind(self), timeout) } |