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