encryptio.com

This sentence is very meta.

Eye of Bittorrent protocol

EoB stands for “Eye of Bittorrent” and is a implementation-agnostic protocol for controlling a bittorrent client.

Why its cool

Most Bittorrent clients are made up of two parts: the engine, which talks to the peers and tracker and manages files, and the interface, which lets the user interact with everything. EoB seperates the engine from the interface completely, letting you use any interface with any engine, and even lets you use proxy EoB objects to add features to the engine.

With EoB, the user runs two programs (although the user need not be aware of this), the engine and the interface. The engine continues running if the interface is closed or crashes. You can, of course, use the interface to force the shutdown of the engine.

Separation

This separation allows any engine (examples: azureus engine, libtorrent, libTorrent, rubytorrent, etc) to be used with any interface (examples: CLI, Curses/ncurses, uTorrent-style GUI, and web UI, menu bar/system tray control, widgets/gadgets, and many more), even multiple of those at the same time.

You can add growl support to any torrent client that supports EoB just by connecting the plugin to the correct ip and port number. You can access your one torrent client from anywhere. You can run your torrent client locally and be able to detach it (use no interface at all), saving cpu cycles and screen real-estate. You can change between any of these usages without any trouble whatsoever.

Proxies

This also lends itself to creation of EoB proxy objects, which connect to another engine as an interface, and then let other interfaces connect to them, either with or without actually showing an interface themselves. This lets programmers add functionality to *ALL* torrent clients that implement EoB all at once. An example of this functionality would be scheduling your upload/download rate limits. If the native engine doesnt support it, you can layer a proxy on top and have that functionality added. Another example would be splitting torrents based on their information to different clients—you could set up a proxy to download with one engine, and seed with another, or set up a proxy to use certain engines to use with certain sites (splitting them automatically based on their announce url), and still manage *all* your torrents on all the engines in one interface (or multiple interfaces to the same joined list.)

Implementations

Currently there are no implementations, but the first will be my own Masterful BT torrent client as an engine, and various interfaces written by me including a CLI interface and a web interface. After I implement it in a few places and smush out the ambiguities and shortcomings, Ill release the specs to the public.

Developer Description

EoB is a client control protocol implemented over TCP, and is designed to be machine architecture, client, interface, and network agnostic. It handles all events for interactions between the interface and engine.