Commit Graph

446 Commits

Author SHA1 Message Date
Matt Joiner 1aa1063863 Big visibility/doc clean-up, and extract mmap_span package 2014-04-09 02:36:05 +10:00
Matt Joiner 786952e4cd Add error handling to PrioritizeDataRegion as it's public facing API 2014-04-09 01:15:39 +10:00
Matt Joiner c1bf4de70f Mask EHOSTUNREACH on connect() 2014-04-08 19:40:10 +10:00
Matt Joiner 9ba3af19ba Break up client.go into several files and a few fixes
Suppress expected errors when initiating connections.
Add an explicit timeout to initiate connections.
Put a lock on closing a connection to prevent data race warnings.
2014-04-03 23:16:59 +11:00
Matt Joiner 34299483d2 TODO 2014-03-21 00:40:54 +11:00
Matt Joiner 236e12486b Lots of logging improvements 2014-03-21 00:14:17 +11:00
Matt Joiner a1b95d499d Send port on announces when possible 2014-03-21 00:12:53 +11:00
Matt Joiner 1b2a85600f Fix requests to other leechers 2014-03-21 00:11:49 +11:00
Matt Joiner a07b53668f Fix races stopping clients and closing connections 2014-03-20 22:01:56 +11:00
Matt Joiner fa000c4f88 Improvements to pending chunks; extract testutil 2014-03-20 16:58:09 +11:00
Matt Joiner 9ee83455cf Various progress, particularly around the way data readiness is handled 2014-03-20 04:30:08 +11:00
Matt Joiner 998fbeb0c6 Hunting for goroutine leaks
Start implementing Client.Stop().
2014-03-18 22:39:33 +11:00
Matt Joiner 2e81f914e7 Add a end-to-end test for torrentfs
Basic unchoking and uploading.
Accept incoming connections.
Break out torrentfs lib.
Fix and implement some protocol stuff.
2014-03-18 01:44:22 +11:00
Matt Joiner 31530899e4 Make use of trackers 2014-03-17 02:30:10 +11:00
Matt Joiner 495082a60a Set the event condition locker in client
Needed for WaitAll, albeit not actually triggered anywhere yet.
2013-11-05 00:06:40 +11:00
Matt Joiner d7fd5d628b Stop connection writer timer on exit from function 2013-11-05 00:06:08 +11:00
Matt Joiner 068236b6da Remove obsolete private type 'pieceState' 2013-11-05 00:05:44 +11:00
Matt Joiner 36b36beb3b More explicit implementation for wantPiece method 2013-10-22 18:03:44 +11:00
Matt Joiner ec0ffa84a4 If no requests can be found for a connection, set it to uninterested 2013-10-22 18:03:27 +11:00
Matt Joiner 8f0b076f65 Set pieceByBytesPendingSlice capacity in advance to reduce memory pressure 2013-10-22 18:02:52 +11:00
Matt Joiner fe5f8317d4 Reconnect to the torrentfs -testPeer at regular intervals if it's missing for any loaded torrents 2013-10-22 18:01:56 +11:00
Matt Joiner 8df567e822 Fix keep-alive timer use in connection writer, and make connection a public type
I'm not sure if making this public is the right approach yet, but for now it's a good way to conditionally invoke methods on Client from external packages.
2013-10-22 18:00:35 +11:00
Matt Joiner d039436f55 Significant progress and improvements
Piece state is broken up into several dimensions.
Implement keep-alive in connection writer.
Lazily hash pieces, only as requested.
Replace client actor mechanism with a mutex.
Fix runConnection/connectionLoop/handshake misnomers.
Fix broken reading from partially complete pieces.
2013-10-21 01:07:01 +11:00
Matt Joiner 03b1af07cd Always finish off partially downloaded pieces 2013-10-15 19:42:30 +11:00
Matt Joiner 0a5043ba69 Implement prioritizing of torrent data regions based on FS activity 2013-10-15 01:39:12 +11:00
Matt Joiner 5c0ff3ff5f Torrent client publishes data ready information; torrentfs supports file reads 2013-10-13 23:16:21 +11:00
Matt Joiner 43418e9f65 Fix bugs in the new WriteSectionTo hashing implementation 2013-10-07 18:58:33 +11:00
Matt Joiner a44accadbe Create more efficient writer method for MMapSpan for use with hashing 2013-10-07 10:35:10 +11:00
Matt Joiner 8e435ea9e2 Need executable permissions on torrent data directories 2013-10-06 21:12:44 +11:00
Matt Joiner 68e189d477 Start implementing torrentfs binary 2013-10-06 18:01:39 +11:00
Matt Joiner 4209216696 BEP20 2013-10-02 20:12:05 +10:00
Matt Joiner 39660d4e9d Implement writing of chunks as they arrive 2013-10-02 19:55:03 +10:00
Matt Joiner 7bc8524d24 Mostly handle Piece messages, and kick off a piece check when all the chunks are done 2013-10-02 17:57:59 +10:00
Matt Joiner 28531a4fcc Fix request/chunk confusion, missing outgoing message prefix, protocol tests; improve request triggering 2013-10-01 18:43:18 +10:00
Matt Joiner 081a6805c5 Implementing bitfields and connection message handling 2013-09-30 21:51:08 +10:00
Matt Joiner abf5c92488 Implement peer connection writer, optimizer and handshake 2013-09-29 16:45:17 +10:00
Matt Joiner 28c7c6a5d7 Fix race conditions 2013-09-29 16:44:37 +10:00
Matt Joiner fe80bf2f2f BytesInfoHash wasn't actually initializing the info hash 2013-09-29 16:43:35 +10:00
Matt Joiner 978aa1f0c8 Don't rely on *os.File finalizer for close 2013-09-29 14:20:18 +10:00
Matt Joiner ac254e95f2 Prevent false-positive race conditions 2013-09-29 14:18:43 +10:00
Matt Joiner 7870d20573 Begin implementing the adding of peers, and initiating of connections 2013-09-29 08:11:24 +10:00
Matt Joiner ddd4382474 Handle actorTask messages 2013-09-29 04:05:09 +10:00
Matt Joiner 805897afb5 Can't send to torrentFinished while handling an event 2013-09-29 04:04:46 +10:00
Matt Joiner b4989a370f Fix crash due to torrent.MetaInfo being unset 2013-09-29 04:03:36 +10:00
Matt Joiner aefe754698 Create torrent data files with at least the required size
Truncate is required or use of mmap'd region beyond file length raises SIGBUS.
2013-09-29 04:03:04 +10:00
Matt Joiner 816c263760 Start implementing a basic client 2013-09-26 19:49:15 +10:00