Commit Graph

714 Commits

Author SHA1 Message Date
Matt Joiner 8479f215e0 Don't return if there's an error accepting
This happens if there's too many file descriptors, and left the client unresponsive.
2018-07-22 12:58:41 +10:00
Matt Joiner d4d3e24c6f Track metadata chunks read with its own Count 2018-07-15 10:09:58 +10:00
Matt Joiner d4d8f78906 Send extended message before fast/bitfield
This is how Transmission does it.
2018-07-14 11:28:54 +10:00
Matt Joiner f5bd377941 Change pieceIndex to peer_protocol.Integer 2018-07-12 09:15:15 +10:00
Matt Joiner ba8ec1a787 Move back to net.IP for extended handshake message IPs 2018-07-12 00:00:07 +10:00
Matt Joiner 2685ef6aa9 Use half open limit directly from Config 2018-07-10 12:23:00 +10:00
Matt Joiner 1f6ba94882 Make extended handshake a struct, and move a bunch of extended stuff into peer_protocol 2018-07-10 12:20:36 +10:00
Matt Joiner e3cb94006c Reinstate the reduce dial timeout and update some values
Fixes #263
2018-07-10 11:19:14 +10:00
Matt Joiner fad06c7ddf sortimports 2018-07-07 11:36:58 +10:00
Matt Joiner e1d6fc2341 Add torrent.InfoHash type alias 2018-07-07 11:32:52 +10:00
Matt Joiner 76a3c0891a Expose handshake stuff in peer_protocol 2018-07-07 11:31:29 +10:00
Matt Joiner 5f20a21c9d Change the duplicateRequestTimeout to 1s 2018-06-30 21:10:48 +10:00
Matt Joiner 60dd0eed53 Make requestStrategy 3 the default
Fixes #253.
2018-06-28 12:06:21 +10:00
Matt Joiner 7619994ef5 Remove premature initialization of Torrent.lastRequested 2018-06-25 14:03:22 +10:00
Matt Joiner 195695042d Add requestStrategy 3, which duplicates requests only after a timeout
Possible solution for #253.
2018-06-24 20:04:31 +10:00
Matt Joiner 159c4a0e28 Ensure 64-bit alignment of ConnStats fields
Fixes #262.
2018-06-23 18:33:56 +10:00
Matt Joiner 70093a4db3 Update accept limit parameters 2018-06-22 17:43:02 +10:00
Matt Joiner f137bfdd61 Use RLock for Client.WriteStatus 2018-06-17 16:11:50 +10:00
Matt Joiner 70dfc1f518 Allow disabling accept limiting and modify some constants 2018-06-16 16:37:13 +10:00
Matt Joiner 0854161e99 Clear accept limits when adding a new torrent 2018-06-16 16:34:35 +10:00
Matt Joiner e97f487d2e Rename Config->ClientConfig and change how defaults work
This is a very breaking change.
2018-06-16 16:30:04 +10:00
Matt Joiner ad5e44eaf5 Add lots of new expvars and perf timers 2018-06-15 22:42:05 +10:00
Matt Joiner 81dcb9b779 Remove old Client.dialTCP 2018-06-15 22:39:37 +10:00
Matt Joiner 8acfc5149b Rate limit incoming IP prefixes
Lots of bad or dishonest incoming handshakes for unwanted torrents.
2018-06-15 22:38:11 +10:00
Matt Joiner fd0fb0051b Update dial expvars 2018-06-15 14:30:31 +10:00
Matt Joiner da4a6503c2 Fix race condition in Client.ListenAddrs 2018-06-13 10:53:38 +10:00
Matt Joiner 856d5083b5 Update log call 2018-06-12 20:22:54 +10:00
Matt Joiner 360e1dbdd1 Track ConnStats with atomics 2018-06-12 20:21:53 +10:00
Matt Joiner b024e1cff6 Remove unnecessary use of go keyword 2018-06-12 20:16:17 +10:00
Matt Joiner cea5584d6b Track outgoing through a new field on connection, and rework duplicate connection preferencing 2018-06-12 20:14:00 +10:00
Matt Joiner ab48d4731c Include rate limiting and stats in BenchmarkConnectionMainReadLoop 2018-06-11 12:20:51 +10:00
Matt Joiner 5a53d29c75 Minimize lock time in Client.acceptConnections 2018-06-10 10:29:19 +10:00
Matt Joiner ac6ba9f021 Add ConnStats at Client level
ConnStats management is refactored to make this less tedious.
2018-06-10 09:20:33 +10:00
Denis f6ed514c3b added proxy support to the library, using ProxyURL parameter. (#256) 2018-06-08 20:52:36 +10:00
Matt Joiner 15b828515e Don't listen on IPv6 if DisableIPv6 is set
Fixes #250
2018-05-02 19:24:46 +10:00
Matt Joiner df38775630 A few adjustments to prioritized peers usage 2018-04-14 21:44:41 +10:00
Matt Joiner 610dbd17ba Fix #244 2018-04-14 21:43:08 +10:00
Matt Joiner 5c81c6c70a Include connection network in log message 2018-04-14 11:24:06 +10:00
Matt Joiner 0290a1610a Merge branch 'circleci'
# Conflicts:
#	client.go
2018-04-12 17:28:13 +10:00
Matt Joiner e38216a472 Add comment 2018-04-12 16:12:27 +10:00
Matt Joiner 485d8cdf61 Use new DHT stats fields 2018-04-12 16:11:22 +10:00
Matt Joiner 8a8fe378d4 Improve DHT status output 2018-04-12 15:12:15 +10:00
Matt Joiner b5df073217 Support different hosts for each network
CircleCI's localhost hostname doesn't resolve for IPv6.
2018-04-12 15:06:53 +10:00
Matt Joiner 319e57d1c6 Rework conns to/and allow multiple DHT servers
This will help with #229, and IPv6 support.
2018-04-12 11:41:07 +10:00
Matt Joiner 92f6209c5f Prioritize pending nodes with BEP 40 2018-04-04 17:59:28 +10:00
Matt Joiner 8f7408b1f9 IPv6 tracker support 2018-02-19 16:19:18 +11:00
Matt Joiner fc03dcb859 Set the connection.cryptoMethod
It was unwittingly dropped from received connections, and may never have been set for initiated connections.
2018-02-16 10:59:56 +11:00
Matt Joiner b92e8b7814 Add support for disabling IPv4 and IPv4 peers 2018-02-16 10:46:11 +11:00
Matt Joiner 066cdd520b Add mse.CryptoMethod type 2018-02-16 10:36:29 +11:00
Matt Joiner 0aad14afd1 Add a check for a strange panic in production 2018-02-15 16:03:44 +11:00
Matt Joiner 39bde7237e Try to count IPv6 connections 2018-02-13 00:48:21 +11:00
Matt Joiner dd9244c01d bencode: Unmarshal now returns an error on unused trailing bytes 2018-02-13 00:21:28 +11:00
Matt Joiner 57216bd299 Standardize on krpc types, and extend PEX message type for IPv6 2018-02-11 15:13:00 +11:00
Matt Joiner 8d1995c4d4 Support IPv6 blocklists
Existing packed blocklists need to be regenerated.
2018-02-11 15:11:26 +11:00
Matt Joiner 924b916b2a Expose Client.Closed 2018-02-08 23:57:53 +11:00
Matt Joiner f57437201e Send bitfield messages before other initial messages 2018-02-05 17:41:53 +11:00
Matt Joiner e0c2265cb0 Support sending HaveAll 2018-02-04 19:10:25 +11:00
Matt Joiner ea8659c951 Move initiateConn and openNewConns onto Torrent 2018-02-04 12:59:23 +11:00
Matt Joiner efecf88d3c Use flip buffering for connection writing 2018-02-03 15:09:38 +11:00
Matt Joiner 085e676ef0 Generate default peerExtensionBytes using helpers 2018-02-03 13:36:17 +11:00
Matt Joiner 9567aa901c Add missing increments to some stats 2018-02-03 11:53:11 +11:00
Matt Joiner fe991128ed Rework connection stat reconciliation with Torrent and refactor doppleganger handling 2018-02-02 19:07:20 +11:00
Matt Joiner b0c1f99509 Merge a bunch of stuff into ConnStats and refactor connection.upload 2018-02-02 19:04:56 +11:00
Matt Joiner 97ffe39561 Move sendChunk onto connection 2018-02-02 13:26:04 +11:00
Matt Joiner 1a7708b484 sortimports 2018-01-31 16:42:40 +11:00
Matt Joiner 77806c1f49 More development of the new logging interface 2018-01-29 18:22:21 +11:00
Matt Joiner 53e32ca9dd Start using new log package 2018-01-28 16:07:11 +11:00
Matt Joiner e08d11a4b9 Update Client.newConnection with changed rateLimitedReader interface 2018-01-28 15:42:37 +11:00
Matt Joiner 51b3374015 Add very tentative UPnP NAT traversal
Relates to #230
2018-01-25 13:14:20 +11:00
Matt Joiner 9285470cc6 Improve some log messages 2018-01-25 13:10:52 +11:00
Matt Joiner 56109b387d Formatting and comments 2018-01-06 16:37:40 +11:00
Matt Joiner e13b0eccbf Make peerID a public type
Wanted it applied to Client Status output
2018-01-06 15:50:45 +11:00
Matt Joiner c44ee5fec4 Use peerID type more, and make its Stringer output nicer 2018-01-06 12:34:31 +11:00
Matt Joiner 8f7720edb2 Merge commit '6ab65a49a8a72dea1a28968b2ab42a85fd4566ec'
# Conflicts:
#	config.go
2017-11-08 20:23:15 +11:00
Matt Joiner 3aa1e8f3ef Add a test for behaviour after getting metadata_size and before GotInfo
#208
2017-11-08 19:31:10 +11:00
Matt Joiner 8712cc25d0 Make Client.PeerID return [20]byte 2017-11-08 19:28:37 +11:00
Matt Joiner 7eb62eec0d Move some code around 2017-11-08 15:00:18 +11:00
themihai 6ab65a49a8 feat(config): Allows the torrent client to customise the client identity and connection config 2017-11-07 20:14:13 +02:00
Matt Joiner 9757f04cf8 Apply megacheck to torrent package 2017-11-07 16:11:59 +11:00
Matt Joiner 82093937d5 Ignore expected error 2017-11-06 14:01:07 +11:00
Matt Joiner 6aad8041ab Implement new request strategy
The new strategy, 2, has the fastest connection download by priority in order, and all other pieces stick to a randomized ordering that's stable per connection.
2017-09-23 15:25:47 +10:00
Matt Joiner bb53c97d38 Move uploading to the connection writer 2017-09-18 12:09:08 +10:00
Matt Joiner ed0fa62340 Comment and formatting 2017-09-17 00:45:12 +10:00
Matt Joiner b39df82fbc Include peer data with half open connections 2017-09-15 19:10:09 +10:00
Matt Joiner 846ac2d33e Herp 2017-09-15 12:56:54 +10:00
Matt Joiner d4576a56d9 Add some expvars to track uTP/TCP and PHE fallbacks for outgoing connections 2017-09-15 12:56:15 +10:00
Matt Joiner 881f1a7e35 Support plaintext crypto method for protocol header encryption 2017-09-13 18:20:20 +10:00
Matt Joiner 110764480e Avoid triggering writer cond where possible 2017-09-01 12:09:41 +10:00
Matt Joiner 13e79039f2 Generate requests, cancels and interest state in the connection writer 2017-08-31 23:48:52 +10:00
Matt Joiner 986b9093a0 Make connection.writer pull from a buffer 2017-08-31 16:26:45 +10:00
Matt Joiner 0388ec1eee Synchronize Torrent.Info 2017-08-29 15:16:53 +10:00
Matt Joiner a8a1ea755d Remove unused functions 2017-08-26 13:23:04 +10:00
Matt Joiner 401974dd8d dht.ServerConfig.StartingNodes is now a function
Additionally cmd/torrentfs uses the global bootstrap nodes for its DHT. Aids with https://github.com/anacrolix/torrent/issues/180
2017-08-25 16:28:27 +10:00
Matt Joiner 97cb41a5c9 Provide default starting nodes to DHT if default torrent client config is used
https://github.com/anacrolix/torrent/issues/178
2017-08-18 11:14:28 +10:00
Matt Joiner 76c60ffa77 Try a state-delta function for updating request state
Also adds Torrent.networkingEnabled, though it isn't yet useful.
2017-08-18 01:51:02 +10:00
Matt Joiner 170bb72c34 Augment dialed connection timeouts with context.Context
Works toward a dial timeout for half open connections. https://github.com/anacrolix/torrent/issues/169
2017-08-16 17:05:05 +10:00
Matt Joiner 9bec8f6a95 Use net.Dialer for TCP 2017-08-16 15:48:30 +10:00
Matt Joiner 8317417910 Use DialContext instead of DialTimeout with utp 2017-08-16 15:35:17 +10:00
Matt Joiner 2d59d48015 Some tidying in Client.dialFirst 2017-08-16 10:32:25 +10:00
Matt Joiner 5099d8e33f DHT bootstrap is not asynchronous 2017-08-10 11:18:48 +10:00