Skip to content

Commit 7e7062d

Browse files
committed
websocket tracker server/client: fix binary vs. hex bugs
1 parent 13e7ff7 commit 7e7062d

File tree

4 files changed

+16
-15
lines changed

4 files changed

+16
-15
lines changed

lib/parse_websocket.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ function parseWebSocketRequest (socket, params) {
1818
}
1919
params.peer_id = common.binaryToHex(params.peer_id)
2020

21-
if (params.answer &&
22-
(typeof params.to_peer_id !== 'string' || params.to_peer_id.length !== 20)) {
23-
throw new Error('invalid `to_peer_id` (required with `answer`)')
21+
if (params.answer) {
22+
if (typeof params.to_peer_id !== 'string' || params.to_peer_id.length !== 20)) {
23+
throw new Error('invalid `to_peer_id` (required with `answer`)')
24+
}
25+
params.to_peer_id = common.binaryToHex(params.to_peer_id)
2426
}
2527

2628
params.left = Number(params.left) || Infinity

lib/swarm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Swarm.prototype._onAnnounce_started = function (params, peer) {
4949
peer = this.peers[params.addr || params.peer_id] = {
5050
complete: false,
5151
ip: params.ip, // only http+udp
52-
peerId: params.peer_id,
52+
peerId: params.peer_id, // as hex
5353
port: params.port, // only http+udp
5454
socket: params.socket // only websocket
5555
}

lib/websocket-tracker.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ WebSocketTracker.prototype._onSocketMessage = function (data) {
140140
}
141141

142142
if (data.answer) {
143-
peer = self._peers[data.offer_id]
143+
peer = self._peers[common.binaryToHex(data.offer_id)]
144144
if (peer) {
145145
peer.id = common.binaryToHex(data.peer_id)
146146
peer.signal(data.answer)
@@ -177,7 +177,7 @@ WebSocketTracker.prototype._generateOffers = function (numWant, cb) {
177177
peer.once('signal', function (offer) {
178178
offers.push({
179179
offer: offer,
180-
offer_id: offerId
180+
offer_id: common.hexToBinary(offerId)
181181
})
182182
checkDone()
183183
})

server.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ Server.prototype.onUdpRequest = function (msg, rinfo) {
228228

229229
Server.prototype.onWebSocketConnection = function (socket) {
230230
var self = this
231-
socket.peerId = null
231+
socket.peerId = null // as hex
232232
socket.infoHashes = []
233233
socket.onSend = self._onWebSocketSend.bind(self, socket)
234234
socket.on('message', self._onWebSocketRequest.bind(self, socket))
@@ -253,7 +253,7 @@ Server.prototype._onWebSocketRequest = function (socket, params) {
253253
return
254254
}
255255

256-
if (!socket.peerId) socket.peerId = params.peer_id
256+
if (!socket.peerId) socket.peerId = params.peer_id // as hex
257257

258258
self._onRequest(params, function (err, response) {
259259
if (err) {
@@ -270,11 +270,10 @@ Server.prototype._onWebSocketRequest = function (socket, params) {
270270

271271
var peers = response.peers
272272
delete response.peers
273-
274273
response.interval = self._intervalMs
275-
response.info_hash = params.info_hash
276-
socket.send(JSON.stringify(response), socket.onSend)
274+
response.info_hash = params.info_hash // as hex
277275

276+
socket.send(JSON.stringify(response), socket.onSend)
278277
debug('sent response %s to %s', JSON.stringify(response), params.peer_id)
279278

280279
if (params.numwant) {
@@ -284,8 +283,8 @@ Server.prototype._onWebSocketRequest = function (socket, params) {
284283
peer.socket.send(JSON.stringify({
285284
offer: params.offers[i].offer,
286285
offer_id: params.offers[i].offer_id,
287-
peer_id: params.peer_id,
288-
info_hash: params.info_hash
286+
peer_id: common.hexToBinary(params.peer_id),
287+
info_hash: common.hexToBinary(params.info_hash)
289288
}))
290289
debug('sent offer to %s from %s', peer.peerId, params.peer_id)
291290
})
@@ -303,8 +302,8 @@ Server.prototype._onWebSocketRequest = function (socket, params) {
303302
toPeer.socket.send(JSON.stringify({
304303
answer: params.answer,
305304
offer_id: params.offer_id,
306-
peer_id: params.peer_id,
307-
info_hash: params.info_hash
305+
peer_id: common.hexToBinary(params.peer_id),
306+
info_hash: common.hexToBinary(params.info_hash)
308307
}))
309308
debug('sent answer to %s from %s', toPeer.peerId, params.peer_id)
310309
}

0 commit comments

Comments
 (0)