Combinatorrent alternatives and similar packages
Based on the "Networking" category.
Alternatively, view Combinatorrent alternatives based on common mentions on social networks and blogs.
gitit10.0 0.0 Combinatorrent VS gititA wiki using HAppS, pandoc, and git
snap-core9.8 0.0 Combinatorrent VS snap-coreCore type definitions (Snap monad, HTTP types, etc) and utilities for web handlers.
network9.8 0.0 Combinatorrent VS networkLow-level networking interface
websockets9.8 0.0 Combinatorrent VS websocketsA Haskell library for creating WebSocket-capable servers
sbp9.7 9.1 L2 Combinatorrent VS sbpSwift Binary Protocol client libraries
haskell-tor9.7 0.0 Combinatorrent VS haskell-torA Haskell implementation of the Tor protocol.
snap-server9.7 0.0 Combinatorrent VS snap-serverA fast HTTP server library, which runs Snap web handlers.
ekg9.7 0.0 Combinatorrent VS ekgRemote monitoring of running processes over HTTP
grpc-haskell9.7 0.0 Combinatorrent VS grpc-haskellHaskell gRPC support
call-haskell-from-anythingCall Haskell functions from any programming language via serialization and dynamic libraries
discord-haskellHaskell library for writing Discord bots
HTTP9.6 0.0 Combinatorrent VS HTTPHaskell HTTP package
web39.6 6.3 Combinatorrent VS web3Web3 API for Haskell.
PortFusion9.6 0.0 Combinatorrent VS PortFusionHaskell-powered cross-platform transport-layer distributed reverse / forward proxy & tunneling solution – currently available for all TCP protocols (RDP, VNC, HTTP(S), SSH, ...).
hans9.5 0.0 Combinatorrent VS hansThe haskell network stack
hoauth29.4 0.0 Combinatorrent VS hoauth2Haskell oauth2 binding
glirc9.4 0.0 Combinatorrent VS glircHaskell IRC library and console client - Join us on libera.chat #glirc
network-transport-zeromqZeroMQ transport for distributed-process (aka Cloud Haskell)
amqp9.4 0.0 Combinatorrent VS amqpHaskell AMQP client library
io-streams9.4 0.0 Combinatorrent VS io-streamsSimple, composable, and easy-to-use stream I/O for Haskell
mighttpd29.3 0.0 Combinatorrent VS mighttpd2File/CGI web server on Warp
docker9.3 2.8 Combinatorrent VS dockerA Haskell library for the Docker Engine API
HaskellNet9.3 0.0 Combinatorrent VS HaskellNetHaskell library which provides client support for POP3, SMTP, and IMAP protocols.
graphula9.1 0.0 Combinatorrent VS graphulaA simple interface for generating persistent data and linking its dependencies
http-streams9.1 0.0 Combinatorrent VS http-streamsHaskell HTTP client library for use with io-streams
9.1 0.0 Combinatorrent VS redditreddit api for haskell
http-types9.1 0.0 Combinatorrent VS http-typesGeneric HTTP types for Haskell (for both client and server code)
dns9.1 3.3 Combinatorrent VS dnsDNS libary in Haskell
ngx-export9.1 0.0 L1 Combinatorrent VS ngx-exportNginx module for binding Haskell code in configuration files for great good!
mime-mail9.1 0.0 Combinatorrent VS mime-mailCompose MIME email messages.
smtp-mail9.1 0.0 Combinatorrent VS smtp-mailMaking it easy to send SMTP email from Haskell
http-server9.1 0.0 Combinatorrent VS http-serverA Haskell HTTP server
toxcore9.1 0.0 Combinatorrent VS toxcoreHaskell Tox protocol implementation
haskakafka9.0 0.0 Combinatorrent VS haskakafkaKafka bindings for Haskell
discord-hs9.0 0.0 Combinatorrent VS discord-hsHave you heard of our lord and savior Haskell?
octohat9.0 0.0 Combinatorrent VS octohatAPI wrapper for Github's API in Haskell with tests
secure-sockets9.0 0.0 Combinatorrent VS secure-socketsA library for making secure connections between servers.
http-kit9.0 0.0 Combinatorrent VS http-kitA low-level HTTP library
pontarius-xmpp8.9 0.0 Combinatorrent VS pontarius-xmppAn XMPP client library for Haskell.
network-transport-tcpTCP Realisation of Network.Transport
ntp-control8.9 0.0 Combinatorrent VS ntp-controlClient library for NTP control messaging
linklater8.8 0.0 Combinatorrent VS linklaterA Haskell library for the Slack API (including real-time messaging!)
network-uri8.8 2.2 Combinatorrent VS network-uriURI manipulation facilities
twilio8.8 0.0 Combinatorrent VS twilioTwilio library for Haskell
network-transportGeneric Network.Transport API
libmpd8.7 0.0 Combinatorrent VS libmpdA client library for MPD, the Music Player Daemon
montage8.7 0.0 Combinatorrent VS montageRiak resolution proxy
imap8.7 0.0 Combinatorrent VS imapA performant IMAP client library
netcore8.5 0.0 Combinatorrent VS netcoreCompiler from NetCore to OpenFlow and associated tools.
http-client-streamshttp-client for io-streams supporting openssl
Access the most powerful time series database as a service
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Combinatorrent or a related project?
Combinatorrent - a bittorrent client.
This is a bittorrent client. I am the introduction document and I need to be written by some generous soul!
Here is what I do to install haskell torrrent locally on my machine:
cabal install --prefix=$HOME --user
Since we are using the magnificient cabal, this is enough to install haskell torrent in our $HOME/bin directory.
Combinatorrent can currently only do one very simple thing. If you call it with
then it will begin downloading the file in foo.torrent to the current directory via the Bittorrent protocol.
Currently haskell-torrent supports the following BEPs (See the BEP Process document for an explanation of these)
- 0003, 0004, 0006, 0010, 0020,
Combinatorrent implicitly supports these extensions
- 0027: Support by the virtue of only supporting a single tracker and no DHT.
Partially supported extensions:
0007: Combinatorrent understands and uses the "peers6" response from the tracker to connect clients. On the other hand, it does nothing to provide the "ipv4=" and "ipv6=" keys on tracker requests. As such, it can be claimed that 0007 support is available, as everything we left out is only qualified as MAY.
0023: Combinatorrent supports the "compact" response only, although it is explicitly stated that the client must support both. In practice it has little impact as all modern trackers will only return compact responses anyway.
Combinatorrent is not supporting these BEPs, but strives to do so one day:
- 0005, 0009, 0012, 0015, 0016, 0017, 0018, 0019, 0021, 0022, 0024, 0026, 0028, 0029, 0030, 0031, 0032
For debugging, jlouis tends to use the following:
make conf build test
This builds Combinatorrent with the Debug flag set and also builds the software with profiling by default so it is easy to hunt down performance regressions. It also runs the internal test-suite for various values. There are a couple of interesting targets in the top-level Makefile
Reading material for hacking Combinatorrent:
Protocol specification - BEP0003: This is the original protocol specification, tracked into the BEP process. It is worth reading because it explains the general overview and the precision with which the original protocol was written down.
Bittorrent Enhancement Process - BEP0000 The BEP process is an official process for adding extensions on top of the BitTorrent protocol. It allows implementors to mix and match the extensions making sense for their client and it allows people to discuss extensions publicly in a forum. It also provisions for the deprecation of certain features in the long run as they prove to be of less value.
wiki.theory.org An alternative description of the protocol. This description is in general much more detailed than the BEP structure. It is worth a read because it acts somewhat as a historic remark and a side channel. Note that there are some commentary on these pages which can be disputed quite a lot.
"Supervisor Behaviour" From the Erlang documentation. How the Erlang Supervisor behaviour works. The Supervisor and process structure of Combinatorrent is somewhat inspired by the Erlang ditto.
Source code Hierarchy
Data: Data structures.
- Queue: Functional queues. Standard variant with two lists.
- PendingSet: A wrapper around Data.PSQueue for tracking how common a piece is.
- PieceSet: BitArrays of pieces and their operations.
Process: Process definitions for the different processes comprising Combinatorrent
- ChokeMgr: Manages choking and unchoking of peers, based upon the current speed of the peer and its current state. Global for multiple torrents.
- Console: Simple console process. Only responds to 'quit' at the moment.
- DirWatcher: Watches a directory and adds any torrent present in it.
- FS: Process managing the file system.
- Listen: Not used at the moment. Step towards listening sockets.
- Peer: Several process definitions for handling peers. Two for sending, one for receiving and one for controlling the peer and handle the state.
- PeerMgr: Management of a set of peers for a single torrent.
- PieceMgr: Keeps track of what pieces have been downloaded and what are missing. Also hands out blocks for downloading to the peers.
- Status: Keeps track of uploaded/downloaded/left bytes for a single torrent. Could be globalized.
- Timer: Timer events.
- TorrentManager: Manages torrents at the top-level.
- Tracker: Communication with the tracker.
Protocol: Modules for interacting with the various bittorrent protocols.
- BCode: The bittorrent BCode coding. Used by several protocols.
- Wire: The protocol used for communication between peers.
- Channels: Various Channel definitions.
- Combinatorrent: Main entry point to the code. Sets up processes.
- Digest: SHA1 digests as used in the bittorrent protocol.
- FS: Low level Filesystem code. Interacts with files.
- Process: Code for Erlang-inspired processes.
- RateCalc: Rate calculations for a network socket. We use this to keep track of the current speed of a peer in one direction.
- Supervisor: Erlang-inspired Supervisor processes.
- Test.hs: Code for test-framework
- TestInstance.hs: Various helper instances not present in the test framework by default
- Torrent: Various helpers and types for Torrents.
- Tracer: Code for simple "ring"-like tracing.
- Version.hs.in: Generates Version.hs via the configure script.
<!-- vim: filetype=none tw=76 expandtab -->