Commit Graph

174 Commits

Author SHA1 Message Date
Yoann Ciabaud
d7a651f360 Fixes for PR #155 2016-06-07 10:49:27 +02:00
jakefb
7906848037 Add json to tracker stats 2016-06-02 14:27:14 +12:00
Feross Aboukhadijeh
2959c2cea6 Use safe-buffer
Use the new Buffer APIs from Node v6 for added security. For example,
`Buffer.from()` will throw if passed a number, unlike `Buffer()` which
allocated UNINITIALIZED memory in that case.

Use the `safe-buffer` package for compatibility with previous versions
of
Node.js, including v4.x, v0.12, and v0.10.

https://github.com/feross/safe-buffer
2016-05-29 23:12:23 -07:00
Feross Aboukhadijeh
fafbb25367 Fix "Error: listener must be a function"
The websocket can error and close before the "connection" event has
fired. In that situation, socket.onMessageBound, etc. will be undefined.

Closes #148
2016-04-22 16:34:41 -07:00
Feross Aboukhadijeh
3cd84411fb Fixes for PR #142 2016-03-30 00:31:51 -07:00
Diego Rodríguez
035994ccea Web-based tracker statistics 2016-03-29 19:03:24 -03:00
Feross Aboukhadijeh
c92b1714db Remove all Function.bind calls
For https://github.com/feross/webtorrent-desktop/issues/256
2016-03-28 23:38:23 -07:00
Feross Aboukhadijeh
721a7bea7c make server and client always send { action: 'announce' } 2016-03-23 22:04:07 -07:00
Feross Aboukhadijeh
14ef5dc4b0 ensure that params.offers is type Array 2016-03-18 22:49:13 -07:00
Feross Aboukhadijeh
efb81c29cc fix: cleanup websocket connections
Removed by accident here:
https://github.com/feross/bittorrent-tracker/commit/d079171044e0c1f84f9e
431b110358ad1ff2b20f#diff-78c12f5adc1848d13b1c6f07055d996eL602
2016-03-18 22:48:59 -07:00
Feross Aboukhadijeh
4902a99260 ws server: ignore all future socket errors after socket close 2016-03-18 22:35:01 -07:00
Feross Aboukhadijeh
5020b538ce fix: announces only have one info_hash 2016-03-18 15:57:18 -07:00
Feross Aboukhadijeh
36a4c2208a null out bound functions 2016-03-18 15:55:12 -07:00
Feross Aboukhadijeh
bd92a827e1 fix: reference error 2016-03-18 15:55:07 -07:00
Feross Aboukhadijeh
0740f92d7c server: more thorough socket cleanup 2016-03-18 15:06:05 -07:00
Feross Aboukhadijeh
5ee3f22e2b Fixes for PR #134 2016-03-18 15:02:12 -07:00
Diego Rodríguez Baquero
5138d5c5a9 Standard fix 2016-03-17 16:52:48 -03:00
Diego Rodríguez Baquero
f70d0d2f07 Fix #113 2016-03-17 16:49:27 -03:00
Feross Aboukhadijeh
d079171044 Fixes for PR #129 2016-03-16 17:58:47 -07:00
Yoann Ciabaud
35e6eeaef2 Close the websocket only when no one is using it 2016-03-16 17:33:06 -07:00
Feross Aboukhadijeh
7a7ed575e1 check for params.offers to determine if offers were received 2016-03-15 20:06:53 -07:00
Feross Aboukhadijeh
ba4a52d2d1 Fixes for PR #125 2016-03-15 20:06:39 -07:00
Yoann Ciabaud
39507bf8be Scrape implementation for websocket. Issue #116 2016-03-14 00:36:51 +01:00
Yoann Ciabaud
60f03b9529 Provide IP and HTTP headers in both HTTP and Websocket server 2016-03-03 11:10:54 +01:00
Alex
4142e8cf20 Remove info_hash from failure reason 2016-03-01 19:22:31 +01:00
Feross Aboukhadijeh
5dcdf9c4c1 ws tracker: don't crash with filter function 2016-02-29 17:35:04 -08:00
Feross Aboukhadijeh
0150982b9e :: is already the default for node's http 2016-02-23 12:51:28 -08:00
Feross Aboukhadijeh
b5096e91c3 Support async createSwarm() and getSwarm()
Fix #95.

