Skip to content

Commit b0a659f

Browse files
committed
[udp server] add stub implementation
1 parent 60b7f8d commit b0a659f

File tree

2 files changed

+45
-13
lines changed

2 files changed

+45
-13
lines changed

index.js

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ exports.Server = Server
33

44
var bncode = require('bncode')
55
var compact2string = require('compact2string')
6+
var dgram = require('dgram')
67
var EventEmitter = require('events').EventEmitter
78
var extend = require('extend.js')
89
var hat = require('hat')
910
var http = require('http')
1011
var inherits = require('inherits')
12+
var parallel = require('run-parallel')
1113
var querystring = require('querystring')
1214
var string2compact = require('string2compact')
13-
var dgram = require('dgram')
14-
var parseUrl = require('url').parse
15+
var url = require('url')
1516

1617
var CONNECTION_ID = Buffer.concat([ toUInt32(0x417), toUInt32(0x27101980) ])
1718
var ACTIONS = { CONNECT: 0, ANNOUNCE: 1 }
@@ -118,9 +119,9 @@ Client.prototype._request = function (opts) {
118119

119120
Client.prototype._requestHttp = function (announceUrl, opts) {
120121
var self = this
121-
var url = announceUrl + '?' + querystring.stringify(opts)
122+
var fullUrl = announceUrl + '?' + querystring.stringify(opts)
122123

123-
var req = http.get(url, function (res) {
124+
var req = http.get(fullUrl, function (res) {
124125
var data = ''
125126
if (res.statusCode !== 200) {
126127
res.resume() // consume the whole stream
@@ -142,7 +143,7 @@ Client.prototype._requestHttp = function (announceUrl, opts) {
142143

143144
Client.prototype._requestUdp = function (announceUrl, opts) {
144145
var self = this
145-
var parsedUrl = parseUrl(announceUrl)
146+
var parsedUrl = url.parse(announceUrl)
146147
var socket = dgram.createSocket('udp4')
147148
var transactionId = new Buffer(hat(32), 'hex')
148149

@@ -311,26 +312,52 @@ function Server (opts) {
311312

312313
self.torrents = {}
313314

314-
self._server = http.createServer()
315-
self._server.on('request', self._onRequest.bind(self))
316-
self._server.on('error', function (err) {
317-
self.emit('error', err)
318-
})
315+
// default to starting an http server unless the user explictly says no
316+
if (opts.http !== false) {
317+
self._httpServer = http.createServer()
318+
self._httpServer.on('request', self._onHttpRequest.bind(self))
319+
self._httpServer.on('error', function (err) {
320+
self.emit('error', err)
321+
})
322+
}
323+
324+
// default to starting a udp server unless the user explicitly says no
325+
if (opts.udp !== false) {
326+
self._udpServer = dgram.createSocket('udp4')
327+
self._udpServer.on('message', self._onUdpRequest.bind(self))
328+
}
319329
}
320330

321331
Server.prototype.listen = function (port) {
322332
var self = this
323-
self._server.listen(port, function () {
333+
var tasks = []
334+
335+
self._httpServer && tasks.push(function (cb) {
336+
self._httpServer.listen(port, cb)
337+
})
338+
self._udpServer && tasks.push(function (cb) {
339+
self._udpServer.bind(port, cb)
340+
})
341+
342+
parallel(tasks, function (err) {
343+
if (err) return self.emit('error', err)
324344
self.emit('listening')
325345
})
326346
}
327347

328348
Server.prototype.close = function (cb) {
329349
var self = this
330-
self._server.close(cb)
350+
if (self._udpServer) {
351+
self._udpServer.close()
352+
}
353+
if (self._httpServer) {
354+
self._httpServer.close(cb)
355+
} else {
356+
cb(null)
357+
}
331358
}
332359

333-
Server.prototype._onRequest = function (req, res) {
360+
Server.prototype._onHttpRequest = function (req, res) {
334361
var self = this
335362

336363
function error (message) {
@@ -450,6 +477,10 @@ Server.prototype._onRequest = function (req, res) {
450477
}
451478
}
452479

480+
Server.prototype._onUdpRequest = function (req, res) {
481+
// TODO: implement UDP server
482+
}
483+
453484
Server.prototype._getPeers = function (swarm) {
454485
var self = this
455486
var peers = []

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"hat": "0.0.3",
1818
"inherits": "^2.0.1",
1919
"querystring": "^0.2.0",
20+
"run-parallel": "^0.3.0",
2021
"string2compact": "^1.1.0"
2122
},
2223
"devDependencies": {

0 commit comments

Comments
 (0)