Ramakrishnan Muthukrishnan [Sat, 5 Sep 2015 17:11:47 +0000 (22:41 +0530)]
Peer: function to calculate the total bytes downloaded so far
Ramakrishnan Muthukrishnan [Fri, 4 Sep 2015 06:15:39 +0000 (11:45 +0530)]
Peer: refactor pickPiece function
Use the headMay from the Safe package to get a Maybe list head and
lift fst to Maybe to get the key.
Ramakrishnan Muthukrishnan [Thu, 3 Sep 2015 13:42:41 +0000 (19:12 +0530)]
bug: initial state should be meInterested = false, heChoking = true
Otherwise, the "InterestedMsg" never get sent.
Ramakrishnan Muthukrishnan [Thu, 3 Sep 2015 13:07:18 +0000 (18:37 +0530)]
peer: more refactoring. Supports all messages as before
Ramakrishnan Muthukrishnan [Thu, 3 Sep 2015 12:34:11 +0000 (18:04 +0530)]
Peer: more refactoring
Ramakrishnan Muthukrishnan [Thu, 3 Sep 2015 11:02:49 +0000 (16:32 +0530)]
Peer: Use Monad Transformers to simplify code
Wrap PState in a State Monad. Reorganization of the code in progress.
Ramakrishnan Muthukrishnan [Thu, 3 Sep 2015 11:02:11 +0000 (16:32 +0530)]
add mtl, organize packages alphabetically
Ramakrishnan Muthukrishnan [Sun, 30 Aug 2015 12:34:54 +0000 (18:04 +0530)]
remove redundant module imports for ghc 7.10
Ramakrishnan Muthukrishnan [Sun, 30 Aug 2015 08:59:26 +0000 (14:29 +0530)]
bump up the version of stackage/lts to 3.2 and use GHC 7.10.x
Ramakrishnan Muthukrishnan [Mon, 17 Aug 2015 16:37:21 +0000 (22:07 +0530)]
bit torrent -> BitTorrent
Ramakrishnan Muthukrishnan [Sat, 15 Aug 2015 08:27:44 +0000 (13:57 +0530)]
Not using travis-ci anymore
Ramakrishnan Muthukrishnan [Mon, 3 Aug 2015 14:38:03 +0000 (20:08 +0530)]
misc formatting
Ramakrishnan Muthukrishnan [Mon, 3 Aug 2015 14:37:34 +0000 (20:07 +0530)]
Now that functorrent is becoming useful, README should be more clear
Ramakrishnan Muthukrishnan [Sun, 2 Aug 2015 15:27:28 +0000 (20:57 +0530)]
write to the file name specified in the info structure
Ramakrishnan Muthukrishnan [Sun, 2 Aug 2015 14:47:19 +0000 (20:17 +0530)]
refactor Peer module
Ramakrishnan Muthukrishnan [Mon, 27 Jul 2015 14:41:00 +0000 (20:11 +0530)]
refactor msgloop a bit
Ramakrishnan Muthukrishnan [Mon, 27 Jul 2015 14:28:53 +0000 (19:58 +0530)]
peer is needed only for debug print
Ramakrishnan Muthukrishnan [Mon, 27 Jul 2015 13:27:44 +0000 (18:57 +0530)]
refactor handshake msg
Ramakrishnan Muthukrishnan [Sun, 26 Jul 2015 06:38:53 +0000 (12:08 +0530)]
refactor file operations into Fileops module
Ramakrishnan Muthukrishnan [Sat, 25 Jul 2015 06:42:03 +0000 (12:12 +0530)]
bugfix: calculate proper file offset
Ramakrishnan Muthukrishnan [Sat, 25 Jul 2015 06:40:09 +0000 (12:10 +0530)]
hlint caught some ugly code
Ramakrishnan Muthukrishnan [Sat, 25 Jul 2015 03:02:24 +0000 (08:32 +0530)]
add a warning in the README
Ramakrishnan Muthukrishnan [Sat, 25 Jul 2015 02:32:03 +0000 (08:02 +0530)]
README: update the current status. ☺
Ramakrishnan Muthukrishnan [Sat, 25 Jul 2015 01:29:20 +0000 (06:59 +0530)]
bugfix: use the previous piece length times number of pieces to calculate offset
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 18:54:24 +0000 (00:24 +0530)]
turn on hash verification of every downloaded piece
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 17:32:12 +0000 (23:02 +0530)]
bugfix: Hash string needs to be split into 20 bytes
Not the other way round (i.e. split by number of pieces, that' plain
wrong).
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 17:06:09 +0000 (22:36 +0530)]
fix file download to create a dummy and write into specific offsets
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 15:43:10 +0000 (21:13 +0530)]
verify SHA1 hash of each piece after assembling the blocks
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 14:39:54 +0000 (20:09 +0530)]
writeFileAtOffset: name says it all
Perhaps this should be moved to Util module.
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 14:19:32 +0000 (19:49 +0530)]
return a list of bytestring blocks corresponding to the piece index
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 14:08:54 +0000 (19:38 +0530)]
Peer: debug prints
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 13:32:32 +0000 (19:02 +0530)]
get rid of (some of) the compiler warnings
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 12:46:27 +0000 (18:16 +0530)]
split download of a piece into chunks of 16384 bytes
The pieceLenth can often be quite big, so we need to split the piece
into smaller blocks of size 16384 bytes. Why 16384? Just an arbit
number. It seem to work okay.
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 11:04:53 +0000 (16:34 +0530)]
fix the comments
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 11:00:24 +0000 (16:30 +0530)]
get the piece length and store it as piecestate
This needs to be revisited. Piece Length is the same for all pieces
but we are storing it for every piece number, which is a waste.
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 09:23:05 +0000 (14:53 +0530)]
send request msg and get the piecemsg back
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 08:36:18 +0000 (14:06 +0530)]
pickPiece: a simple algorithm to download the pieces in order
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 08:22:36 +0000 (13:52 +0530)]
bug: if I am uninterested and he is choking, send interested msg
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 07:11:03 +0000 (12:41 +0530)]
update piece availability list based on the bitmap
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 06:17:38 +0000 (11:47 +0530)]
msgLoop: more refactoring, better debug prints
Ramakrishnan Muthukrishnan [Fri, 24 Jul 2015 04:42:39 +0000 (10:12 +0530)]
more refactoring around msgLoop
Ramakrishnan Muthukrishnan [Thu, 23 Jul 2015 08:42:06 +0000 (14:12 +0530)]
refactor PeerState: Add connection handle to be part of peerstate
Ramakrishnan Muthukrishnan [Tue, 21 Jul 2015 06:21:33 +0000 (11:51 +0530)]
sendMsg: equiv of getMsg but on the sending side
Ramakrishnan Muthukrishnan [Mon, 20 Jul 2015 16:31:32 +0000 (22:01 +0530)]
thread peerstate along msgloop
msgLoop needs a major rethink.
Ramakrishnan Muthukrishnan [Sun, 19 Jul 2015 10:17:49 +0000 (15:47 +0530)]
gitignore .stack-work directory
Ramakrishnan Muthukrishnan [Sun, 19 Jul 2015 09:58:44 +0000 (15:28 +0530)]
update REAME.
Builds with stack. It is a lot less hasstle now.
Ramakrishnan Muthukrishnan [Sun, 19 Jul 2015 08:58:32 +0000 (14:28 +0530)]
src/Main.hs: if no input file is given, read from stdin
This change makes it play nicely as a Unix program that consumes
streams of bytes. One possible usage is to do a 'curl' of the torrent
file and pipe into the functorrent program.
Ramakrishnan Muthukrishnan [Sun, 19 Jul 2015 08:47:50 +0000 (14:17 +0530)]
keep hlint happy
Ramakrishnan Muthukrishnan [Sun, 19 Jul 2015 06:33:23 +0000 (12:03 +0530)]
helper function: havePiece
Ramakrishnan Muthukrishnan [Sun, 19 Jul 2015 06:16:25 +0000 (11:46 +0530)]
add piece hash into the pieceMap
Ramakrishnan Muthukrishnan [Fri, 17 Jul 2015 14:10:25 +0000 (19:40 +0530)]
new type synonym for a Piece Map
Ramakrishnan Muthukrishnan [Thu, 16 Jul 2015 08:32:11 +0000 (14:02 +0530)]
Main.hs: move peer handling into Peer module
Ramakrishnan Muthukrishnan [Sun, 12 Jul 2015 15:52:30 +0000 (21:22 +0530)]
move torrentToMetainfo into Metainfo module
Ramakrishnan Muthukrishnan [Sun, 12 Jul 2015 10:53:54 +0000 (16:23 +0530)]
Merge branch 'piece-manager'
Ramakrishnan Muthukrishnan [Sun, 12 Jul 2015 10:52:26 +0000 (16:22 +0530)]
refactoring to make Main simpler
Ramakrishnan Muthukrishnan [Sun, 12 Jul 2015 08:59:06 +0000 (14:29 +0530)]
Main: we are parsing arguments, not the input file itself
Ramakrishnan Muthukrishnan [Fri, 3 Jul 2015 14:48:24 +0000 (20:18 +0530)]
functorrent.cabal: rename README to README.md
Ramakrishnan Muthukrishnan [Thu, 2 Jul 2015 06:15:49 +0000 (11:45 +0530)]
stack config file
Delete cabal.config, as it is no longer relevant. Use stackage using
stack instead of cabal-install.
Ramakrishnan Muthukrishnan [Fri, 29 May 2015 02:02:08 +0000 (07:32 +0530)]
misc formatting
Ramakrishnan Muthukrishnan [Fri, 29 May 2015 02:01:40 +0000 (07:31 +0530)]
new test data file: ubuntu 14.10 i386 release iso
Ramakrishnan Muthukrishnan [Sun, 17 May 2015 07:53:04 +0000 (13:23 +0530)]
create a dummy file on the disk for a given path
Ramakrishnan Muthukrishnan [Sun, 17 May 2015 07:52:12 +0000 (13:22 +0530)]
rewrite bitfieldToList
Ramakrishnan Muthukrishnan [Sat, 16 May 2015 16:41:22 +0000 (22:11 +0530)]
convert bitfield from a peer into piece list
Ramakrishnan Muthukrishnan [Sat, 16 May 2015 06:46:32 +0000 (12:16 +0530)]
README: add a link to the official spec
Ramakrishnan Muthukrishnan [Sat, 16 May 2015 06:45:57 +0000 (12:15 +0530)]
remove the debug prints
Ramakrishnan Muthukrishnan [Thu, 7 May 2015 05:53:17 +0000 (11:23 +0530)]
receive the full handshake msg from peer
Ramakrishnan Muthukrishnan [Thu, 7 May 2015 05:52:14 +0000 (11:22 +0530)]
cleanup unused imports/functions
Cleanup the debug identifiers/prints.
Ramakrishnan Muthukrishnan [Wed, 6 May 2015 17:58:11 +0000 (23:28 +0530)]
more debugging prints
Ramakrishnan Muthukrishnan [Wed, 6 May 2015 17:33:53 +0000 (23:03 +0530)]
WIP: receive msgs from a connected peer and print them
Something wierd going on. Getting an incorrect length prefix.
Ramakrishnan Muthukrishnan [Wed, 6 May 2015 09:47:19 +0000 (15:17 +0530)]
add a simple message loop to print out received msgs
This is just to study what messages come after the handshake.
Ramakrishnan Muthukrishnan [Wed, 6 May 2015 08:38:04 +0000 (14:08 +0530)]
read bytes off the handle and parse a message
Ramakrishnan Muthukrishnan [Wed, 6 May 2015 05:06:53 +0000 (10:36 +0530)]
Merge pull request #31 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
Ramakrishnan Muthukrishnan [Wed, 6 May 2015 05:00:39 +0000 (10:30 +0530)]
README: update on the current state
Ramakrishnan Muthukrishnan [Tue, 5 May 2015 16:54:48 +0000 (22:24 +0530)]
rename shadowing identifiers
Ramakrishnan Muthukrishnan [Tue, 5 May 2015 16:41:13 +0000 (22:11 +0530)]
WIP: deserialize peer messages
serialize/deserialize is implemented as instances of Data.Binary
which allows us to just do get/put.
Ramakrishnan Muthukrishnan [Mon, 4 May 2015 16:59:58 +0000 (22:29 +0530)]
WIP: Peer protocol message marshalling
Ramakrishnan Muthukrishnan [Sun, 3 May 2015 09:14:58 +0000 (14:44 +0530)]
Remove the redundant withSocketsDo call wrapping simpleHTTP
simpleHTTP calls withSocketsDo deep inside, so no need to wrap
it outside.
Ramakrishnan Muthukrishnan [Fri, 1 May 2015 15:38:49 +0000 (21:08 +0530)]
remove hardcoded Peer
Works fine for the Ubuntu torrent file, but not for the Debian
torrent file.
Ramakrishnan Muthukrishnan [Fri, 1 May 2015 15:19:17 +0000 (20:49 +0530)]
Peer constructor also takes the peerid argument now: experimental
Ramakrishnan Muthukrishnan [Fri, 1 May 2015 10:20:21 +0000 (15:50 +0530)]
WIP: peer handshake
Ramakrishnan Muthukrishnan [Thu, 30 Apr 2015 11:29:59 +0000 (16:59 +0530)]
wrap network calls with withSocketsDo for multiplatform initialization
Ramakrishnan Muthukrishnan [Wed, 29 Apr 2015 00:08:07 +0000 (05:38 +0530)]
WIP: FuncTorrent as a nix package
Ramakrishnan Muthukrishnan [Sun, 26 Apr 2015 01:49:40 +0000 (07:19 +0530)]
add quickcheck as a test dependency
The Gitter Badger [Tue, 28 Apr 2015 11:10:32 +0000 (11:10 +0000)]
Added Gitter badge
Ramakrishnan Muthukrishnan [Tue, 28 Apr 2015 07:52:46 +0000 (13:22 +0530)]
Revert "travis.yml: install "happy" which is a dependency for haskell-src-exts"
This reverts commit
5d631c39efab1fdcae829f8048be1925ccaefc39. This commit is not
required anymore, since hlint test is removed and so haskell-src-exts is not
needed.
Ramakrishnan Muthukrishnan [Tue, 28 Apr 2015 03:11:04 +0000 (08:41 +0530)]
test: nuke hlint testsuite
Ramakrishnan Muthukrishnan [Mon, 27 Apr 2015 12:51:37 +0000 (18:21 +0530)]
suppress the "orphan instance of Arbitrary" warning
Ramakrishnan Muthukrishnan [Mon, 27 Apr 2015 12:49:43 +0000 (18:19 +0530)]
Revert "Move Arbitrary instances into another module"
This reverts commit
3d5c1507b312afb8e4219dcb048db0ae2847986e.
Ramakrishnan Muthukrishnan [Mon, 27 Apr 2015 12:31:18 +0000 (18:01 +0530)]
Move Arbitrary instances into another module
Suppress the orphan instance warning.
Ramakrishnan Muthukrishnan [Mon, 27 Apr 2015 10:54:55 +0000 (16:24 +0530)]
Merge pull request #30 from jaseemabid/master
Add cabal.config from stackage snapshot lts 2.5
Jaseem Abid [Mon, 27 Apr 2015 05:10:23 +0000 (10:40 +0530)]
Add cabal.config from stackage snapshot lts 2.5
Updated the README to reflect changes in build.
Ramakrishnan Muthukrishnan [Sun, 26 Apr 2015 17:50:55 +0000 (23:20 +0530)]
README: a note on using nix-shell
Ramakrishnan Muthukrishnan [Sun, 26 Apr 2015 16:34:27 +0000 (22:04 +0530)]
WIP: split tests into their own modules
To start with, the Bencode test is now in its own module.
Ramakrishnan Muthukrishnan [Sun, 26 Apr 2015 12:09:01 +0000 (17:39 +0530)]
QuickCheck tests now terminate successfully.
The trick is to reduce the amount of data we generate for recursive
types. The hint is in the QuickCheck manual.
Ramakrishnan Muthukrishnan [Sun, 26 Apr 2015 12:07:18 +0000 (17:37 +0530)]
add QuickCheck test to the test suite.
Bug: tests do not terminate because of the recursive nature of
the BVal data type.
Ramakrishnan Muthukrishnan [Sun, 26 Apr 2015 06:13:47 +0000 (11:43 +0530)]
add missing dependency for QuickCheck for executable
Ramakrishnan Muthukrishnan [Sun, 26 Apr 2015 06:10:46 +0000 (11:40 +0530)]
WIP: QuickCheck for BVal type
Jaseem Abid [Fri, 24 Apr 2015 13:49:32 +0000 (19:19 +0530)]
Rename connect to tracker
Bad clash with socket library!
Jaseem Abid [Thu, 23 Apr 2015 15:26:02 +0000 (20:56 +0530)]
Move network code to own file
Ramakrishnan Muthukrishnan [Fri, 24 Apr 2015 09:29:08 +0000 (14:59 +0530)]
README: add a note on nix-shell