Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/webtorrent/webtorrent.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFeross Aboukhadijeh <feross@feross.org>2013-10-27 15:18:29 +0400
committerFeross Aboukhadijeh <feross@feross.org>2013-10-27 15:18:29 +0400
commitc23943159b8ef50af22b8f2728b581a2b85fbd94 (patch)
tree5ecc6c3b217f31a52aa548a9e21a7a5ae409dfdf /lib
parent3232e5ee9b8a771a52f3a484a7f56a82d4340b29 (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.js33
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)
}