Documentation
¶
Overview ¶
Package session provides a BitTorrent client implementation that is capable of downlaoding multiple torrents in parallel.
Index ¶
- Variables
- type Config
- type Peer
- type Session
- type Stats
- type Torrent
- func (t *Torrent) CreatedAt() time.Time
- func (t *Torrent) ID() string
- func (t *Torrent) InfoHash() string
- func (t *Torrent) Name() string
- func (t *Torrent) Peers() []Peer
- func (t *Torrent) Port() uint16
- func (t *Torrent) Start() error
- func (t *Torrent) Stats() Stats
- func (t *Torrent) Stop() error
- func (t *Torrent) Trackers() []Tracker
- type TorrentStatus
- type Tracker
- type TrackerStatus
Constants ¶
This section is empty.
Variables ¶
View Source
var DefaultConfig = Config{ Database: "~/rain/session.db", DataDir: "~/rain/data", PortBegin: 50000, PortEnd: 60000, MaxOpenFiles: 1024 * 1024, PEXEnabled: true, BitfieldWriteInterval: 30 * time.Second, StatsWriteInterval: 30 * time.Second, PeerIDPrefix: "-RN" + Version + "-", ExtensionHandshakeClientVersion: "Rain " + Version, BlocklistUpdateInterval: 24 * time.Hour, RPCHost: "127.0.0.1", RPCPort: 7246, RPCShutdownTimeout: 5 * time.Second, TrackerNumWant: 100, TrackerStopTimeout: 5 * time.Second, TrackerMinAnnounceInterval: time.Minute, TrackerHTTPTimeout: 10 * time.Second, TrackerHTTPUserAgent: "Rain/" + Version, DHTEnabled: true, DHTAddress: "0.0.0.0", DHTPort: 7246, DHTAnnounceInterval: 30 * time.Minute, DHTMinAnnounceInterval: time.Minute, UnchokedPeers: 3, OptimisticUnchokedPeers: 1, RequestQueueLength: 50, RequestTimeout: 20 * time.Second, EndgameParallelDownloadsPerPiece: 2, MaxPeerDial: 20, MaxPeerAccept: 20, ParallelPieceDownloads: 10, ParallelMetadataDownloads: 2, PeerConnectTimeout: 5 * time.Second, PeerHandshakeTimeout: 10 * time.Second, PieceTimeout: 30 * time.Second, PeerReadBufferSize: 32 * 1024, MaxPeerAddresses: 2000, PieceReadSize: 256 * 1024, PieceCacheSize: 50 * 256 * 1024, PieceCacheTTL: 5 * time.Minute, }
View Source
var Version = "0.0.0"
Version of client. Set during build. "0.0.0" is the development version.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
// Database file to save resume data.
Database string
// DataDir is where files are downloaded.
DataDir string
// New torrents will be listened at selected port in this range.
PortBegin, PortEnd uint16
// At start, client will set max open files limit to this number. (like "ulimit -n" command)
MaxOpenFiles uint64
// Enable peer exchange protocol.
PEXEnabled bool
// Bitfield is saved to disk for fast resume without hash checking.
// There is an interval to keep IO lower.
BitfieldWriteInterval time.Duration
// Stats are written at interval to reduce write operations.
StatsWriteInterval time.Duration
// Peer id is prefixed with this string. See BEP 20. Remaining bytes of peer id will be randomized.
PeerIDPrefix string
// Client version that is sent in BEP 10 handshake message.
ExtensionHandshakeClientVersion string
// URL to the blocklist file in CIDR format.
BlocklistURL string
// When to refresh blocklist
BlocklistUpdateInterval time.Duration
// Host to listen for RPC server
RPCHost string
// Listen port for RPC server
RPCPort int
// Time to wait for ongoing requests before shutting down RPC HTTP server.
RPCShutdownTimeout time.Duration
// Enable DHT node.
DHTEnabled bool
// DHT node will listen on this IP.
DHTAddress string
// DHT node will listen on this UDP port.
DHTPort uint16
// DHT announce interval
DHTAnnounceInterval time.Duration
// Minimum announce interval when announcing to DHT.
DHTMinAnnounceInterval time.Duration
// Number of peer addresses to request in announce request.
TrackerNumWant int
// Time to wait for announcing stopped event.
// Stopped event is sent to the tracker when torrent is stopped.
TrackerStopTimeout time.Duration
// When the client needs new peer addresses to connect, it ask to the tracker.
// To prevent spamming the tracker an interval is set to wait before the next announce.
TrackerMinAnnounceInterval time.Duration
// Total time to wait for response to be read.
// This includes ConnectTimeout and TLSHandshakeTimeout.
TrackerHTTPTimeout time.Duration
// User agent sent when communicating with HTTP trackers.
TrackerHTTPUserAgent string
// Number of unchoked peers.
UnchokedPeers int
// Number of optimistic unchoked peers.
OptimisticUnchokedPeers int
// Max number of blocks requested from a peer but not received yet
RequestQueueLength int
// Time to wait for a requested block to be received before marking peer as snubbed
RequestTimeout time.Duration
// Max number of running downloads on piece in endgame mode, snubbed and choed peers don't count
EndgameParallelDownloadsPerPiece int
// Max number of outgoing connections to dial
MaxPeerDial int
// Max number of incoming connections to accept
MaxPeerAccept int
// Running piece downloads, snubbed and choked peers don't count
ParallelPieceDownloads int
// Running metadata downloads, snubbed peers don't count
ParallelMetadataDownloads int
// Time to wait for TCP connection to open.
PeerConnectTimeout time.Duration
// Time to wait for BitTorrent handshake to complete.
PeerHandshakeTimeout time.Duration
// When peer has started to send piece block, if it does not send any bytes in PieceTimeout, the connection is closed.
PieceTimeout time.Duration
// Buffer size for messages read from a single peer
PeerReadBufferSize int
// Max number of peer addresses to keep in connect queue.
MaxPeerAddresses int
// Number of bytes to read when a piece is requested by a peer.
PieceReadSize int64
// Number of cached bytes for piece read requests.
PieceCacheSize int64
// Read bytes for a piece part expires after duration.
PieceCacheTTL time.Duration
// When the client want to connect a peer, first it tries to do encrypted handshake.
// If it does not work, it connects to same peer again and does unencrypted handshake.
// This behavior can be changed via this variable.
DisableOutgoingEncryption bool
// Dial only encrypted connections.
ForceOutgoingEncryption bool
// Do not accept unencrypted connections.
ForceIncomingEncryption bool
}
Config for Session.
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
func (*Session) GetTorrent ¶
func (*Session) ListTorrents ¶
func (*Session) RemoveTorrent ¶
type Stats ¶
type Stats struct {
// Status of the torrent.
Status TorrentStatus
// Contains the error message if torrent is stopped unexpectedly.
Error error
Pieces struct {
Have uint32
Missing uint32
Available uint32
Total uint32
}
Bytes struct {
// Bytes that are downloaded and passed hash check.
Complete int64
// The number of bytes that is needed to complete all missing pieces.
Incomplete int64
// The number of total bytes of files in torrent. Total = Complete + Incomplete
Total int64
// Downloaded is the number of bytes downloaded from swarm.
// Because some pieces may be downloaded more than once, this number may be greater than completed bytes.
Downloaded int64
// BytesUploaded is the number of bytes uploaded to the swarm.
Uploaded int64
// Bytes downloaded due to duplicate/non-requested pieces.
Wasted int64
}
Peers struct {
// Number of peers that are connected, handshaked and ready to send and receive messages.
Total int
// Number of peers that have connected to us.
Incoming int
// Number of peers that we have connected to.
Outgoing int
}
Handshakes struct {
// Number of peers that are not handshaked yet.
Total int
// Number of incoming peers in handshake state.
Incoming int
// Number of outgoing peers in handshake state.
Outgoing int
}
// Number of peer addresses that are ready to be connected.
ReadyAddresses int
Downloads struct {
// Number of active piece downloads.
Total int
// Number of pieces that are being downloaded normally.
Running int
// Number of pieces that are being downloaded too slow.
Snubbed int
// Number of piece downloads in choked state.
Choked int
}
MetadataDownloads struct {
// Number of active metadata downloads.
Total int
// Number of peers that uploading too slow.
Snubbed int
// Number of peers that are being downloaded normally.
Running int
}
// Name can change after metadata is downloaded.
Name string
// Is private torrent?
Private bool
// Length of a single piece.
PieceLength uint32
}
Stats contains statistics about Torrent.
type TorrentStatus ¶
type TorrentStatus int
const ( Stopped TorrentStatus = iota DownloadingMetadata Allocating Verifying Downloading Seeding Stopping )
type Tracker ¶
type Tracker struct {
URL string
Status TrackerStatus
Leechers int
Seeders int
Error error
}
type TrackerStatus ¶
type TrackerStatus int
const ( NotContactedYet TrackerStatus = iota Contacting Working NotWorking )
Source Files
¶
Click to show internal directories.
Click to hide internal directories.