Make server.getSwarm() and server.createSwarm() into async functions
that take a callback.
2016-01-03 19:50:23 +01:00
Feross Aboukhadijeh
b5de10156d http server: fix bug in how peer ids are returned 2016-01-02 23:36:10 +01:00
Feross Aboukhadijeh
4816eb7a41 send 404 response when req headers are not sent 2015-12-17 00:41:07 +13:00
Feross Aboukhadijeh
5953841466 allow user to intercept 'request' event for http tracker 2015-12-17 00:40:46 +13:00
Feross Aboukhadijeh
714e876777 Give user chance to specify their own default http request handler 2015-12-16 12:37:53 +13:00
Feross Aboukhadijeh
c0555f4e1d style 2015-12-16 12:19:44 +13:00
Feross Aboukhadijeh
f56ca3031b WebSocket tracker should have a shorter interval – default: 2 minutes 2015-12-05 00:18:52 -08:00
Feross Aboukhadijeh
b4ec6fcbc4 fix huge websocket tracker interval 2015-12-05 00:02:57 -08:00
Feross Aboukhadijeh
d29367a4a0 if server.close() is called, end http response object 2015-08-24 00:11:21 +02:00
Linus Unnebäck
4ef0426b90 adhere to padded-blocks 2015-08-14 22:31:22 +02:00
Feross Aboukhadijeh
6935841d56 better debug log 2015-07-29 05:19:57 -07:00
Feross Aboukhadijeh
9db28c2fad massive cleanup 2015-07-29 01:47:09 -07:00
Feross Aboukhadijeh
3746c05d79 restructure folders 2015-07-29 00:26:44 -07:00
Feross Aboukhadijeh
c4ee7aae36 fix thrown exception when websocket connection is aborted
alternative to https://github.com/feross/bittorrent-tracker/pull/89
2015-07-22 16:30:52 -07:00
Feross Aboukhadijeh
82aea33dfa add server.ws.address() function 2015-07-16 18:31:13 -07:00
Feross Aboukhadijeh
89b3fb3086 support custom filter error messages
In addition to returning a boolean (`true` for allowed, `false` for
disallowed), you can return an `Error` object to disallow and provide a
custom reason.

Fixes #85
2015-07-08 10:13:52 -07:00
Feross Aboukhadijeh
f13accfc42 server: Enable WebSocket server by default 2015-07-08 09:44:00 -07:00
Feross Aboukhadijeh
834bf1db5e server: http reqs 404 when only ws server is used 2015-07-08 09:43:47 -07:00
Feross Aboukhadijeh
bf5b9f289a BREAKING: opts.filter function is async; add createSwarm
- The expected signature for opts.filter is now:

