Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var DefaultConfig = Config{ Database: "~/rain/session.db", DataDir: "~/rain/data", DataDirIncludesTorrentID: true, PortBegin: 50000, PortEnd: 60000, MaxOpenFiles: 10240, PEXEnabled: true, ResumeWriteInterval: 30 * time.Second, BlocklistUpdateInterval: 24 * time.Hour, BlocklistUpdateTimeout: 10 * time.Minute, BlocklistEnabledForTrackers: true, BlocklistEnabledForOutgoingConnections: true, BlocklistEnabledForIncomingConnections: true, BlocklistMaxResponseSize: 100 << 20, TorrentAddHTTPTimeout: 30 * time.Second, MaxMetadataSize: 30 << 20, MaxTorrentSize: 10 << 20, MaxPieces: 64 << 10, DNSResolveTimeout: 5 * time.Second, ResumeOnStartup: true, RPCEnabled: true, RPCHost: "127.0.0.1", RPCPort: 7246, RPCShutdownTimeout: 5 * time.Second, TrackerNumWant: 200, TrackerStopTimeout: 5 * time.Second, TrackerMinAnnounceInterval: time.Minute, TrackerHTTPTimeout: 10 * time.Second, TrackerHTTPMaxResponseSize: 2 << 20, TrackerHTTPVerifyTLS: true, DHTEnabled: true, DHTHost: "0.0.0.0", DHTPort: 7246, DHTAnnounceInterval: 30 * time.Minute, DHTMinAnnounceInterval: time.Minute, DHTBootstrapNodes: []string{ "router.bittorrent.com:6881", "dht.transmissionbt.com:6881", "router.utorrent.com:6881", "dht.libtorrent.org:25401", "dht.aelitis.com:6881", }, UnchokedPeers: 3, OptimisticUnchokedPeers: 1, MaxRequestsIn: 250, MaxRequestsOut: 250, DefaultRequestsOut: 50, RequestTimeout: 20 * time.Second, EndgameMaxDuplicateDownloads: 20, MaxPeerDial: 80, MaxPeerAccept: 20, ParallelMetadataDownloads: 2, PeerConnectTimeout: 5 * time.Second, PeerHandshakeTimeout: 10 * time.Second, PieceReadTimeout: 30 * time.Second, MaxPeerAddresses: 2000, AllowedFastSet: 10, ReadCacheBlockSize: 128 << 10, ReadCacheSize: 256 << 20, ReadCacheTTL: 1 * time.Minute, ParallelReads: 1, ParallelWrites: 1, WriteCacheSize: 1 << 30, WebseedDialTimeout: 10 * time.Second, WebseedTLSHandshakeTimeout: 10 * time.Second, WebseedResponseHeaderTimeout: 10 * time.Second, WebseedResponseBodyReadTimeout: 10 * time.Second, WebseedRetryInterval: time.Minute, WebseedVerifyTLS: true, WebseedMaxSources: 10, WebseedMaxDownloads: 4, Debug: true, }
DefaultConfig for Session. Do not pass zero value Config to NewSession. Copy this struct and modify instead.
Functions ¶
func DisableLogging ¶
func DisableLogging()
DisableLogging disables all log messages printed to console. This function needs to be called before creating a Session.
Types ¶
type AddTorrentOptions ¶
type AddTorrentOptions struct {
// ID uniquely identifies the torrent in Session.
// If empty, a random ID is generated.
ID string
// Do not start torrent automatically after adding.
Stopped bool
// Stop torrent after all pieces are downloaded.
StopAfterDownload bool
//data dir
DataDir string
}
AddTorrentOptions contains options for adding a new torrent.
type AnnounceError ¶
type AnnounceError struct {
// contains filtered or unexported fields
}
AnnounceError is the error returned from announce response to a tracker.
func (*AnnounceError) Error ¶
func (e *AnnounceError) Error() string
Contains the humanized version of error.
func (*AnnounceError) Unknown ¶
func (e *AnnounceError) Unknown() bool
Unknown returns true if the error is unexpected. Expected errors are tracker errors, network errors and DNS errors.
func (*AnnounceError) Unwrap ¶
func (e *AnnounceError) Unwrap() error
Unwrap returns the underlying error object.
type Config ¶
type Config struct {
//add
LibP2pPort int
LibP2pBootStrap []string
LibP2pHandShake time.Duration
LipP2pRandSeed int64
LibP2pUser string
Debug bool
// Database file to save resume data.
Database string
// DataDir is where files are downloaded.
DataDir string
// If true, torrent files are saved into <data_dir>/<torrent_id>/<torrent_name>.
// Useful if downloading the same torrent from multiple sources.
DataDirIncludesTorrentID bool
// 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
// Resume data (bitfield & stats) are saved to disk at interval to keep IO lower.
ResumeWriteInterval time.Duration
// Peer id is prefixed with this string. See BEP 20. Remaining bytes of peer id will be randomized.
// Only applies to private torrents.
PrivatePeerIDPrefix string
// Client version that is sent in BEP 10 handshake message.
// Only applies to private torrents.
PrivateExtensionHandshakeClientVersion string
// URL to the blocklist file in CIDR format.
BlocklistURL string
// When to refresh blocklist
BlocklistUpdateInterval time.Duration
// HTTP timeout for downloading blocklist
BlocklistUpdateTimeout time.Duration
// Do not contact tracker if it's IP is blocked
BlocklistEnabledForTrackers bool
// Do not connect to peer if it's IP is blocked
BlocklistEnabledForOutgoingConnections bool
// Do not accept connections from peer if it's IP is blocked
BlocklistEnabledForIncomingConnections bool
// Do not accept response larger than this size
BlocklistMaxResponseSize int64
// Time to wait when adding torrent with AddURI().
TorrentAddHTTPTimeout time.Duration
// Maximum allowed size to be received by metadata extension.
MaxMetadataSize uint
// Maximum allowed size to be read when adding torrent.
MaxTorrentSize uint
// Maximum allowed number of pieces in a torrent.
MaxPieces uint32
// Time to wait when resolving host names for trackers and peers.
DNSResolveTimeout time.Duration
// Global download speed limit in KB/s.
SpeedLimitDownload int64
// Global upload speed limit in KB/s.
SpeedLimitUpload int64
// Start torrent automatically if it was running when previous session was closed.
ResumeOnStartup bool
// Enable RPC server
RPCEnabled bool
// 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.
DHTHost 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
// Known routers to bootstrap local DHT node.
DHTBootstrapNodes []string
// 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.
// Only applies to private torrents.
TrackerHTTPPrivateUserAgent string
// Max number of bytes in a tracker response.
TrackerHTTPMaxResponseSize uint
// Check and validate TLS ceritificates.
TrackerHTTPVerifyTLS bool
// Number of unchoked peers.
UnchokedPeers int
// Number of optimistic unchoked peers.
OptimisticUnchokedPeers int
// Max number of blocks allowed to be queued without dropping any.
MaxRequestsIn int
// Max number of blocks requested from a peer but not received yet.
// `rreq` value from extended handshake cannot exceed this limit.
MaxRequestsOut int
// Number of bloks requested from peer if it does not send `rreq` value in extended handshake.
DefaultRequestsOut 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
EndgameMaxDuplicateDownloads int
// Max number of outgoing connections to dial
MaxPeerDial int
// Max number of incoming connections to accept
MaxPeerAccept 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 PieceReadTimeout, the connection is closed.
PieceReadTimeout time.Duration
// Max number of peer addresses to keep in connect queue.
MaxPeerAddresses int
// Number of allowed-fast messages to send after handshake.
AllowedFastSet int
// Number of bytes to read when a piece is requested by a peer.
ReadCacheBlockSize int64
// Number of cached bytes for piece read requests.
ReadCacheSize int64
// Read bytes for a piece part expires after duration.
ReadCacheTTL time.Duration
// Number of read operations to do in parallel.
ParallelReads uint
// Number of write operations to do in parallel.
ParallelWrites uint
// Number of bytes allocated in memory for downloading piece data.
WriteCacheSize int64
// 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
// TCP connect timeout for WebSeed sources
WebseedDialTimeout time.Duration
// TLS handshake timeout for WebSeed sources
WebseedTLSHandshakeTimeout time.Duration
// HTTP header timeout for WebSeed sources
WebseedResponseHeaderTimeout time.Duration
// HTTP body read timeout for Webseed sources
WebseedResponseBodyReadTimeout time.Duration
// Retry interval for restarting failed downloads
WebseedRetryInterval time.Duration
// Verify TLS certificate for WebSeed URLs
WebseedVerifyTLS bool
// Limit the number of WebSeed sources in torrent.
WebseedMaxSources int
// Number of maximum simulateous downloads from WebSeed sources.
WebseedMaxDownloads int
}
Config for Session.
type InputError ¶
type InputError struct {
// contains filtered or unexported fields
}
InputError is returned from Session.AddTorrent and Session.AddURI methods when there is problem with the input.
func (*InputError) Unwrap ¶
func (e *InputError) Unwrap() error
Unwrap returns the underlying error.
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
Session contains torrents, DHT node, caches and other data structures shared by multiple torrents.
func NewSession ¶
NewSession creates a new Session for downloading and seeding torrents. Returned session must be closed after use.
func (*Session) AddFileId ¶
func (s *Session) AddFileId(uri string, opt *AddTorrentOptions) (*torrent, error)
func (*Session) CreateFile ¶
func (*Session) RemoveData ¶
func (s *Session) RemoveData()
type Stats ¶
type Stats struct {
// Info hash of torrent.
InfoHash [20]byte
// Status of the torrent.
Status Status
// Contains the error message if torrent is stopped unexpectedly.
Error error
Pieces struct {
// Number of pieces that are checked when torrent is in "Verifying" state.
Checked uint32
// Number of pieces that we are downloaded successfully and verivied by hash check.
Have uint32
// Number of pieces that need to be downloaded. Some of them may be being downloaded.
// Pieces that are being downloaded may counted as missing until they are downloaded and passed hash check.
Missing uint32
// Number of unique pieces available on swarm.
// If this number is less then the number of total pieces, the download may never finish.
Available uint32
// Number of total pieces in torrent.
Total uint32
}
Bytes struct {
// Bytes that are downloaded and passed hash check.
Completed 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 = Completed + 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
// Bytes allocated on storage.
Allocated 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
}
Addresses struct {
// Total number of peer addresses that are ready to be connected.
Total int
// Peers found via trackers.
Tracker int
// Peers found via DHT node.
DHT int
// Peers found via peer exchange.
PEX 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
// Length of a single piece.
PieceLength uint32
// Duration while the torrent is in Seeding status.
SeededFor time.Duration
// Speed is calculated as 1-minute moving average.
Speed struct {
// Downloaded bytes per second.
Download int
// Uploaded bytes per second.
Upload int
}
// Time remaining to complete download. nil value means infinity.
ETA *time.Duration
}
Stats contains statistics about Torrent.
type Status ¶
type Status int
Status of a Torrent
const ( // Stopped indicates that the torrent is not running. // No peers are connected and files are not open. Stopped Status = iota // DownloadingMetadata indicates that the torrent is in the process of downloadin metadata. // When torrent is added via magnet link, torrent has no metadata and it needs to be downloaded from peers before starting to download files. DownloadingMetadata // Allocating indicates that the torrent is in the process of creating/opening files on the disk. Allocating // Verifying indicates that the torrent has already some files on disk and it is checking the validity of pieces by comparing hashes. Verifying // Downloading the torrent's files from peers. Downloading // Seeding the torrent. All pieces/files are downloaded. Seeding // Stopping the torrent. This is the status after Stop() is called. All peers are disconnected and files are closed. A stop event sent to all trackers. After trackers responded the torrent switches into Stopped state. Stopping )
Source Files
¶
- config.go
- error.go
- rlimit.go
- session.go
- session_add.go
- session_handle.go
- session_healthcheck.go
- session_load.go
- session_metrics.go
- session_user.go
- torrent.go
- torrent_allocation.go
- torrent_close.go
- torrent_commands.go
- torrent_infodownload.go
- torrent_messagehandler.go
- torrent_metadataextension.go
- torrent_peer.go
- torrent_pieces.go
- torrent_run.go
- torrent_start.go
- torrent_stats.go
- torrent_status.go
- torrent_stop.go
- torrent_verification.go
- torrent_write.go