Commit Graph

902 Commits

Author SHA1 Message Date
Matt Joiner af1ca91e04 Remove conntrack, expose Torrent.AnnounceToDht, ClientConfig.PeriodicallyAnnounceTorrentsToDht 2021-06-21 12:13:53 +10:00
Matt Joiner 7d9e2b18d6 Extract chansync to github.com/anacrolix/chansync 2021-06-07 13:01:40 +10:00
Matt Joiner 36f52d7a14 Apply next request state asynchronously 2021-06-07 13:01:40 +10:00
Matt Joiner d37dea1f61 Move peerConnMsgWriter into its own file 2021-06-07 13:01:40 +10:00
Matt Joiner 24ceed61da Break out peerConnWriter 2021-06-07 13:01:40 +10:00
Matt Joiner 95d808d3c5 Use rejiggered missinggo bitmap 2021-06-07 13:01:39 +10:00
Matt Joiner 86524214f5 Merge maxRequests into localClientReqq 2021-06-07 13:01:39 +10:00
Matt Joiner 0d4e566fc0 Extract request strategy stuff into a separate module 2021-06-07 13:01:39 +10:00
Matt Joiner 875ead3582 Reuse pieceRequestOrder slice 2021-06-07 13:01:39 +10:00
Matt Joiner 2d2456249a Remove unused pieceRequestOrder in Client 2021-06-07 13:01:39 +10:00
Matt Joiner 9c9ba1aeac PeerConn.post becomes PeerConn.write 2021-06-07 13:01:39 +10:00
Matt Joiner 56e2a8a3a6 Fix download rate, status output 2021-06-07 13:01:39 +10:00
Matt Joiner 0830589b0a Pass tests with new full-client request strategy implementation 2021-06-07 13:01:39 +10:00
Matt Joiner 56e5d08eff Log failure to complete metadata 2021-06-07 12:57:42 +10:00
Matt Joiner 47284cf426 Rename Torrent.{add,delete}Connection 2021-05-14 15:39:01 +10:00
Matt Joiner 305ba51dc2 Big logging cleanup to improve experience from README 2021-05-04 12:44:51 +10:00
Matt Joiner cff461c898 Add ClientConfig.ConfigureAnacrolixDhtServer 2021-02-20 22:16:54 +11:00
Matt Joiner 456a2f7c5d Expose more callbacks and Request and ChunkSpec 2021-01-28 14:23:22 +11:00
Matt Joiner b5215ea7e8 Expose Peer.Network to replace Peer.RemoteAddr.Network 2021-01-25 15:49:48 +11:00
Matt Joiner 9f9953be52 Don't expose Peer network through RemoteAddr 2021-01-25 15:49:48 +11:00
Matt Joiner 27108bd2f7 Export Peer 2021-01-25 15:49:48 +11:00
Matt Joiner b2fd53f4ce Generalize internal/string-limiter Key type 2020-12-21 09:39:02 +11:00
Matt Joiner ddd03362f8 Factor out internal/string_limiter 2020-12-17 12:22:02 +11:00
Matt Joiner d713aaf280 Rework active announce limiter to reduce contention 2020-12-15 15:29:45 +11:00
Matt Joiner 0d40c4bac2 Read peer request data without Client lock 2020-11-16 16:37:11 +11:00
Matt Joiner b020b8c2b6 Add support for the x.pe magnet link parameter 2020-11-16 16:37:11 +11:00
Matt Joiner e6da640bb2 Tidy up doc, file names, naming 2020-11-09 10:56:45 +11:00
Matt Joiner 131037dd9f Add the ReceiveEncryptedHandshakeSkeys callback 2020-11-05 13:28:45 +11:00
Matt Joiner 8088002ba6 Fix error handling for bad torrent adds with safe file handling 2020-10-15 16:03:43 +11:00
Matt Joiner 4a4cb5dc58 Ensure PeerConn._close is called for incoming connections
This fixes missing calls to PeerConnClosed callback.
2020-10-14 15:11:45 +11:00
Matt Joiner 6ed1062176 Fix some log levels 2020-10-12 17:12:34 +11:00
Matt Joiner a9102abf1d Tidy up some logging 2020-10-10 10:24:58 +11:00
Matt Joiner 3d7ac87e3b Expose Client.ConnStats 2020-10-01 11:20:44 +10:00
Matt Joiner a3827099c4 Limit simultaneous announces to the same URL 2020-10-01 10:43:10 +10:00
Matt Joiner a2c7b384df Limit half-open connections at the Client level 2020-09-30 16:56:27 +10:00
Matt Joiner 1cdae13700 Fix conn status string for WebRTC connections 2020-09-29 16:21:54 +10:00
Matt Joiner 9d0ea15044 Expose peer.RemoteAddr 2020-07-15 16:16:14 +10:00
Matt Joiner 7ee0fdafe3 Add some client callbacks 2020-07-15 16:16:14 +10:00
Matt Joiner e81d8890dd Don't filter context cancel errors
The caller thinks this means it succeeded, when it fact it was cancelled and it should interpret that appropriately.
2020-06-19 11:41:26 +10:00
Matt Joiner 62e7f29a0c Fix panic in webseed request rejection logging
Also use a new helper in Logger to simplify things.
2020-06-04 11:51:17 +10:00
Maxb a7689f52bd Add DisallowDataDownload/Upload to TorrentSpec and small log cleanup 2020-06-04 10:36:56 +10:00
Matt Joiner 8a2ff43246 Tidy up the interface changes 2020-06-02 17:41:59 +10:00
Matt Joiner 997384a394 Make use of magnet source fields and expose Torrent.MergeSpec 2020-06-02 15:06:05 +10:00
Matt Joiner 026c737886 Add webseeds from magnet links 2020-06-02 13:53:25 +10:00
Matt Joiner ff53ab860c Further progress on webseeding 2020-06-01 18:25:45 +10:00
Matt Joiner 69a0f2f1e4 Got file storage working with segment index 2020-06-01 00:14:51 +10:00
Matt Joiner 317146dec9 Export PeerImpl and all its methods 2020-05-31 13:22:36 +10:00
Matt Joiner 3f8f6e1733 Got things compiling 2020-05-31 13:09:56 +10:00
Matt Joiner de88c620bc Seperate peer and PeerConn 2020-05-30 15:18:28 +10:00
Matt Joiner 02adc3f2ee Break peer out from PeerConn 2020-05-30 10:14:20 +10:00
Matt Joiner cb37a914c1 Rename Peer to PeerInfo, and unexport PeerInfos 2020-05-29 19:44:48 +10:00
Matt Joiner 461403c0f5 Fix Client torrent "of %d bytes" in status 2020-05-13 17:32:16 +10:00
Matt Joiner 39171df0c6 Fix PeerConn outgoing field for webrtc
Due to jumping straight into handshakes, outgoing=true was assumed. This didn't actually solve the issue I thought it might, but is important for determining "preferred" connection direction, which may result in dropping connections.
2020-05-03 18:37:26 +10:00
Matt Joiner f36fc10079 Fix crash when announcing unloaded torrent to websocket 2020-05-03 14:10:46 +10:00
Matt Joiner 3e9a5a4aec Expose ClientConfig.Extensions
Also run the storage failure test with fast disabled for the seeder. This probably would have tickled some issues in the past, so it seems like a good place to try it out.
2020-04-23 13:03:40 +10:00
Matt Joiner a5db7a7fa6 Remove websocket tracker logging level override 2020-04-22 11:41:12 +10:00
Matt Joiner 0ab6d108be Pool webtorrent tracker websockets at the Client level 2020-04-21 18:08:43 +10:00
Matt Joiner c074b30d94 Log webrtc connection errors and rework webtorrent.TrackerClient 2020-04-20 13:42:25 +10:00
Matt Joiner 520d3c38e3 Fix some webtorrent PeerConnection leaks 2020-04-20 10:21:31 +10:00
Matt Joiner d05ce2d274 Update anacrolix/log 2020-04-16 17:20:58 +10:00
Matt Joiner 74986db9ed Don't try to do conventional dials if we have no dialers
Stops us from consuming all the peers we store for no reason.
2020-04-16 12:00:49 +10:00
Matt Joiner d4430e89b6 Fix crash with conventional trackers when tcp and utp are disabled
Fixes #396.
2020-04-16 10:27:17 +10:00
Matt Joiner f45dac1e38 Use offer_id for webrtc conn string 2020-04-13 14:04:34 +10:00
Matt Joiner 27bfdd0dbf Create peer connections when WebRTC connections obtain a data channel 2020-04-07 10:59:10 +10:00
Matt Joiner 378ccd0932 Logging improvements for DHT 2020-03-17 13:48:09 +11:00
Matt Joiner c83738f3f4 Update to latest anacrolix/dht 2020-03-17 13:47:53 +11:00
Matt Joiner 7fe199992c Use stable bit set for pending pieces PriorityBitmap
Fixes #382.
2020-02-27 18:33:44 +11:00
Matt Joiner ddc61845ac Misc cleanup 2020-02-22 19:38:56 +11:00
Matt Joiner c855c7a366 Differentiate between storage.ClientImpl{,Closer} 2020-02-21 14:12:44 +11:00
Matt Joiner ddddc63924 Expose PeerConn.PeerPieces
Fixes #375.
2020-02-21 11:51:24 +11:00
Matt Joiner dff436f102 Rename connection->PeerConn and fix exports 2020-02-21 11:07:50 +11:00
Matt Joiner 01955ebe80 Tweak DHT status output 2020-02-21 09:47:46 +11:00
Matt Joiner afe4d8795d Support custom DHT servers
Addresses #266.
2020-02-20 17:46:29 +11:00
Matt Joiner 71f18f1042 Remove ClientConfig.ProxyURL and DefaultHTTPUserAgent
ProxyURL is no longer used for implicit sockets, this will ensure consumers are aware. It's other behaviour is already more correct specified through HTTPProxy.