function myFilterFn (infoHash, params, cb) {
  cb(infoHash === 'blah)
}

This allows interfacing with a database and fixes #80.

Also, swarm.getSwarm() is no longer responsible for creating a Swarm
instance, only returning an instance if there is already one. Creating
a swarm happens in swarm.createSwarm(). This change only affects users
who were override swarm.getSwarm().
2015-07-04 17:13:07 -07:00
Feross Aboukhadijeh
8532426a87 Use anonymous functions
- allows overriding `onHttpRequest` on the tracker instance, instead of
only on the prototype
- plus, better perf (in theory)
2015-07-02 16:24:03 -07:00
Feross Aboukhadijeh
67291edfb3 server: emit full params object on server events
Fixes #81
2015-06-24 01:48:59 -07:00
Feross Aboukhadijeh
4816796fda throw when listen is called twice in a row 2015-06-09 22:32:04 -07:00
Feross Aboukhadijeh
5be05f2794 Don't return if not listening (in onXXXXRequest)
Fixes #79
2015-06-09 22:25:25 -07:00
Feross Aboukhadijeh
ae9a99a6dc add node 0.10 support back after PR 2015-05-29 21:05:00 -07:00
Garret Buell
e5531a315f reuseAddr for dgram.CreateSocket
Creating a udp4 and udp6 socket on the same port can result in "ERROR: bind EADDRINUSE". Passing reuseAddr: true fixes this.
2015-05-29 10:43:35 -07:00
Feross Aboukhadijeh
340b3faff2 server: always send binary ids 2015-05-27 12:59:12 +02:00
Feross Aboukhadijeh
749cee1465 server command line: log peer_id for web peers 2015-05-27 12:58:50 +02:00
Feross Aboukhadijeh
a420af8a62 separate hostname.upd6 option for IPv6 2015-05-03 21:00:38 -07:00
Feross Aboukhadijeh
9c2b71fef1 fix listen debug log 2015-05-03 20:38:18 -07:00
Feross Aboukhadijeh
3eb0228c91 allow specifying hostnames for udp/http individually 2015-05-03 20:29:58 -07:00
Feross Aboukhadijeh
4da0f3b8ac Listen over IPv6 for UDP
Fixes #73
2015-05-02 12:15:14 -07:00
Feross Aboukhadijeh
1cc5a511bd udp server: support multiple info_hash scrape
Fixes #33
2015-05-01 17:36:07 -07:00
Feross Aboukhadijeh
efa15629dd don't reply to http requests after server has stopped listening 2015-05-01 14:21:09 -07:00
Feross Aboukhadijeh
da0382a435 handle udp send errors
fixes #71

"Port should be > 0 and < 65536"
2015-05-01 14:20:53 -07:00
Feross Aboukhadijeh
1ec4eaa273 style 2015-05-01 14:17:11 -07:00
Feross Aboukhadijeh
604880b87b server: support binding to specific hostname
Fixes #68
2015-04-02 11:42:13 +13:00
Feross Aboukhadijeh
7e7062d2ae websocket tracker server/client: fix binary vs. hex bugs 2015-03-29 21:08:26 +13:00
Feross Aboukhadijeh
03bed33457 add webtorrent (websocket) tracker server
This PR merges webtorrent-tracker into this repo. Keeping the code in
sync between the two repos was becoming burdensome. This change should
not effect performance of the server since the webtorrent tracker is
disabled by default.

To enable the webtorrent tracker (disabled by default), do:

```js
var server = new Server({ ws: true })
```
2015-03-27 16:19:06 +13:00
Feross Aboukhadijeh
9ace2f5d3a add command line server
Fixes #26
2015-03-19 21:47:47 -07:00
Feross Aboukhadijeh
bdc7edea70 preserve backwards compatibility 2015-02-19 12:56:09 -08:00
Nick Rafter
de19b61c52 Exposed full http request to filter function for more configurable filtering 2015-02-19 12:01:46 -05:00
Astro
138bdb8573 server: rm check for http/udp option
my use-case brings its own http server, i just use onHttpRequest()
2015-02-06 18:16:47 +01:00
Astro
b33531d835 server: allow onHttpRequest() with options={ action: 'announce' } for custom routing
For GH issue #58
2015-02-04 20:35:52 +01:00
Astro
e1b7fa7e5c server: save HTTP req/res in params
For GH issue #58
2015-02-04 20:34:46 +01:00
Feross Aboukhadijeh
82e6792a6b BREAKING CHANGES
Breaking changes:
- 'listening' event no longer emits with `port` param
- `server.port` property removed (instead, use
`server.http.address().port`)

Added features:
- expose http server as `server.http`
- expose udp server as `server.udp`
- client.destroy() - ungracefully leave the swarm
- server: added `filter` option to black/whitelist torrents

Bugfixes:
- client considers udp tracker errors to be warnings
- emit 'start', 'stop', 'update', etc. AFTER response sent
- fix udp error response action and message being `undefined`

Internal:
- remove `portfinder` dep
- add complete test for `filter` functionality
2015-01-29 14:59:08 -08:00
Sidd Sridharan
55079798c5 white/blacklist implemented (#44) + docs/tests updated 2015-01-29 12:24:17 -08:00
Feross Aboukhadijeh
812c2ded4e style 2015-01-28 18:18:47 -08:00
Feross Aboukhadijeh
a6f14037ff style 2015-01-28 18:09:23 -08:00
Feross Aboukhadijeh
ebb86f728f JavaScript Standard Style
https://github.com/feross/standard
2015-01-26 18:16:01 -08:00
Astro
2b8423b04a server: fix interval unit 2015-01-05 19:55:58 +01:00
Astro
243c94e3d0 server: make onUdpRequest() part of public API
As per https://github.com/feross/bittorrent-tracker/pull/48#issuecomment-66893626
2014-12-14 00:12:21 +01:00
Feross Aboukhadijeh
83b4ecc7f5 Merge branch 'master' into server-ipv6
Conflicts:
	server.js
2014-12-13 14:35:29 -08:00
Feross Aboukhadijeh
37203fb7a6 Merge pull request #49 from feross/reuse-udp
Server: reuse UDP socket
2014-12-13 14:17:21 -08:00
Astro
d79bf92db0 server: ipv6 support 2014-12-13 00:12:47 +01:00
Astro
80da7c50d0 server: reuse udp socket for responses
Reasons:
* Save file-descriptors
* Support clients behind NAT
2014-12-12 17:27:03 +01:00
Astro
2f7a7131d0 server: make onHttpRequest() part of public API 2014-12-12 16:52:13 +01:00
Feross Aboukhadijeh
79068a49cf Use hex info_hash and peer_id throughout 2014-12-12 02:02:11 -08:00
Astro
991363a28c Revert "server _onHttpRequest(): ensure non-empty params"
This reverts commit 74d9139049.

Conflicts:
	server.js

feross commented on 74d9139 5 hours ago
> Do we need to check for empty params here?
>
> _onRequest should return an error via callback because
> params.action is missing. Won't that work?
74d9139049 (commitcomment-8937428)
2014-12-12 02:57:01 +01:00
Feross Aboukhadijeh
edb5c6e854 code style 2014-12-11 12:53:39 -08:00
Astro
217bcf7de5 server _onUdpRequest(): don't check empty params, errors will be thrown now 2014-12-11 16:39:10 +01:00
Astro
7a8f9a779f server _onHttpRequest(): don't wrap errors in errors 2014-12-11 16:24:33 +01:00
Astro
74d9139049 server _onHttpRequest(): ensure non-empty params 2014-12-11 16:22:17 +01:00
Astro
7a417a591d parseUdpRequest(): fix params.ip 2014-12-11 16:11:12 +01:00
Astro
8439300df9 server: unify compact serialization 2014-12-10 16:51:35 +01:00
Astro
b72960dee3 server: split out Swarm 2014-12-10 16:47:41 +01:00
Astro
1c754a2f49 move parseHttpRequest(), parseUdpRequest() to lib/parse_{http,udp}.js 2014-12-10 00:44:45 +01:00
Astro
aea3c44c08 server: expose getSwarm()
drops capability to pass a *hex* infoHash
2014-12-09 23:18:47 +01:00
Astro
fee289b074 server: rm superfluous action fields 2014-12-09 23:18:35 +01:00
Astro
366b49bf06 server: split out _onRequest() et al 2014-12-09 02:35:05 +01:00
Astro
85be917d51 server: replace request string by action number 2014-12-09 00:29:02 +01:00
Astro
0bc88bcf22 server: split out parseUdpRequest() 2014-12-09 00:22:36 +01:00
Astro
037a53accb server: split out parseHttpRequest() 2014-12-08 23:42:05 +01:00
Feross Aboukhadijeh
2824f16c49 don't assume peer var will exist 2014-11-26 17:40:34 +08:00