Commit Graph

856 Commits

Author SHA1 Message Date
Matt Joiner 186b5073d2 Move method queuePieceCheck 2017-01-01 11:02:37 +11:00
Matt Joiner d48c7c8e36 sort imports 2017-01-01 11:01:41 +11:00
Matt Joiner b68d7cd08e dht/… moved to github.com/anacrolix/dht 2016-12-14 11:43:37 +11:00
Matt Joiner 8b50f5fa7a Fix deadlock in Client.onDHTAnnouncePeer 2016-11-27 14:43:21 +11:00
Matt Joiner f451a39b69 Fix harmless race conditions in Client.WriteStatus introduced way back 2016-11-27 14:26:45 +11:00
Matt Joiner 4a7fbf6170 Add peers received from received announce_peer DHT messages to the Client
Addresses #133
2016-11-27 00:05:19 +11:00
Matt Joiner aa697794cc Remove unused function 2016-11-25 17:24:29 +11:00
Matt Joiner 4807c9e29a Make Torrent.conns a map
Can't remember if I've tried this before. But dropping arbitrary connections while iterating established conns will become much simpler.
2016-11-23 11:48:44 +11:00
Matt Joiner ebbd555e7b Move a bunch of Client methods onto more appropriate types 2016-11-22 21:12:53 +11:00
Matt Joiner 0d9348c5d1 Move Client.downloadedChunk to connection.go 2016-11-22 14:16:18 +11:00
Matt Joiner d4cbdc5c38 Add download rate limiting
Fixes #121.
2016-10-10 17:29:39 +11:00
Matt Joiner ed0dbba384 Make newConnection a method on Client 2016-10-10 16:55:56 +11:00
Matt Joiner c34234bf34 Split connection.rw into separate Reader and Writer
This will make it easier to write hooks for Read and Write separately.
2016-10-10 16:30:51 +11:00
Matt Joiner 836bb344f3 Add really simple upload rate limiting and test 2016-10-10 14:58:29 +11:00
Matt Joiner 76c24e70b5 Improve code comments 2016-10-10 14:57:34 +11:00
Matt Joiner 510c03770b Reorder the fields of struct Client 2016-10-10 00:04:14 +11:00
Matt Joiner de761fb506 Do chunk pooling at Torrent instead of connection level 2016-10-05 15:57:00 +11:00
Matt Joiner 3b5f123645 Fix Client.receiveSkeys
Fixes #114. Loop variables in Go are ****ed.
2016-09-21 21:04:52 +10:00
Matt Joiner 7856cc6329 Add some more debug logging 2016-09-21 21:00:18 +10:00
Matt Joiner 9126db177b Add Config.{Force,PreferNo}Encryption 2016-09-16 12:42:41 +10:00
Matt Joiner 2fc814b5eb Move Client.connectionLoop to connection.mainReadLoop 2016-09-11 14:32:56 +10:00
Matt Joiner 5d7882a79d Remove unused trackerTier and shuffleTier 2016-09-11 14:12:03 +10:00
Matt Joiner f47fd8c969 Move TorrentSpec stuff into its own file 2016-09-11 14:09:40 +10:00
Matt Joiner 1e919dd6b1 Rework storage interfaces to make them simpler to implement
This allows lots of behaviour to be baked into the new Client, Torrent and Piece wrappers, rather than duplicating (badly) them in all the backend implementations.
2016-09-02 15:10:57 +10:00
Matt Joiner 8b17d2a63a Rework Reader position changes affecting piece priorities
Torrent.updatePiecePriorities is always followed by Torrent.piecePriorityChanged, so move it into the former function. Also drop the separate mutex for Reader, and add a missing Reader.posChanged call.
2016-08-30 15:41:26 +10:00
Matt Joiner 7557c9bd4e Only parse the config listen addr if we have to
This fixes a broken benchmark
2016-08-30 14:19:29 +10:00
Matt Joiner 2a1cef7c9e Remove the InfoEx type, and don't generate its infohash on the fly
Fixes #106.
2016-08-26 20:29:05 +10:00
Matt Joiner 00f406753a Fix build error with missinggo.Sorted 2016-07-30 00:48:15 +10:00
Matt Joiner 4143b7470d Begin exposing all the magic that Client.WriteStatus has so people can parse Client state their own way
It wasn't possible to move Client.WriteStatus to an external package to verify it doesn't depend on same-package access to data because then it can't be used in the tests, and it's extremely useful there. So I've settled for not locking the Client, and trying to use all the public methods. It's a work in progress.
2016-07-30 00:37:52 +10:00
Matt Joiner 3c75f68413 Kick connections that contribute the final piece of missing metadata that fails to validate
Failing to get metainfo was resetting Torrent.metadataBytes, which caused arriving metadata data to appear to belong to nonexistent pieces, despite passing the check that we'd in fact requested them from the sending connection. This was unnecessarily noisy. Instead return an error if we got all the data, but couldn't set the Torrent's info bytes, that should propagate out and cause the connection that contributed the final missing piece to be dropped. This will at least provide some improved resistance to unfriendly behaviour on the network.
2016-07-24 00:34:40 +10:00
Matt Joiner 14e10ad58d Use utp.Socket.CloseNow to close a Client's uTP socket on Close
Fixes https://github.com/anacrolix/utp/issues/15.
2016-07-24 00:24:44 +10:00
Matt Joiner 980cd69ab2 Break up the DHT announcer code into smaller functions, and add a 5 minute delay between announces 2016-07-23 22:38:31 +10:00
Matt Joiner f5d58b3dc6 Unused *Client argument to Torrent.writeStatus 2016-07-12 21:23:20 +10:00
Matt Joiner fbe0ded844 Add connection read stats 2016-07-12 16:42:04 +10:00
Matt Joiner a4e140b939 New slices package 2016-07-12 16:40:14 +10:00
Matt Joiner 838c35f3ea Solve the mystery bug with TestMaxEstablishedConns
Adding Torrent by infohash wasn't triggering connections to be accepted, when both TCP and uTP were enabled.
2016-07-07 14:49:18 +10:00
Matt Joiner 40a78b7cdd Improve logging heuristic for sending chunks of pieces that go missing 2016-07-06 14:03:11 +10:00
Matt Joiner 38048672a7 Rework locking in Client.acceptConnections 2016-07-06 00:38:43 +10:00
Matt Joiner 326b36545b Prepare to allow max conns per torrent to be configured 2016-07-05 16:23:17 +10:00
Matt Joiner 6b447c8d2b Track closing of outbound TCP connections
Got all inbound and outbound UTP, missed this one I think.
2016-06-20 17:51:40 +10:00
Matt Joiner cee200a5a2 Add piece completion storage
Toward fixing https://github.com/anacrolix/torrent/issues/50.
2016-06-20 17:51:05 +10:00
Matt Joiner b84298351a Move a few methods to Torrent, and track how many DHT announces occur
I suspect that DHT announces may occur too regularly, or without a break for torrents that aren't able to get over the lower water pending peer mark.
2016-06-15 15:29:47 +10:00
Matt Joiner c2bdb31bb3 Client.announceTorrentDHT -> Torrent.announceDHT 2016-06-15 15:13:53 +10:00
Matt Joiner 060ff72175 Improve the logic for which address to use for DHT 2016-05-24 19:46:24 +10:00
Matt Joiner 7a4b491ede Tidy up the listen function 2016-05-24 19:45:42 +10:00
lovedboy ca8d9de944 add return when utpsock's err is not nil 2016-05-24 13:24:29 +08:00
lovedboy 0b36de4be9 Merge branch 'master' of https://github.com/lovedboy/torrent 2016-05-24 13:19:55 +08:00
lovedboy fd1b4dc489 listenedAddr fix when TCP or UDP bind dynamic port 2016-05-24 13:18:04 +08:00
Matt Joiner b55e67dc22 Ban IPs that contribute to failed piece checks 2016-05-24 02:09:47 +10:00
Matt Joiner c6ec935e53 Update Torrent.wantPeersEvent in several places 2016-05-23 10:19:14 +10:00
Matt Joiner 7a60873ec8 Don't create an empty tracker URL if both AnnounceList and Announce are empty 2016-05-22 23:43:55 +10:00
Matt Joiner 20870ec4ff Rework torrent tracker scraping
New scrapers are added anytime trackers are added to a torrent. In the future they will also be stopped as soon as they're removed. All trackers are concurrently scraped, the old-style of sticking to one tracker that works is abandoned for now.
2016-05-22 22:45:08 +10:00
Matt Joiner 8cdcbe9d40 Fix the tracker method receivers and names 2016-05-19 23:58:00 +10:00
Matt Joiner 7600ac70e3 Move torrent tracker methods into torrent.go 2016-05-19 22:49:37 +10:00
Matt Joiner 73a648fb32 Torrent.writeStatus: Include human readable torrent size 2016-05-19 17:15:10 +10:00
Matt Joiner a69044b9ea Break out KRPC stuff from dht into new package 2016-05-17 16:40:08 +10:00
Matt Joiner cf55055d12 Improve the note about chunk writing concurrency
Everytime I see memory spike I suspect this, and it isn't it.
2016-05-17 02:12:06 +10:00
Matt Joiner 02ea8b1081 Rename storage.I->Client 2016-05-16 21:50:43 +10:00
Matt Joiner cbac2ecaff Stop returning errors from the 2 callstacks to connectionLoop where errors are expected 2016-05-16 19:50:10 +10:00
Matt Joiner c0283d3314 Return an error from Torrent.setMetadataSize
This should mean connections sending ridiculous metadata sizes get dropped.
2016-05-16 18:48:56 +10:00
Matt Joiner d2951c6c4b Move requestPendingMetadata onto connection from Client 2016-05-16 18:46:38 +10:00
Matt Joiner 2b46a17b39 Bit of a tidy in the tracker code 2016-05-12 12:43:37 +10:00
Matt Joiner 528836ab4c Get rid of obsoleted Torrent.ceaseNetworking, and clean up Torrent.closing 2016-05-11 21:44:55 +10:00
Matt Joiner dce3a7f675 Rework Client listeners
In particular, if the ListenAddr used a dynamic port ":0", and both TCP and uTP were enabled. If the TCP listen succeeded, and the uTP did not, the TCP listener was leaked, and another port number was not tried.
2016-05-11 21:11:52 +10:00
Matt Joiner 948552b282 Remove unused Client.pruneTimer 2016-05-11 21:08:55 +10:00
Matt Joiner 715a74985f Wasn't using ChunkSize from TorrentSpec 2016-05-09 23:00:20 +10:00
Matt Joiner a45a09b877 Rework setting of info bytes 2016-05-09 15:47:39 +10:00
Matt Joiner cee49435e0 Add Client.AddTorrentInfoHash, and some other tidying
Remove Client.bannedTorrents, which shouldn't have been in use anymore. Also fix Client.newTorrent.
2016-05-09 14:37:29 +10:00
Matt Joiner 69643860ea Move some behaviour into Client.newConnection 2016-05-07 18:57:38 +10:00
Matt Joiner 0fd73396fd missinggo.Event changed, connection.writeOptimizer changes 2016-05-07 18:56:44 +10:00
Matt Joiner b5812bb0b7 Remove the last of the "config dir" stuff
This just conflates the Client. It should be done orthogonally.
2016-05-05 23:05:28 +10:00
Matt Joiner 2d160b0419 metainfo.InfoEx.Hash becomes a function, UpdateBytes is added, and Bytes used in marshalling
Fixes #80.
2016-05-05 22:40:38 +10:00
Matt Joiner f6b83130c9 Move a bunch of Torrent methods from client.go 2016-05-03 16:47:11 +10:00
Matt Joiner d47ba4a08f Rework handling of metadata data messages
There are some dubious logs probably resulting from poor ordering of some code for handling incoming metadata data messages.
2016-05-03 14:59:54 +10:00
Matt Joiner 726e763c46 Doc and logging improvements 2016-05-03 14:58:26 +10:00
Seth Hoenig 9f4bf70e17 refactor struct identifiers to follow conventional go names 2016-04-18 23:11:11 -05:00
Matt Joiner da4d40ed7e Merge all our global consts and vars into global.go
For easier referral to other parties.
2016-04-14 17:19:07 +10:00
Matt Joiner f83771b660 Apply ineffassign linter 2016-04-04 15:39:26 +10:00
Matt Joiner 82ee860e8d Apply unconvert linter 2016-04-04 15:28:25 +10:00
Matt Joiner 1566e2afdc Remove deadcode 2016-04-04 15:18:51 +10:00
Matt Joiner 8f164ae956 Remove some of the magic ConfigDir stuff
This might become a helper. Torrent file cache still remains.
2016-04-04 14:04:48 +10:00
Matt Joiner fa511154e4 Move Magnet and friends into metainfo package 2016-04-04 13:48:39 +10:00
Matt Joiner b80bb6393a Use metainfo.Hash for piece and info hashes 2016-04-04 13:01:31 +10:00
Matt Joiner 00f33c848e Adding a torrent without info after waitAccept has blocked wouldn't trigger further accepts immediately 2016-04-03 22:06:25 +10:00
Matt Joiner 22ad654420 Fix deadlocks in WriteStatus due to incomplete renaming 2016-04-03 20:54:14 +10:00
Matt Joiner d3a1c79c79 Merge Torrent and torrent types 2016-04-03 18:40:43 +10:00
Matt Joiner 08830b97a1 Make everything on type torrent private 2016-04-03 16:50:53 +10:00
Matt Joiner bc8fb2a165 If we fail to write to a piece, check its completion state 2016-04-03 16:36:57 +10:00
Matt Joiner 44f5bb73c5 Improve log messages 2016-04-03 16:36:24 +10:00
Matt Joiner 5856b91af0 Fix missinggo import 2016-03-30 19:11:55 +11:00
Matt Joiner a5b54f21a1 Make opening a torrent in storage an explicit method
This is storage types where opening can fail, like mmap
2016-03-28 22:40:29 +11:00
Matt Joiner 775cf53809 Get mmap storage working 2016-03-28 21:57:04 +11:00
Matt Joiner b97b50aca9 New storage interface 2016-03-28 20:38:30 +11:00
Matt Joiner 01bef851ed Log connection errors when debug mode 2016-03-22 13:10:18 +11:00
Matt Joiner bfd0b86441 Tidy up the peer have{,all,none},bitfield handling 2016-03-22 12:07:03 +11:00
Matt Joiner e2ffcd008b Add t.bytesLeftAnnounce
Now it's safe to remove tracker specific bytesLeft contract
2016-03-22 09:06:48 +11:00
Matt Joiner 782589e2b9 Client.WriteStatus: Raise the precision of the completion percentage 2016-03-22 08:33:08 +11:00
Matt Joiner 99109e636b Use missinggo.AddrPort directly 2016-03-21 16:02:36 +11:00
Matt Joiner 99fa0c26aa Make peerGotPiece a method on connection 2016-03-21 14:19:51 +11:00
Matt Joiner 1508e02935 Move peerGotPiece 2016-03-21 14:17:15 +11:00
Matt Joiner b6cd456779 Use new missinggo.SplitHostMaybePort implementation 2016-03-15 21:32:47 +11:00
Matt Joiner 0d5502932d Track accepted connections 2016-03-06 17:26:04 +11:00
Matt Joiner f436c9c955 Use missinggo.Event to track Client closed 2016-03-05 19:36:21 +11:00
Matt Joiner c175fab5a6 Fix a UTP Conn leak, on unencrypted followup dial attempts
I would guess that TCP ones were cleaned up by GC.
2016-03-02 23:27:46 +11:00
Matt Joiner e33006a419 Ignore the corner case when a piece is dropped from storage 2016-02-26 22:12:13 +11:00
Matt Joiner 976510db60 Add DHT nodes from metainfo when added to Client 2016-02-24 21:56:50 +11:00
Matt Joiner c371502cb3 Fix failure to request data from peers if it goes missing after being downloaded during the same session
The chunks remained marked dirty, even after the piece was marked complete. So when the piece was not complete, there was nothing to do.
2016-02-22 03:23:49 +11:00
Matt Joiner 99e9f41a33 Choke peers when we lose pieces they requested, and drop them if they request pieces we don't have 2016-02-21 17:22:55 +11:00
Matt Joiner e20858a1e8 Move dataReadAt to torrent.readAt, and do the waitNoPendingWrites check there 2016-02-21 03:32:59 +11:00
Matt Joiner dcdf85a474 Ditch the torrent stateMu for the client mutex 2016-02-21 03:31:50 +11:00
Matt Joiner f76d86da4f Use new error handling philosophy 2016-02-20 14:40:28 +11:00
Matt Joiner b6a1a685cd Remove pointless code 2016-02-17 17:20:43 +11:00
Matt Joiner 0f9f7ba01b Add torrent.completedPieces bitmap
Reduce load on data.PieceComplete for torrents with lots of pieces, when reader position changes. Not sure of the improvement yet.
2016-02-17 00:00:55 +11:00
Matt Joiner be6052912f Improve error message when piece fails to be completed
Happens occasionally on some servers, can't work out why.
2016-02-16 23:35:19 +11:00
Matt Joiner b514434581 Trigger piece request order changes on connections in a few spots
The client was requesting already obtained data in certain circumstances. This fixes it.
2016-02-11 17:57:57 +11:00
Matt Joiner 26fa2c4af8 Track posted message type counts 2016-02-10 00:45:47 +11:00
Matt Joiner 317783091d When we're choked, just forget the requests, we don't need to delete them individually anymore 2016-02-08 21:39:15 +11:00
Matt Joiner c674e0a65f Add some missing calls to torrent.updatePiecePriority 2016-02-08 21:38:30 +11:00
Matt Joiner 24b8b13d2d Fix pending of already completed pieces when pending ranges of pieces 2016-02-08 21:36:50 +11:00
Matt Joiner 096c870029 Fix overpublishing of piece state change during hashing 2016-02-07 21:56:59 +11:00
Matt Joiner 0c28a0f1b1 Use new tracker package interface 2016-02-07 18:49:35 +11:00
Matt Joiner 814daf6420 Publish changes in piece hashing state 2016-02-07 01:21:12 +11:00
Matt Joiner 2e3bc1090b Speed up torrent.needData, and use new missinggo iterator interface 2016-02-07 01:20:40 +11:00
Matt Joiner 9b9a3fb20a Fix the mess that is the connectionLoop after messages are decoded 2016-02-05 01:17:06 +11:00
Matt Joiner 3acdcc3b45 Tidy code 2016-02-04 15:04:46 +11:00
Matt Joiner 430f26f726 Recalculate all piece priorities more efficiently 2016-02-01 22:06:13 +11:00
Matt Joiner afa264e6c5 Reintroduce connection piece inclinations, and begin caching piece priorities 2016-02-01 21:11:41 +11:00
Matt Joiner 3ed628356b Use missinggo.Event for connection closing event 2016-02-01 21:08:52 +11:00
Matt Joiner eb838a894c newTorrent doesn't need to return error 2016-02-01 07:05:43 +11:00
Matt Joiner b90dacd324 Abstract the pendingPieces as a bitmap 2016-02-01 01:46:28 +11:00
Matt Joiner 84c34e2c37 TODO 2016-01-28 13:04:25 +11:00
Matt Joiner ae9bba2611 Fix downloading of unwanted chunks, and write out downloaded chunks using the connection loop goroutine
Doing the writes with the connection loop goroutine prevents memory use blowing out when chunks aren't written out quickly enough.
2016-01-28 05:54:48 +11:00
Matt Joiner 90348f6a48 Add pending write helpers 2016-01-25 07:22:33 +11:00
Matt Joiner 9091c0518d Use pendingPieces in needData 2016-01-24 15:21:31 +11:00
Matt Joiner 0ad4dda9fc Move fillRequests and replenishConnRequests into connection.go 2016-01-24 15:21:17 +11:00
Matt Joiner cafac95de4 Delete finished pieces from pending 2016-01-19 01:41:53 +11:00
Matt Joiner 2f40c48d37 Fix the download/prioritize piece functions
This involves adding a pendingPieces field to torrent.
2016-01-19 01:28:56 +11:00
Matt Joiner 06445f2a1e It's working and the tests are usually passing
I still need to handle "prefetch"-style downloading, and some functions haven't been committed to force this issue.
2016-01-18 18:35:14 +11:00
Matt Joiner 89a6a20af6 Finally make Torrent.torrent private
A lot of code was using unintentionally exported stuff from the embedded *torrent in Torrent.
2016-01-17 00:14:15 +11:00
Matt Joiner 8696f32e58 Make Config.DHTConfig not a pointer 2016-01-17 00:12:53 +11:00
Matt Joiner 2beb5f8bd4 Track dirty chunks, instead of pending chunk specs
This is the first step toward having purely Reader-based priorities. If a chunk is pending, that currently implies that we want to download it. I want to move that kind of state out to the readers.
2016-01-13 17:11:59 +11:00
Matt Joiner 153c13db43 Revert "Merge pull request #54 from zhulik/master"
This reverts commit 5cf75b869c, reversing
changes made to 09050ff2c5.
2016-01-06 12:19:49 +11:00
Gleb Sinyavsky 48c3df2d43 Refactorings 2016-01-05 11:48:16 +03:00
Gleb Sinyavsky 8637086ef9 Merge branch 'master' of https://github.com/anacrolix/torrent 2016-01-04 15:39:08 +03:00
Matt Joiner 09050ff2c5 Some missing hunks that fix build 2016-01-04 22:56:36 +11:00
Matt Joiner 3208fac438 Failure to announce on one tracker isn't very interesting 2016-01-04 22:54:19 +11:00
Matt Joiner 3c446086af Add Have and Bitfield connection methods 2016-01-04 22:37:49 +11:00
Matt Joiner 8346ff81f7 Switch to int from peer_protocol.Integer for piece index in a lot of places 2016-01-04 22:34:24 +11:00
Gleb Sinyavsky be8e44da3c peersKey is a public type now 2015-12-27 15:27:32 +03:00
Gleb Sinyavsky 5b790bf874 Torrent structs replaced with Download interface in exported Client methods 2015-12-27 14:49:15 +03:00
Matt Joiner f9a04b4f29 Suppress log message regarding bad tracker URLs 2015-12-23 03:32:24 +11:00
Matt Joiner 86c4c609f1 Expose Torrent.SetDisplayName 2015-12-12 14:03:04 +11:00
Matt Joiner 672e3c4136 Don't consider a peer to have touched a piece if a chunk isn't written successfully
This prevents peers being banned when there are issues with the data service locally.
2015-12-11 03:04:04 +11:00
Matt Joiner 79eb1ca0d5 torrent.DisplayName should not be exported 2015-11-22 18:44:08 +11:00
Matt Joiner 9f38d212e4 Blocking IPv6 addresses is not so interesting 2015-11-13 22:33:50 +11:00
Matt Joiner d01c6221e6 Remove sync.Cond from piece
It's not trivial to ensure that anyone waiting on the piece Cond will wake on events like the torrent being dropped from the client.
2015-11-06 00:40:16 +11:00
Matt Joiner f8fb480817 Avoid copying mutex in piece 2015-10-30 01:16:52 +11:00
Matt Joiner a4049e179c Avoid allocation in iplist.Ranger.Lookup
It was very expensive for DHT packets.
2015-10-19 00:00:26 +11:00
Matt Joiner b3a8020401 Store pieces inplace in torrent.Pieces
This should save some allocation overhead, especially for torrents that have 20k+ pieces.
2015-10-16 22:10:03 +11:00
Kupai József 70a307a5ea fix: added announce to torrent spec 2015-10-10 14:31:02 +02:00
Matt Joiner efe294ac35 utp package merged PacketConn with Socket 2015-10-04 00:02:14 +10:00
Matt Joiner b7a8bb7570 Simplify the torrent Data interface
None of the methods are optional anymore. Removed the nasty wrappers for some data implementations. Moved data.Data back into the main torrent package. Should make it much easier to understand for people implementing their own Data implementations.
2015-10-02 00:09:04 +10:00
Matt Joiner 58c997210e Track peer sources with a dict, and don't exceed high water mark 2015-09-28 15:30:13 +10:00
Matt Joiner 53259397fc Initialize connection piece priorities lazily, and using a pool 2015-09-26 17:27:35 +10:00
Matt Joiner 22428da0e3 Add packed IP list
This saves a lot of memory by allowing the IP blocklist to be mmap()ed in. In production with the latest level1 blocklist it's 35MB per process.
2015-09-23 18:25:22 +10:00
Matt Joiner 0fa547e292 Don't warn about zero port peers from trackers 2015-09-20 21:09:10 +10:00
Matt Joiner cd96dbcd9d Tidy 2015-09-17 12:54:03 +10:00
Matt Joiner 11d703fbf1 Count failed chunk sends against a connection 2015-09-17 12:50:29 +10:00
Matt Joiner 9f324d04e2 Tweak logging 2015-09-17 12:40:35 +10:00
Matt Joiner 0113776f1d Reduce noise about zero port peers 2015-09-17 12:39:51 +10:00
Matt Joiner 313adf1d2f Some code missed in the last commit ಠ_ಠ 2015-09-06 12:35:56 +10:00
Matt Joiner eebd09c0fe Allow subscribing to torrent piece state changes 2015-09-06 12:33:22 +10:00
Matt Joiner 4472a0e27a Add Debug flag to Config
I'll use this to squash the noisy logging for people who don't care.
2015-08-23 12:59:03 +10:00
Matt Joiner 698181e470 Code comment 2015-08-23 12:49:35 +10:00
Matt Joiner 1db00a54f0 Redo the compact peer types 2015-08-17 19:52:47 +10:00
Matt Joiner 6b27e1473d Upload after a piece completes 2015-08-12 17:11:14 +10:00
Matt Joiner 6c8c870b28 Log zero ports from trackers 2015-08-06 08:58:13 +10:00
Matt Joiner cb00308157 Back off on the kicked connections log 2015-08-06 08:56:36 +10:00
Matt Joiner 59e50bd614 Log who's giving us zero ports over PEX
In the long run this will help determine why this happens.
2015-08-06 08:55:48 +10:00
Matt Joiner 5d5ee66be4 Clear piece touch flag from connection after a piece is hashed 2015-08-05 02:43:53 +10:00
Matt Joiner 497d185373 Add an option to disable IPv6 2015-08-05 02:41:50 +10:00
Matt Joiner 085be622a0 Replacing pendingWrites WaitGroup with Mutex/Cond/int
Apparently I've been using WaitGroups wrong all along.
2015-08-05 02:40:46 +10:00
Matt Joiner 92e1e505b4 Improve log message 2015-08-04 01:33:50 +10:00
Matt Joiner da8ac9fe01 Log errant unwanted piece rather than panic
Eventually I'll work out what causes this, but for now it's incredibly rare.
2015-08-04 01:29:40 +10:00
Matt Joiner bbe58bbd73 Filter out DHT peers with port 0
Probably not necessary now we ban the nodes that send them, but it's appropriate to check here too.
2015-08-04 01:20:10 +10:00
Matt Joiner f3317322f8 Fix crash if peer sends out of bounds HAVE message 2015-08-04 01:17:32 +10:00
Matt Joiner f69c51bea3 Tighten up some potential leaks
Based on some observations of lingering goroutines in unit tests.
2015-08-04 01:15:09 +10:00
Matt Joiner 54339a30e3 Drop connections that contributed to pieces that failed to hash
There are peers out there that seem to intentionally spam bad data, and the same pieces will often fail continuously. This really puts a bee in their bonnet.
2015-08-04 01:12:09 +10:00
Matt Joiner 51aad774ab Add IPBlocklist option to Config, and test it's inherited by DHT 2015-08-04 01:07:22 +10:00
Matt Joiner f9995244c0 If a DHTConfig was provided without a blocklist, the DHT wouldn't inherit the Client's blocklist 2015-08-04 00:43:46 +10:00
Matt Joiner 68e3b9f666 dht: Block bad nodes, start by banning those that send port=0 2015-08-04 00:31:53 +10:00
Matt Joiner 1f008fb4f0 Trivial missed changes 2015-08-02 21:00:49 +10:00
Matt Joiner 06dede5690 Track the connection flags for completed handshakes 2015-08-02 04:06:22 +10:00
Matt Joiner 34d3d7aca0 Tidy up outbound connection code
Preparing to allow alternate dialing logic.
2015-08-02 04:04:42 +10:00
Matt Joiner d037e6ee9c Suppress a lot of noisy logging 2015-08-02 04:01:41 +10:00
Matt Joiner e5acfcbb46 Comments 2015-08-02 03:53:37 +10:00
Matt Joiner 8ce61e911d Torrent.BytesCompleted was racy 2015-07-21 22:54:02 +10:00
Matt Joiner 78ec88ad02 Don't probe pieces when setting torrent storage
It blocks the caller, for potentially quite some time. I've tested without this for some time now.
2015-07-21 22:52:43 +10:00
Matt Joiner 346c457e9c Hashing was blocking prioritization of pieces 2015-07-21 22:51:15 +10:00
Matt Joiner 84fc3aab0f client.go: Missing perf import 2015-07-17 21:45:44 +10:00
Matt Joiner 0600c3b5e3 Several speedups in logic 2015-07-17 21:07:01 +10:00
Matt Joiner 6c04000644 Downloading a chunk may mean the piece isn't wanted anymore
Hopefully this fixes a very rare logic error in replenishing connection requests for a piece that isn't wanted, yet is still in the connection piece request order.
2015-07-17 21:04:43 +10:00
Matt Joiner 7e9fe4f447 Store chunk data without holding client lock 2015-07-15 16:00:59 +10:00
Matt Joiner c018c660f0 Allow chunk size to be specified per torrent 2015-07-15 15:31:18 +10:00
Matt Joiner 4807f12ea1 When seeding, actually seed beyond 6 chunks 2015-07-15 15:29:53 +10:00
Matt Joiner 08f89c49f3 Don't raise piece priority while hashing or if piece complete 2015-07-04 13:38:42 +10:00
Matt Joiner fd2824f595 Raise socketsPerTorrent to 80 2015-06-30 00:46:43 +10:00
Matt Joiner bb28ff7492 Replace pruning timer with as-required connection dropping 2015-06-30 00:45:26 +10:00
Matt Joiner 1595f65ac2 Adjust some expvars 2015-06-30 00:35:47 +10:00
Matt Joiner 2277e16dca Rename and sort some of the expvars 2015-06-28 16:41:51 +10:00
Matt Joiner dd34efad57 Comments and update version strings 2015-06-28 16:40:46 +10:00
Matt Joiner 4f293ca75b Several trivial fixes 2015-06-28 16:39:04 +10:00
Matt Joiner 4b6c8b1c39 Move methods to correct file 2015-06-23 02:02:22 +10:00
Matt Joiner b5ee4f602d Document ConfigDir 2015-06-22 19:48:50 +10:00
Matt Joiner ad6fec2e77 Clarify downloaded chunk counters 2015-06-22 19:48:30 +10:00
Matt Joiner 859129fb28 Print peer IDs as escaped ascii 2015-06-22 19:46:26 +10:00
Matt Joiner 99a06e3f50 Move IP blocklist loading into iplist package 2015-06-22 19:44:59 +10:00
Matt Joiner b2b290a589 Small tweak to readahead, and fix the tests 2015-06-16 17:14:15 +10:00
Matt Joiner ced5733c88 Improve uploading/seeding 2015-06-16 16:57:47 +10:00
Matt Joiner 764f5db512 Make readahead always at least 2 blocks. 2015-06-16 16:54:12 +10:00
Matt Joiner d63c5e5b98 Don't try to connect again without encryption, if encryption is disabled 2015-06-08 18:16:01 +10:00
Matt Joiner 5014b62e17 Reduce log noise due to uTP connection timeouts 2015-06-03 22:44:03 +10:00
Matt Joiner 005ca8124a Fix rare single-torrent stall due to obsolete ceaseNetworking call
Only occurred if you have a data backend that can drop completed pieces, and it happened that you wanted to redownload data that had been dropped after completely downloading the torrent in the past.
2015-06-03 22:43:40 +10:00
Matt Joiner 7e8ee950bc Docs and comments 2015-06-03 13:30:55 +10:00
Matt Joiner a2df9f8b01 Miscellaneous changes 2015-06-03 00:03:43 +10:00
Matt Joiner 5de6abd6a7 Fix race to set IPBlocklist on DHT before it bootstraps and serves 2015-06-02 23:58:49 +10:00
Matt Joiner 5b52769523 Changes to the way piece prioritization affects the piece 2015-06-01 18:23:35 +10:00
Matt Joiner 21fb4933fc Change the way piece state is exposed to give more detail 2015-06-01 18:22:12 +10:00
Matt Joiner bc4aa06c91 Comments 2015-06-01 18:17:14 +10:00
Matt Joiner 7f9d6eed78 Relax pedantic listen addr matching
Fixes #15.
2015-05-20 18:14:42 +10:00
Matt Joiner 085dbaa8ff Include reason for panic on different listener addresses 2015-05-20 15:45:58 +10:00
Matt Joiner 1cf591dc3d Switch to using a slice for tracking pending chunks. Saves massive amounts of memory. 2015-05-16 10:51:48 +10:00
Matt Joiner 0d13293d71 Support seeding 2015-05-15 08:39:53 +10:00
Matt Joiner 5eb6b5286e Rare panic: a piece is requested that shouldn't have been 2015-05-09 11:52:52 +10:00
Matt Joiner ca74d8ed33 Made Torrent.GotInfo a function, to avoid use of zero-initialized channel 2015-04-30 00:30:19 +10:00
Matt Joiner 0ec0302d1c Publicly expose Torrent.GotInfo 2015-04-28 15:24:17 +10:00
Matt Joiner 526d9d738e Rewrite imports to local bencode and metainfo 2015-04-27 14:55:01 +10:00
Matt Joiner cc6a52fee0 Remove all the old intermediate config fields from Client 2015-04-27 14:05:27 +10:00
Matt Joiner b37f6d6f96 Add the option to disable encryption 2015-04-20 17:30:22 +10:00
Matt Joiner 28b299e7c8 Rework the Torrent Reader interface, to allow reader options, and add "responsive" as one such option
Had several weeks of testing. Removes a lot of the "helper" reading methods, but this was necessary to allow per-Torrent reading options.
2015-04-14 23:59:41 +10:00
Matt Joiner 97c235440c If IP blocklists are enabled, block anything that isn't IPv4
I know of no public IPv6 blocklists.
2015-04-01 17:36:51 +11:00
Matt Joiner 6b81d57ca2 dht: Clean-up interface, add loads of documentation 2015-04-01 17:29:55 +11:00
Matt Joiner 6c3f8ea26c Remove unnecessary reflection 2015-04-01 14:34:57 +11:00
Matt Joiner 8ba4a2e0f3 cmd/torrentfs: Check error creating client
This wouldn't have happened with exceptions ;)
2015-04-01 14:30:22 +11:00
Matt Joiner c202e2289c Opinionated torrent filter doesn't belong in this package 2015-03-30 23:11:20 +11:00
Matt Joiner 1ce84f664e Fix a few minor data races 2015-03-30 23:10:37 +11:00
Matt Joiner 5ecde3a874 Show number of torrents in the client status 2015-03-28 02:51:16 +11:00
Matt Joiner 6582cffe06 AddTorrentSpec now merges in new information an existing torrent didn't have 2015-03-28 02:50:55 +11:00
Matt Joiner 90b27618ac The signedness on several tracker.AnnounceRequest fields now matters
Sending negative ports and lefts through to HTTP trackers was making them mad.
2015-03-27 17:22:00 +11:00
Matt Joiner 8ae09e2fa8 Only the first tracker was being tried
Must have lost this in the client tracker clean-up a while back.
2015-03-27 17:20:02 +11:00
Matt Joiner 64f833f3f0 cmd/torrent-magnet: Converts a torrent from stdin to a magnet link 2015-03-27 17:16:50 +11:00
Matt Joiner 5049f5d375 More unnecessary log shushing 2015-03-27 15:37:58 +11:00
Matt Joiner 60d8ea75a2 Prevent bad metadata_size in extended handshakes from stalling completion of metadata
Occasionally bad peers send ridiculous or incorrect metadata_size in their handshakes. If the first acceptable size is wrong, and too small, we'll keep failing metadata completion. If it's too large, honest peers will never send us the pieces we're asking for and we'll never complete the metadata. Now we just adjust the expected metadata size, and keep retrying until we finish. Additionally, we can now request metadata after sending initial messages.
2015-03-27 15:36:59 +11:00
Matt Joiner 5f7ad4c769 Merge all the tracker packages, why would anyone want them separately? 2015-03-27 15:12:15 +11:00
Matt Joiner 3aa78763aa Use rogpeppe's sortimports to fix this goimports ordering madness 2015-03-26 17:18:08 +11:00
Matt Joiner d97b487229 cmd/torrent: Report progress
Fixes #6
2015-03-25 17:32:42 +11:00
Matt Joiner c471613cd0 Suppress some noisy errors that aren't interesting to the average user 2015-03-25 17:28:34 +11:00
Matt Joiner 6da805d1b1 Move ut_pex back into the "m" map 2015-03-25 15:49:27 +11:00
Matt Joiner 19a50712dc Add the ability to disable PEX
Fixes #3
2015-03-25 15:42:14 +11:00
Peter Borzov f574117e30 Fix typos 2015-03-21 09:11:45 -04:00
Matt Joiner 67f90ed886 More public interface tidying 2015-03-20 23:52:53 +11:00
Matt Joiner ec25ef417e bitbucket.org/anacrolix/sync moved to github 2015-03-20 16:46:39 +11:00
Matt Joiner 842a32ae0c Rewrite import paths for migration from Bitbucket 2015-03-20 16:37:44 +11:00
Matt Joiner 0c63952353 More cleaning up of public interface 2015-03-20 10:52:01 +11:00
Matt Joiner a646308a12 Update the example 2015-03-20 10:51:06 +11:00
Matt Joiner a07eb8d720 Misc, some encryption related 2015-03-18 18:37:26 +11:00
Matt Joiner f90e6e7c2c Don't accept unless connections are wanted 2015-03-18 18:36:27 +11:00
Matt Joiner c413ed7963 Comments in banned torrent list 2015-03-18 18:35:52 +11:00
Matt Joiner a451bc7e6d Handle data going missing 2015-03-18 18:35:22 +11:00
Matt Joiner 29238ff23f Change the interface to add torrents to a Client 2015-03-18 18:32:31 +11:00
Matt Joiner 58b2b9bec7 Avoid dopplegangers, foreign address that have our client ID 2015-03-18 18:29:51 +11:00
Matt Joiner a7dddd9be6 Rewrite handshaking and connection management 2015-03-18 18:28:13 +11:00
Matt Joiner fa025bdbee Disable AllowedFast 2015-03-18 18:21:00 +11:00
Matt Joiner 203da0aab0 Tidy up extension bytes handling; don't close conn from handshake writer; force protocol encryption for now 2015-03-13 06:21:13 +11:00
Matt Joiner e85b7e228b Add support for Fast Extension 2015-03-12 20:06:23 +11:00
Matt Joiner 339c650085 Count peers obtained by tracker 2015-03-12 20:04:44 +11:00
Matt Joiner 26b21d1fcb Apply IP blocklist to trackers 2015-03-11 02:41:41 +11:00
Matt Joiner e6fbde0dc6 Rework piece completion 2015-03-11 02:41:21 +11:00
Matt Joiner 914bc12bb6 Harmless improvements 2015-03-11 02:39:01 +11:00
Matt Joiner 36c6283a94 Fix a status line going to stdout 2015-03-09 17:35:51 +11:00
Matt Joiner ad6ac3f2cd More cleaning of public interface 2015-03-08 17:28:14 +11:00
Matt Joiner 3e753bb8ad Change up the data storage interfaces a bit 2015-03-07 17:11:45 +11:00
Matt Joiner cad611bbcf Since IPv6 blocklists aren't prevalent, default to using IPv4 in client for now 2015-03-07 17:11:02 +11:00
Matt Joiner 1c5bd1855a Improvements to P2P blocklist scanning errors 2015-03-07 17:09:18 +11:00
Matt Joiner e4dec03a32 Change the way readahead pieces are calculated 2015-03-04 13:07:11 +11:00
Matt Joiner 779f4d3b97 Implement Handle.ReadAt 2015-03-04 13:06:33 +11:00
Matt Joiner 4eb70e0673 Support opening handles to Torrent and File 2015-03-01 14:32:54 +11:00
Matt Joiner a2d69b4931 Make blob data stateful 2015-02-27 12:45:55 +11:00
Matt Joiner bd6d72fa5f Files.Path and .FileInfo change 2015-02-27 01:46:40 +11:00
Matt Joiner 315c703456 Rename TorrentData->Data 2015-02-27 01:43:37 +11:00
Matt Joiner f588522b66 Client.Torrent(InfoHash) 2015-02-26 16:10:55 +11:00
Matt Joiner 3f335cabfc Implement File.ReadAt 2015-02-26 16:10:38 +11:00
Matt Joiner 9ffb9b0b88 Scale readahead pieces a bit 2015-02-26 16:10:15 +11:00
Matt Joiner c75dbccea3 Hide a whole bunch of functions seen via torrent 2015-02-25 15:42:47 +11:00
Matt Joiner 80ce2c3188 Set torrentDataOpener from config 2015-02-25 15:41:13 +11:00
Matt Joiner 295b71c09b Not listening! 2015-02-25 14:52:19 +11:00
Matt Joiner 48dc85bfd3 Return no Files if Torrent Info isn't available 2015-02-25 14:51:56 +11:00
Matt Joiner 0eb418360b Allow configuring Client torrent data opener, config dir, disabling metainfo cache, and prune with a timer instead of goroutine 2015-02-25 14:48:39 +11:00
Matt Joiner 61adeee308 Make IPBlockList accessible from Client 2015-02-25 11:25:22 +11:00
Matt Joiner bc940ae2c6 Remove unused code 2015-02-25 01:40:27 +11:00
Matt Joiner 9fb7934d0c Comments 2015-02-25 01:34:57 +11:00
Matt Joiner 92e0679b04 Change piece prioritization 2015-02-21 15:02:31 +11:00
Matt Joiner 2025daa77c Improve announcer routines 2015-02-21 15:02:06 +11:00
Matt Joiner e067bff5b3 Comments 2015-02-21 14:58:28 +11:00
Matt Joiner c3457b2f54 Change status output 2015-02-21 14:57:37 +11:00
Matt Joiner 763f238492 Tweak handshaking and peer water marks 2015-02-21 14:56:17 +11:00
Matt Joiner 94c01fb565 defer Unlock 2015-02-10 00:21:50 +11:00
Matt Joiner de71611752 Add File.Progress 2015-02-10 00:18:59 +11:00
Matt Joiner 467d2bdf8d Handle SetDeadline failure for handshake 2015-02-10 00:17:59 +11:00
Matt Joiner 3c9fdba345 uTP raw Socket use is now via .PacketConn 2015-02-10 00:17:04 +11:00
Matt Joiner a1010d7404 Misc tidying 2015-02-10 00:16:01 +11:00
Matt Joiner 029d6939f8 Hide some methods that shouldn't be public 2015-02-10 00:12:29 +11:00
Matt Joiner 4ca6b4e2c7 Fix some stuff Rob Clifford broke through stress testing 2015-02-06 14:54:59 +11:00
Matt Joiner 8e95c1a0ac Log addr when dials fail for unexpected reason 2015-01-31 01:54:45 +11:00
Matt Joiner 4cf28bf0e9 Deduplicate iplist range descriptions, saves another 2.8MB heap 2015-01-31 01:53:42 +11:00
Matt Joiner c6cc38c9cf iplist: Make range descriptions copies of substring, saves 8MB heap on level1 blocklist! 2015-01-31 01:53:01 +11:00
Matt Joiner 336495c25b connectionPruner should terminate when the torrent stops 2015-01-29 14:21:05 +11:00
Matt Joiner b3380f1cee dht: Provide Announce, that combines get_peers and announce_peer 2015-01-29 14:20:21 +11:00
Matt Joiner 04e5880d09 Comments 2015-01-29 14:17:27 +11:00
Matt Joiner 83b9135554 Expose Files from Torrent 2015-01-28 01:12:36 +11:00
Matt Joiner 9995470fe6 Improve returned error 2015-01-22 00:42:13 +11:00
Matt Joiner 78caa4533b Scale readahead with unchoked connections 2015-01-11 00:16:57 +11:00
Matt Joiner ce3fd07fde Set Client.utpSock 2015-01-11 00:16:19 +11:00
Matt Joiner 39b9eb1d37 Switch to my own UTP library 2015-01-08 23:26:39 +11:00
Matt Joiner 0810d5a275 Helper method on Client's Torrent that tells where the metainfo file would be stored 2014-12-30 23:58:38 +11:00
Matt Joiner 7e6b3b24e3 Catch a few possible connection leaks 2014-12-26 17:18:36 +11:00
Matt Joiner cc5dea6a39 Reenable UTP despite it being broken, some binaries now have flags to disable it 2014-12-26 17:18:15 +11:00
Matt Joiner 9b0e387ac9 Quieten tracker announce logging 2014-12-26 17:17:49 +11:00
Matt Joiner 3a221dc57d Rip out the pieces by bytes left and responsive download strategy stuff 2014-12-26 17:15:17 +11:00
Matt Joiner c817776fda Don't include active handshakes in the half open limit
Large numbers of incoming connections choke initiation of outbound conns.
2014-12-23 15:20:28 +11:00
Matt Joiner e406d74ff0 Don't guess cap for some torrent fields, need to minimize memory use 2014-12-20 13:00:21 +11:00
Matt Joiner 262f045fd1 Fixes due to not pending chunk specs prematurely 2014-12-09 00:22:05 -06:00
Matt Joiner 48582796ed Add pending peers high water mark to stop excessively long running DHT queries 2014-12-08 21:58:49 -06:00
Matt Joiner 4be7b11a3b Use bitbucket.org/anacrolix/sync 2014-12-08 17:00:38 -06:00
Matt Joiner d9793a78ba Improve announce logging 2014-12-08 16:57:42 -06:00
Matt Joiner 1e3a00979d Fix UTP still listening despite attempting to temporarily disable it 2014-12-06 21:19:56 -06:00
Matt Joiner 51306ccbb2 Expose various DHT state 2014-12-06 21:19:02 -06:00
Matt Joiner d58ca65a9c pieceordering: Rename RemovePiece->DeletePiece and complete tests
Note that tests currently fail due to bug in skiplist?
2014-12-05 00:58:04 -06:00
Matt Joiner 65ccc9c75e Forgot to commit this part of fixing disable TCP dialing out 2014-12-05 00:56:51 -06:00
Matt Joiner b6ae4caa6a Set priorities ahead of the current read position 2014-12-05 00:56:28 -06:00
Matt Joiner f050bc02f7 Disabling TCP didn't include dialing out, also always disable UTP until the package is fixed 2014-12-05 00:53:26 -06:00
Matt Joiner 7b46b41011 Switch back to using the UTP redesign 2014-12-03 19:58:02 -06:00
Matt Joiner 91c2c1f5c7 Piece priorities, torrent read interface and many fixes 2014-12-03 01:07:50 -06:00
Matt Joiner 98400ab9c7 Harmless shortcut initing peer pieces when we have the torrent info 2014-12-02 18:43:05 -06:00
Matt Joiner a87e753572 When metadata arrives, we also need to init request ordering 2014-12-02 18:42:22 -06:00
Matt Joiner 9fac3e8f33 Remove commented out code 2014-12-02 18:23:07 -06:00
Matt Joiner 7228e40c95 Add piece ordering per-connection piece request priority 2014-12-02 18:22:38 -06:00
Matt Joiner c75f79b097 Speed up tests, allow -short for some UDP tracker stuff 2014-12-02 14:23:01 -06:00
Matt Joiner e7dec6057b Backed out changeset: 603a76a6bdb0 2014-12-02 00:11:39 -06:00
Matt Joiner 351bc3e504 Update to use utp package redesign 2014-12-01 23:35:39 -06:00