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
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
Ramakrishnan Muthukrishnan [Fri, 24 Apr 2015 09:22:12 +0000 (14:52 +0530)]
nix-shell configuration file
Ramakrishnan Muthukrishnan [Thu, 23 Apr 2015 07:35:34 +0000 (13:05 +0530)]
Bencode: make encode a bit more readable
Ramakrishnan Muthukrishnan [Thu, 23 Apr 2015 05:34:31 +0000 (11:04 +0530)]
Bencode: cleanup the parser a bit
There is no need to check for the spaces at the beginning every
individual parser for each type.
Jaseem Abid [Sun, 19 Apr 2015 10:47:10 +0000 (16:17 +0530)]
Fix broken test
Ramakrishnan Muthukrishnan [Sat, 18 Apr 2015 09:59:30 +0000 (15:29 +0530)]
Merge pull request #26 from jaseemabid/master
Clean up tracker network code
Jaseem Abid [Sat, 18 Apr 2015 09:31:59 +0000 (15:01 +0530)]
Fix bdict encode, cleanup blist encode
This one took a long time to debug! Need more unit tests
Jaseem Abid [Sat, 11 Apr 2015 11:19:26 +0000 (16:49 +0530)]
Clean up tracker network code
- Made info_hash an attribute of meta info
- Refactored a `get` function
- Removed few more useless types
- Cleaned up log messages
- Remove unnecessary Url type
- Fix double urlEncode
TIL You should ideally always write total functions in Haskell.
Jaseem Abid [Tue, 14 Apr 2015 12:49:09 +0000 (18:19 +0530)]
Merge pull request #25 from abhiranjankumar00/master
Follow up #21. Applying fmap (alternative) on getters
Abhiranjan Kumar [Sun, 12 Apr 2015 21:35:51 +0000 (03:05 +0530)]
Follow up #21. Applying fmap (alternative) on getters
Jaseem Abid [Sat, 11 Apr 2015 13:27:50 +0000 (18:57 +0530)]
Merge pull request #24 from abhiranjankumar00/master
Fixes #21 (creationDate now not empty)
Abhiranjan Kumar [Sat, 11 Apr 2015 13:12:54 +0000 (18:42 +0530)]
Fixes 21
Jaseem Abid [Sat, 11 Apr 2015 11:05:07 +0000 (16:35 +0530)]
Switch to known torrent file
Jaseem Abid [Fri, 10 Apr 2015 02:06:35 +0000 (07:36 +0530)]
Move things around
- `infoHash` is part of metainfo, not tracker alone. Peers need this for
handshake
- Rename PeerResp to TrackerResponse and move to Tracker.hs
- Remove unwanted overhead like `type Port = Integer`
- Some more docs, haddock is showing them nicely
- Update tests
Jaseem Abid [Tue, 7 Apr 2015 02:02:42 +0000 (07:32 +0530)]
Meta info tests
Jaseem Abid [Tue, 7 Apr 2015 01:59:01 +0000 (07:29 +0530)]
Expose all MetaInfo constructors
Jaseem Abid [Tue, 7 Apr 2015 01:35:26 +0000 (07:05 +0530)]
Use moby_dick.torrent for testing
`pieces` field of the Debian ISO is too long to put in a source file and
would cause Emacs to hang too often.
Jaseem Abid [Mon, 30 Mar 2015 16:30:13 +0000 (22:00 +0530)]
Minor refactor maybeBstrToString
Makes the function total. Also, this looks a lot like fmap!
Ramakrishnan Muthukrishnan [Mon, 30 Mar 2015 10:44:23 +0000 (16:14 +0530)]
Merge pull request #20 from vu3rdd/12-announcelist-2
combine announce and announceList slots in the Metainfo record.
Ramakrishnan Muthukrishnan [Mon, 30 Mar 2015 10:07:42 +0000 (15:37 +0530)]
use maybeToList from Data.Maybe
Ramakrishnan Muthukrishnan [Mon, 30 Mar 2015 08:57:36 +0000 (14:27 +0530)]
combine announce and announceList slots in the Metainfo record.
This eliminates the unnecessary "getter" function getTrackers
and simplifies the code a bit. Still a work in progress.
Ramakrishnan Muthukrishnan [Mon, 30 Mar 2015 05:08:39 +0000 (10:38 +0530)]
remove an unwanted import which creeped in during merge
Ramakrishnan Muthukrishnan [Thu, 26 Mar 2015 10:58:47 +0000 (16:28 +0530)]
remove unnecessary parenthesis (hlint suggestion)
Ramakrishnan Muthukrishnan [Thu, 26 Mar 2015 10:48:07 +0000 (16:18 +0530)]
support for announce-list.
Some torrent files use announce-lists but then store list of lists,
each inner list containing just one string instead of list of strings.
(eg: data/ubuntu-14.10-desktop-amd64.iso.torrent stores it this way)
Jaseem Abid [Sun, 29 Mar 2015 12:24:58 +0000 (17:54 +0530)]
Handle error cases from the tracker
Tracker might reply that the requested torrent is unavailable. Sample
response at `data/debian-7.8.0-amd64-CD-1.iso.error`.
Renamed `getPeerResponse` to `mkPeerResp` and changed it singture to
match other `mk*` functions like `mkMetaInfo`.
Added test cases
New checks made the code one more level deep. Will need a refactor with
the Either Monad.
Jaseem Abid [Sun, 29 Mar 2015 07:25:21 +0000 (12:55 +0530)]
Add directory & tasty as a library dependencies
Jaseem Abid [Sat, 28 Mar 2015 17:21:00 +0000 (22:51 +0530)]
Merge pull request #19 from jaseemabid/master
Cleanup a few bad types
Jaseem Abid [Sat, 28 Mar 2015 11:22:02 +0000 (16:52 +0530)]
Cleanup a few bad types
1. Change type InfoDict from `Map BVal BVal` to `Map String BVal`
The keys are human readable keys like 'name', 'announce' etc and String
is the natural fit. This change also gets rid of a lot of packing
unpacking business.
Example:
-infoHash :: Map BVal BVal -> ByteString
-infoHash m = let info = m ! Bstr (pack "info")
- in (hash . pack . encode) info
+infoHash :: InfoDict -> ByteString
+infoHash m = hash . encode $ (m ! "info")
2. Change type of `encode` from `BVal -> String` to `BVal -> ByteString`
Encoded values might not be ASCII safe in the first place. Also, it
makes sense to be the inverse function of decode. `encode . decode` pair
might be a good candidate for Quickcheck.
Other changes are consequences of the type change. Fixed a bunch of
broken doctests in Bencode.
TIL haskell is kickass for refactoring!
Ramakrishnan Muthukrishnan [Fri, 27 Mar 2015 17:11:04 +0000 (22:41 +0530)]
add dependency on package "directory" to functorrent-test
Ramakrishnan Muthukrishnan [Fri, 27 Mar 2015 05:50:41 +0000 (11:20 +0530)]
error out if the input string is not a valid filepath
Ramakrishnan Muthukrishnan [Tue, 24 Mar 2015 08:05:33 +0000 (13:35 +0530)]
Merge pull request #15 from vu3rdd/14-hlint-0
Run HLint as a test suite.
Ramakrishnan Muthukrishnan [Tue, 24 Mar 2015 08:04:10 +0000 (13:34 +0530)]
FIlenames start with capital letters. hlint.hs -> HLint.hs
Ramakrishnan Muthukrishnan [Tue, 24 Mar 2015 04:15:16 +0000 (09:45 +0530)]
travis.yml: install "happy" which is a dependency for haskell-src-exts
Ramakrishnan Muthukrishnan [Mon, 23 Mar 2015 14:29:08 +0000 (19:59 +0530)]
Run HLint as a test suite.
Jaseem Abid [Sun, 22 Mar 2015 19:42:58 +0000 (01:12 +0530)]
Fix cabal dependencies
Jaseem Abid [Sun, 22 Mar 2015 18:00:46 +0000 (23:30 +0530)]
Fix tracker response test
Jaseem Abid [Sun, 22 Mar 2015 17:14:43 +0000 (22:44 +0530)]
Fix key error
Jaseem Abid [Sun, 22 Mar 2015 15:25:11 +0000 (20:55 +0530)]
Fix test which did file parsing on tracker response
Relates to #11
Ramakrishnan Muthukrishnan [Sun, 22 Mar 2015 02:02:04 +0000 (07:32 +0530)]
README.md: hopefully correct image link this time
Ramakrishnan Muthukrishnan [Sun, 22 Mar 2015 01:59:26 +0000 (07:29 +0530)]
README.md: bang for the image link
Ramakrishnan Muthukrishnan [Sun, 22 Mar 2015 01:56:28 +0000 (07:26 +0530)]
README.md: messed up the markdown link syntax
Ramakrishnan Muthukrishnan [Sun, 22 Mar 2015 01:55:05 +0000 (07:25 +0530)]
README -> README.md
Ramakrishnan Muthukrishnan [Sun, 22 Mar 2015 01:52:02 +0000 (07:22 +0530)]
README: add travis build/test status badge.
Ramakrishnan Muthukrishnan [Sat, 21 Mar 2015 17:46:26 +0000 (23:16 +0530)]
Merge pull request #12 from jaseemabid/master
Add tests to functorrent
Jaseem Abid [Sat, 21 Mar 2015 16:47:40 +0000 (22:17 +0530)]
Add travis config
Jaseem Abid [Sat, 21 Mar 2015 16:44:09 +0000 (22:14 +0530)]
Tests for decode
Jaseem Abid [Sat, 21 Mar 2015 16:36:28 +0000 (22:06 +0530)]
Rename getPeers -> peers
Jaseem Abid [Sat, 21 Mar 2015 15:57:57 +0000 (21:27 +0530)]
Remove duplicate import
Jaseem Abid [Sat, 21 Mar 2015 14:40:22 +0000 (20:10 +0530)]
Remove dependency on time package
Jaseem Abid [Sat, 21 Mar 2015 14:02:57 +0000 (19:32 +0530)]
Make functorrent a library and an executable
This is a prerequisite for testing, as well as code organization.
1. `$ cabal repl` will build and import Functorrent library.
2. Making module exports explicit
Jaseem Abid [Wed, 18 Mar 2015 10:30:40 +0000 (16:00 +0530)]
Merge pull request #10 from jaseemabid/master
Make network request return ByteString
Jaseem Abid [Sun, 15 Mar 2015 18:34:10 +0000 (00:04 +0530)]
Make network request return ByteString
Packing and unpacking curropted the binary data in several occations
when the network response was written to disk for caching/testing.
Add support for local caches. This aids in testing, and throttling
remote requests if the file is new enough.
Removes unwanted <$>
Jaseem Abid [Mon, 2 Mar 2015 11:09:23 +0000 (16:39 +0530)]
Merge pull request #7 from dfordivam/master
Implemented logger
Divam [Sun, 1 Mar 2015 15:10:13 +0000 (20:40 +0530)]
Feedback from @jaseemabid, Fixes #6
Divam [Sat, 28 Feb 2015 16:08:11 +0000 (21:38 +0530)]
Logger implementation code. Fixes #6. Logging to file remaining
Divam [Mon, 23 Feb 2015 11:01:26 +0000 (16:31 +0530)]
Merge pull request #1 from vu3rdd/master
merge from vu3rdd
Ramakrishnan Muthukrishnan [Mon, 23 Feb 2015 05:19:53 +0000 (10:49 +0530)]
Merge pull request #5 from jaseemabid/master
Make `!` inline
Jaseem Abid [Sun, 22 Feb 2015 17:04:44 +0000 (22:34 +0530)]
Make `!` inline
Ramakrishnan Muthukrishnan [Sun, 22 Feb 2015 14:25:37 +0000 (19:55 +0530)]
Merge pull request #4 from jaseemabid/master
Absolute imports, removing qualified imports
Jaseem Abid [Sat, 21 Feb 2015 18:59:06 +0000 (00:29 +0530)]
Fix failing test
Jaseem Abid [Sat, 21 Feb 2015 18:45:57 +0000 (00:15 +0530)]
Absolute import everywhere, cleanup
Ramakrishnan Muthukrishnan [Sat, 21 Feb 2015 16:43:50 +0000 (22:13 +0530)]
Merge pull request #3 from jaseemabid/master
Derive `show` automatically for BVal
Jaseem Abid [Sat, 21 Feb 2015 13:01:33 +0000 (18:31 +0530)]
Derive `show` automatically for BVal
Ramakrishnan Muthukrishnan [Sat, 21 Feb 2015 03:55:15 +0000 (09:25 +0530)]
more refactoring: type synonym for info dictionary
Ramakrishnan Muthukrishnan [Sat, 21 Feb 2015 03:43:45 +0000 (09:13 +0530)]
more refactoring around infohash
Ramakrishnan Muthukrishnan [Sat, 21 Feb 2015 02:41:42 +0000 (08:11 +0530)]
refactor PeerID and associated functions.
Until now we were hashing peer id string to get a 20-byte hash. But
that's not needed. Peer ID is just a 20-byte string that needs to be
unique per client and sent to the tracker (and peers).
Ramakrishnan Muthukrishnan [Fri, 20 Feb 2015 17:15:53 +0000 (22:45 +0530)]
WIP: peer handshake
Ramakrishnan Muthukrishnan [Thu, 19 Feb 2015 00:49:17 +0000 (06:19 +0530)]
Merge pull request #2 from jaseemabid/master
A few lint fixes to get started
Jaseem Abid [Wed, 18 Feb 2015 20:28:51 +0000 (01:58 +0530)]
A few lint fixes to get started
- Making `GHC -Wall` and hlint happy.
- Renaming length to len, to not shadow prelude function
- Remove unused import
Ramakrishnan Muthukrishnan [Tue, 17 Feb 2015 13:02:36 +0000 (18:32 +0530)]
Update current status.
Ramakrishnan Muthukrishnan [Tue, 17 Feb 2015 11:05:00 +0000 (16:35 +0530)]
Handle the `left' parameter for the tracker request.
Tracker initial request includes a parameter called `left' to indicate
the size of the file left to be downloaded. When we contact the tracker
initially, we haven't downloaded anything yet. So, the left parameter
should be the length parameter. For now, we handle only single file
torrent files, so we just pick the length param from Metainfo and shove
it in into the tracker http request.
Ramakrishnan Muthukrishnan [Tue, 17 Feb 2015 09:38:44 +0000 (15:08 +0530)]
add a TODO item on test suite
Ramakrishnan Muthukrishnan [Tue, 17 Feb 2015 09:37:56 +0000 (15:07 +0530)]
cute hlint suggestion for transformng a function
Ramakrishnan Muthukrishnan [Tue, 17 Feb 2015 06:06:27 +0000 (11:36 +0530)]
fix changed made during sleep deprived state
Ramakrishnan Muthukrishnan [Tue, 17 Feb 2015 00:58:28 +0000 (06:28 +0530)]
Use stackage
Ramakrishnan Muthukrishnan [Tue, 17 Feb 2015 00:35:06 +0000 (06:05 +0530)]
incorporate hlint suggestions