Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Cross platform Bittorrent library written in C with a BSD license. Intended to be used as a framework for embedding bittorrent functionality
C Python
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
deps
doc
include
src
tests
.travis.yml
LICENSE
Makefile
README.rst
clib.py
package.json
waf
wscript

README.rst

https://travis-ci.org/willemt/yabtorrent.png

What?

Yet another Bittorrent client/library written in C with a BSD license. The client has been intended to be used as a drop-in bittorrent library. The client is in ALPHA and currently has 130+ unit tests covering the code base.

How does it work?

doc/YABTorrent.png

YABTorrent is event based.

Networkfuncs is a set of networking functions that need to be implemented for the required plumbing. Currently networkworkfuncs_libuv.c is a libuv implementation.

See bt.h for documentation.

Below is a description of the key source files:

  • yabtorrent.c: main()
  • network_adapter_libuv_v0.10.c: Implementation of network stack
  • bt_download_manager.c: Key functions for orchestrating the download
  • bt_peer_manager.c: Collection of peers
  • bt_piece.c: Manage piece data (ie. write/read and progress)
  • bt_piece_db.c: Collection of pieces
  • bt_blacklist.c: Block peers from sending invalid pieces
  • bt_choker_leecher.c: Choker algorithm for leechers
  • bt_choker_seeder.c: Choker algorithm for seeders
  • bt_diskcache.c: In-memory file layer that manages a LRU cache over another file layer
  • bt_diskmem.c: In-memory file layer (for testing only)
  • bt_filedumper.c: File layer that writes/reads to disk
  • bt_selector_endgame.c: End game piece selection alogrithm
  • bt_selector_random.c: Random piece selection alogrithm
  • bt_selector_rarestfirst.c: Rarest first piece selection alogrithm
  • bt_selector_sequential.c: Sequential piece selection alogrithm

Example usage

https://github.com/willemt/dogebox - a Bittorrent Sync clone

Building

$git clone https://github.com/willemt/YABTorrent

$cd YABTorrent

$python waf configure

$python waf build

Usage

$./bt torrentfile.torrent

Why?

  1. There aren't any bittorrent clients in C that are licensed under non-copyleft licenses
  2. There aren't any lightweight bittorrent C libraries that aim to be integrable outside of their intended use case

Help/Todo

If you want to help out with development, please look into the following:

  • BEP 5 - DHT Protocol - github.com/willemt/CTrackerClient simply needs to handle the "dht://" schema. github.com/jech/dht can be used to add this functionality.
  • BEP 2 - uTorrent transport protocol - you need to create a "networkfuncs_utp.c" source file which implements all the network callbacks. "networkfuncs_utp.c" would simply be a wrapper of github.com/bittorrent/libutp.
  • BEP 9 - Extension for Peers to Send Metadata Files
  • uTorrent Peer Exchange
Something went wrong with that request. Please try again.