Commit Graph

122 Commits

Author SHA1 Message Date
Matt Joiner 97f6cb496e Avoid deadlock caused by receiving PORT and and DHT announce_peer at the same time 2016-11-28 00:03:10 +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 fdf75d59c8 Kick only the worst connection when a piece fails a check 2016-11-23 12:59:23 +11:00
Matt Joiner 57b679ffb0 Add a note about dropping connections that we sent a HAVE for incomplete pieces 2016-11-23 11:52:41 +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 90ca45dd2d Don't accept pieces with bad indexes
Fixes #132
2016-11-22 14:20:48 +11:00
Matt Joiner 84d243afca Rename connection.downloadedChunk -> receiveChunk 2016-11-22 14:18:09 +11:00
Matt Joiner 6f9bcff8b2 Make downloadedChunk a method of connection 2016-11-22 14:17:30 +11:00
Matt Joiner 0d9348c5d1 Move Client.downloadedChunk to connection.go 2016-11-22 14:16:18 +11:00
Matt Joiner a49e133d8a Comment on connection.updatePiecePriority
There's also Torrent.updatePiecePriority, and it's always confusing what the difference is.
2016-10-31 16:22:07 +11:00
Matt Joiner 1725133111 Move the implementation of connection.requestPiecePendingChunks out of Torrent 2016-10-25 14:58:17 +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 de761fb506 Do chunk pooling at Torrent instead of connection level 2016-10-05 15:57:00 +11:00
Ye Yin d3963eedfd Use sync.pool for decode buffer 2016-09-12 17:32:04 +10:00
Matt Joiner 2fc814b5eb Move Client.connectionLoop to connection.mainReadLoop 2016-09-11 14:32:56 +10:00
Matt Joiner e6d7b52638 Speed up connection.lastHelpful
Moving to reflection and interfaces has made it a bottleneck.
2016-08-14 22:39:23 +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 240abaf512 Add Torrent.SetMaxEstablishedConns 2016-07-06 00:42:16 +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 12191dbfa3 Add counters for uploads
Fixes #71.
2016-07-05 15:52:33 +10:00
Matt Joiner 874bba43f8 Fix crash causing deadlock in connection writer when no messages have been posted yet 2016-06-27 15:45:15 +10:00
Matt Joiner 6cac882030 Reduce the impact of preferring earlier pieces
I think urgent pieces at the end of a torrent were getting fairly starved.
2016-05-28 22:04:33 +10:00
Matt Joiner b55e67dc22 Ban IPs that contribute to failed piece checks 2016-05-24 02:09:47 +10:00
Matt Joiner d2951c6c4b Move requestPendingMetadata onto connection from Client 2016-05-16 18:46:38 +10:00
Matt Joiner dcfee93f96 Fix race marshalling a bitfield after a Have has also been posted 2016-05-11 23:50:21 +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 63c5ca1f01 Fix crash when peers have sent undersized bitfields and we get the torrent info 2016-04-30 04:08:02 +10:00
Seth Hoenig 9f4bf70e17 refactor struct identifiers to follow conventional go names 2016-04-18 23:11:11 -05:00
Matt Joiner d3a1c79c79 Merge Torrent and torrent types 2016-04-03 18:40:43 +10:00
Matt Joiner bfd0b86441 Tidy up the peer have{,all,none},bitfield handling 2016-03-22 12:07:03 +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 409d3695a6 Favour earlier pieces slightly, helps with in-order downloads 2016-03-19 17:40:18 +11:00
Matt Joiner a6759b321a Only assert we should be requesting a piece in debug mode 2016-02-15 17:47:04 +11:00
Matt Joiner 5b5ecb8f3b Still update a connections piece priority even if the peer doesn't have the piece 2016-02-10 00:47:53 +11:00
Matt Joiner 26fa2c4af8 Track posted message type counts 2016-02-10 00:45:47 +11:00
Matt Joiner 3df7d61836 Reintroduce 64 outbound request cap 2016-02-08 16:09:12 +11:00
Matt Joiner 77d6e9e5cb Use new missinggo iterator style, and speed up torrent.connHasWantedPieces() 2016-02-07 01:22:31 +11:00
Matt Joiner 19a304b8ea connection.Close must be called under the Client lock 2016-02-02 00:45:26 +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 b90dacd324 Abstract the pendingPieces as a bitmap 2016-02-01 01:46:28 +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 0ad4dda9fc Move fillRequests and replenishConnRequests into connection.go 2016-01-24 15:21:17 +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 09050ff2c5 Some missing hunks that fix build 2016-01-04 22:56:36 +11:00