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
parentc24aab11fd46388a789cf1263832fe57836959a5 (diff)
`webtorrent` module works with browserify (fix #88)
-rw-r--r--index.js62
-rw-r--r--lib/server.js58
-rw-r--r--package.json4
3 files changed, 67 insertions, 57 deletions
diff --git a/index.js b/index.js
index a58c4b9..35ed6eb 100644
--- a/index.js
+++ b/index.js
@@ -10,13 +10,9 @@ var fs = require('fs')
var FSStorage = require('./lib/fs-storage')
var hh = require('http-https')
var inherits = require('inherits')
-var mime = require('mime')
var parallel = require('run-parallel')
var parseTorrent = require('parse-torrent')
-var pump = require('pump')
-var rangeParser = require('range-parser')
-var url = require('url')
-
+var Server = require('./lib/server')
inherits(WebTorrent, Client)
@@ -31,15 +27,9 @@ function WebTorrent (opts) {
if (opts.list) return
- if (opts.port !== false) {
- // start http server
- self.server = http.createServer()
- self.server.on('connection', function (socket) {
- socket.setTimeout(36000000)
- })
- self.server.on('request', self._onRequest.bind(self))
- self.server.listen(opts.port)
- self.server.once('listening', function () {
+ if (opts.port !== false && typeof Server === 'function') {
+ self.server = new Server(self, opts.port)
+ self.server.on('listening', function () {
self.listening = true
self.emit('listening')
})
@@ -75,7 +65,7 @@ WebTorrent.prototype.download = function (torrentId, opts, ontorrent) {
debug('add %s', torrentId)
opts = extend({
- storage: FSStorage
+ storage: typeof FSStorage === 'function' && FSStorage
}, opts)
// TODO: fix this to work with multiple torrents
@@ -165,45 +155,3 @@ WebTorrent.prototype._onTorrent = function (torrent) {
self.index = torrent.index
self.torrent = torrent
}
-
-WebTorrent.prototype._onRequest = function (req, res) {
- var self = this
- debug('onRequest')
-
- var u = url.parse(req.url)
- if (u.pathname === '/favicon.ico') return res.end()
- if (u.pathname === '/') u.pathname = '/' + self.index
- var i = Number(u.pathname.slice(1))
-
- if (isNaN(i) || i >= self.torrent.files.length) {
- res.statusCode = 404
- return res.end()
- }
-
- if (self.torrent) onTorrent(self.torrent)
- else self.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)
- }
-}
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
+}
diff --git a/package.json b/package.json
index c7a76ce..57229da 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,10 @@
"email": "feross@feross.org",
"url": "http://feross.org/"
},
+ "browser": {
+ "./lib/fs-storage": false,
+ "./lib/server": false
+ },
"bin": {
"webtorrent": "./bin/cmd.js"
},