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
diff options
context:
space:
mode:
authorFeross Aboukhadijeh <feross@feross.org>2014-09-13 21:04:13 +0400
committerFeross Aboukhadijeh <feross@feross.org>2014-09-13 21:04:13 +0400
commit8290a91b398b44b41f29306a328d8ee5097c222e (patch)
tree1f58db7313b3ac22f3d15b82444f723f813be717 /lib/server.js
parentc24aab11fd46388a789cf1263832fe57836959a5 (diff)
`webtorrent` module works with browserify (fix #88)
Diffstat (limited to 'lib/server.js')
-rw-r--r--lib/server.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/server.js b/lib/server.js
new file mode 100644
index 0000000..3f85629
--- /dev/null
+++ b/lib/server.js
@@ -0,0 +1,58 @@
+var debug = require('debug')('webtorrent:server')
+var http = require('http')
+var mime = require('mime')
+var pump = require('pump')
+var rangeParser = require('range-parser')
+var url = require('url')
+
+module.exports = function Server (webtorrent, port) {
+ var server = http.createServer()
+
+ server.on('connection', function (socket) {
+ socket.setTimeout(36000000)
+ })
+
+ server.on('request', function (req, res) {
+ debug('onRequest')
+
+ var u = url.parse(req.url)
+ if (u.pathname === '/favicon.ico') return res.end()
+ if (u.pathname === '/') u.pathname = '/' + webtorrent.index
+ var i = Number(u.pathname.slice(1))
+
+ if (isNaN(i) || i >= webtorrent.torrent.files.length) {
+ res.statusCode = 404
+ return res.end()
+ }
+
+ if (webtorrent.torrent) onTorrent(webtorrent.torrent)
+ else webtorrent.once('torrent', onTorrent)
+
+ function onTorrent (torrent) {
+ var file = torrent.files[i]
+
+ res.setHeader('accept-ranges', 'bytes')
+ res.setHeader('content-type', mime.lookup(file.name))
+ res.statusCode = 206
+
+ var range
+ if (req.headers.range) {
+ // no support for multi-range reqs
+ range = rangeParser(file.length, req.headers.range)[0]
+ debug('range %s', JSON.stringify(range))
+ res.setHeader(
+ 'Content-Range',
+ 'bytes ' + range.start + '-' + range.end + '/' + file.length
+ )
+ res.setHeader('Content-Length', range.end - range.start + 1)
+ } else {
+ res.setHeader('Content-Length', file.length)
+ }
+ if (req.method === 'HEAD') res.end()
+ pump(file.createReadStream(range), res)
+ }
+ })
+ server.listen(port)
+
+ return server
+}