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