-
Notifications
You must be signed in to change notification settings - Fork 2
shaggyone/ruby-tracker
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This gem allows you to add torrent tracker functionality to your site. As well you can use it to make a simple torrent tracker without any site, as I did. At the moment it has several classes and modules. = Torrent::BencodedRecord = The BencodedRecord class (most likely 'll be excluded to external gem) allows you to work with bencoded dictionaties. Its' main difference from its' analogues is hex_digest functionality. If will return the same corrent hex_digest for any element For example the following code will retun info_hash for loaded torrent file: Torrent::BencodedRecord.load(File.read(filename)).info.hex_digest if you use ruby 1.9.x you should set encoding for loaded data. It can be done by using the following code: data = File.load(filename) data = data.force_encoding("ISO-8859-1") if data.respond_to?(:force_encoding) torrent = Torrent::BencodedRecord.load(data) torrent.info.hex_digest = Torrent::PeerInfo == PeerInfo module. Depending on your app you may want do store info about peers in database as ActiveRecord. Or you may want to load then into app's memory (this can be sutable for tiny apps). For example you may create class PeerInfo < ActiveRecord::Base include Torrent::PeerInfoModule attr_accessible :info_hash, :peer_id, :ip, :port, :status, :left, :downloaded, :uploaded act_as_peer_info def self.create_peer(params) self.new(params) end def self.get_peer(params) self.first(:peer_id => params[:peer_id], :info_hash => params[:info_hash]) end def self.find_peers(params) self.all(:info_hash => params[:info_hash]) end . . . . code goes here . . . . end There are plans to implement a super simple way to include it in rails. class PeerInfo < ActiveRecord::Base include Torrent::AciveRecord::PeerInfoModule act_as_peer_info end and create following migration class PeerInfoMigration def up add_peer_info_columns :peer_info end def down remove_peer_info_columns :peer_info end end = Torrent::TorrentDirectory = TorrentDirectory module -- it's main puppose is to tell Tracker if the mentioned torrent is allowed for sharing on the tracker. It has abstract method allowed_torrent? which takes hash of HTTP GET request params, sent by torrent client. (Actually, ajustments shoud be done to the params, before calling this method) and returns true or false, wich shows will the tracker share the torrent or not. For example the following class will tell tracker to share any torrent to any user, who add its' announce url o his torrent file. class PlainTorrentDirectory include Torrent::TorrentDirectory def self.allowed_torrent?(params) true end end = Torrent::Tracker = The main magic is here. It's quite simple in use: def init_tracker @tracker = Torrent::Tracker.new @tracker.torrent_directory = PlainTorrentDirectory @tracker.peer_info_class = Torrent::MemoryPeerInfo end def announce # prepare params params[:ip] ||= request.env['REMOTE_ADDR'] # use params[:ip] ||= request.ip for sinatra render :text => @tracker.announce(params).bencode end
About
A gem that allows you to add torrent tracker to you web app.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published