DefaultHTTPUserAgent was vestigial, and is specified now through the ClientConfig.
2020-02-20 17:04:11 +11:00
Matt Joiner d24922dc09 Add support for non-IP-based networks
Includes a test with unix sockets. Exposes AddDialer, AddListener, and reworks Peer.
2020-02-20 16:47:37 +11:00
Matt Joiner e9e128cbf8 Split Client dialers and listeners 2020-02-20 11:10:05 +11:00
Matt Joiner 376ff763fe Apply staticcheck 2020-02-20 11:09:57 +11:00
Matt Joiner dc39e98cfb Fix race in requestStrategyThree request timeout callback 2020-01-20 11:51:24 +11:00
Matt Joiner cfc68d3ae6 Fix bad init of Torrent.requestStrategy 2020-01-14 10:51:09 +11:00
Matt Joiner 2559af0f9c Extract the request timeout stuff into requestStrategyThree 2020-01-14 10:51:09 +11:00
Matt Joiner 4c989da21e Extract the request strategy logic
Bit messy. Now it'll be easier to clean-up what it depends on, and test.
2020-01-14 10:51:09 +11:00
James Lawrence ad73cf8611 fixes various vet errors 2020-01-14 09:09:09 +10:00
Matt Joiner 98bd488466 Fix a log level 2020-01-07 10:50:18 +11:00
Matt Joiner c9f9235117 Fix panic in logging
Found by @ccampbell.
2020-01-07 10:44:58 +11:00
Matt Joiner 3a733e530c Improve logging and errors for accept rate limiting 2020-01-04 17:14:18 +11:00
Sick Yoon 32579e72c7 disable listeners if proxy is configured 2020-01-02 09:18:14 +10:00
Matt Joiner 5f1d937b62 Add connection trust flag, and more tests with small caches
Thanks to observations and feedback from @ccampbell.
2019-12-18 13:52:00 +11:00
Matt Joiner f448f55e88 Coalesce piece state change notifications on client unlock
Reported by Craig Campbell <iamcraigcampbell@gmail.com>.
2019-12-13 15:55:56 +11:00
Matt Joiner 659f7e0371 Include traversal stats in completed bootstrap log message 2019-11-07 08:51:14 +11:00
Matt Joiner 0aef469a4c Use missinggo/v2/conntrack 2019-11-02 22:35:57 +11:00
Matt Joiner 289293f3cc Rename peer source constants 2019-10-17 17:46:35 +11:00
Matt Joiner 93de711d42 Update dht to include interface change to OnAnnouncePeer 2019-10-17 17:46:09 +11:00
Matt Joiner 99fea719a6 Add Client.String 2019-10-03 19:11:45 +10:00
Matt Joiner 0fd282019e Add some logging for connections and metadata requests 2019-10-03 19:09:55 +10:00
Matt Joiner 2885426e7e Prefix torrent logger message text 2019-10-01 21:16:02 +10:00
Matt Joiner 6c8c4a6518 Pass logger to DHTs 2019-09-13 08:46:30 +10:00
Matt Joiner eb4dad73ae Lots of improvements to logging 2019-08-22 13:59:04 +10:00
Matt Joiner cb1bf0f413 goimports -local 2019-08-21 20:58:40 +10:00
Matt Joiner 5a2c1c9b76 Upgrade to simplified logger 2019-08-21 20:44:12 +10:00
Matt Joiner e3e4a11b16 Add some timing code to Client.dialFirst 2019-08-15 10:17:39 +10:00
Matt Joiner 6013f09f8a Don't include the handshake in the dial timeout for outgoing connections 2019-08-11 13:17:47 +10:00
Matt Joiner 9224303c1e Update all imports of dht to v2 2019-08-10 18:46:07 +10:00
Matt Joiner 5f0b040f25 Include remote address when logging failure to establish outbound connection 2019-07-30 17:26:12 +10:00
Matt Joiner 0b15fda7a8 NewClient nil ClientConfig should use dynamic port
It's pretty hard to test otherwise, if something's already on the default port.
2019-07-30 17:19:14 +10:00
Matt Joiner cbc98e17aa Fix race spewing Client stats 2019-07-30 17:18:09 +10:00
Matt Joiner 3c0588d661 Add some commented out logging 2019-07-19 16:17:38 +10:00
Matt Joiner 338287486f Always return errors when handshakes or dialing fails
I intend to use xerrors-style error handling for special cases.
2019-07-19 16:15:46 +10:00
Matt Joiner 76513bfe0b Restart dial timeout for fallback header obfuscation attempt 2019-07-19 14:46:48 +10:00
Matt Joiner 5774859701 Try with the non-preferred header obfuscation if there's an error
The function called was more selective about what it returned as an error, but that style is outdated (should use xerrors), and no longer returns as expected.
2019-07-19 14:13:42 +10:00
Matt Joiner 1d8873552a Rework header obfuscation and add tests for fallbacks 2019-07-19 13:23:36 +10:00
Matt Joiner 90355b3dc7 Add dummy code for emulating the bug in #114
Useful for ensuring that the test can still reproduce the issue with changes to encryption handling.
2019-07-19 13:07:40 +10:00
Matt Joiner 12958ad384 Refactor Client.dialFirst 2019-06-21 14:50:49 +10:00
Matt Joiner 06ada2ef0f Remove unnecessary import alias 2019-06-21 14:49:43 +10:00
Matt Joiner 30c705f2f8 Count client listener accepts 2019-06-21 14:49:21 +10:00
BruceWang 60e215aa81 Add OnQuery Hook 2019-05-29 15:08:46 +10:00
Matt Joiner bc249730aa Fix segfault on nil conntrack.EntryHandle instance when dialing
Fixes https://github.com/anacrolix/torrent/issues/314. Comments were added to the the conntrack package master, but have no functional change required here.
2019-04-10 18:27:54 +10:00
Matt Joiner 485d6bb6e7 Fix leaked conntrack.EntryHandle 2019-03-29 08:48:56 +11:00
Matt Joiner 5829c30146 Make use of the new context parameter in conntrack Wait 2019-03-11 10:46:06 +11:00
Matt Joiner ee5a941203 Switch entirely to anacrolix/log 2019-01-15 18:18:30 +00:00
Matt Joiner cc531b8c4a Improve bootstrap result log message 2018-11-29 18:33:33 +11:00
Matt Joiner d9fe3f50d3 Discount dial errors that won't affect connection tracking
This will reduce pressure on the conntrack instance.
2018-11-28 10:32:08 +11:00
Matt Joiner d9e1ebde70 Improve network handling and only listen networks we will use
Fixes #290.
2018-11-28 10:30:21 +11:00
Matt Joiner 70f63b2991 Remove unused type 2018-11-28 10:26:13 +11:00
Matt Joiner 3ba991e38a Remove unused code 2018-11-27 23:57:17 +11:00
Matt Joiner 33006eeb20 Use new conntrack priorities
Fixes #295
2018-11-27 23:22:24 +11:00
Matt Joiner 40d7a709ee Log initial DHT bootstrap results 2018-11-21 17:05:56 +11:00
Matt Joiner f4e30656d6 Add initial connection tracking 2018-11-21 17:02:22 +11:00
Matt Joiner 1dc406c81c Move IpPort to missinggo 2018-11-16 10:35:30 +11:00
Matt Joiner 0032b45a02 Store remoteAddr with each connection
It would appear net.Conns returned from proxies don't have a RemoteAddr the client expects.
2018-11-04 21:15:51 +11:00
Matt Joiner 1a4950ad4a Add default DHT servers when UTP disabled
Also ensures that UDP and TCP sockets are reserved, even if not used, and fixes tests. Fixes #289.
2018-11-04 17:43:47 +11:00
Matt Joiner 9a49f4b37e Add establish outgoing connection expvar 2018-11-04 16:12:16 +11:00
Matt Joiner c50e59166d Add dial rate limiting
Fixes #273.
2018-11-02 23:09:52 +11:00
Denis Kuzmenok 9dc89ab6dc reverting usage of proxy for http requests 2018-10-31 10:54:10 +11:00
Matt Joiner a8787e6632 Revert "Make requestStrategy 3 the default"
This reverts commit 60dd0eed53.
2018-08-25 16:43:28 +10:00
Matt Joiner 81e6061a53 When Accept gives an error, don't use the Conn 2018-07-27 10:18:56 +10:00
Matt Joiner 2f14e5dbc0 Track received handshake encryption activity 2018-07-25 17:11:56 +10:00
Matt Joiner 2940f27f9f Use the new firewall callback support in go-libutp 2018-07-25 17:11:09 +10:00
Matt Joiner 6dd3b9c12c Law of Demeter Client.mu 2018-07-25 13:42:28 +10:00
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