-func (cfg *Config) setDefaults() {
- if cfg.HTTP == nil {
- cfg.HTTP = DefaultHTTPClient
- }
- if cfg.HTTPUserAgent == "" {
- cfg.HTTPUserAgent = DefaultHTTPUserAgent
- }
- if cfg.ExtendedHandshakeClientVersion == "" {
- cfg.ExtendedHandshakeClientVersion = "go.torrent dev 20150624"
- }
- if cfg.Bep20 == "" {
- cfg.Bep20 = "-GT0001-"
- }
- if cfg.NominalDialTimeout == 0 {
- cfg.NominalDialTimeout = 30 * time.Second
- }
- if cfg.MinDialTimeout == 0 {
- cfg.MinDialTimeout = 5 * time.Second
- }
- if cfg.EstablishedConnsPerTorrent == 0 {
- cfg.EstablishedConnsPerTorrent = 50
- }
- if cfg.HalfOpenConnsPerTorrent == 0 {
- cfg.HalfOpenConnsPerTorrent = (cfg.EstablishedConnsPerTorrent + 1) / 2
- }
- if cfg.TorrentPeersHighWater == 0 {
- // Memory and freshness are the concern here.
- cfg.TorrentPeersHighWater = 500
- }
- if cfg.TorrentPeersLowWater == 0 {
- cfg.TorrentPeersLowWater = 2 * cfg.HalfOpenConnsPerTorrent
- }
- if cfg.HandshakesTimeout == 0 {
- cfg.HandshakesTimeout = 20 * time.Second
+func NewDefaultClientConfig() *ClientConfig {
+ cc := &ClientConfig{
+ HTTPUserAgent: version.DefaultHttpUserAgent,
+ ExtendedHandshakeClientVersion: version.DefaultExtendedHandshakeClientVersion,
+ Bep20: version.DefaultBep20Prefix,
+ UpnpID: version.DefaultUpnpId,
+ NominalDialTimeout: 20 * time.Second,
+ MinDialTimeout: 3 * time.Second,
+ EstablishedConnsPerTorrent: 50,
+ HalfOpenConnsPerTorrent: 25,
+ TotalHalfOpenConns: 100,
+ TorrentPeersHighWater: 500,
+ TorrentPeersLowWater: 50,
+ HandshakesTimeout: 4 * time.Second,
+ KeepAliveTimeout: time.Minute,
+ MaxAllocPeerRequestDataPerConn: 1 << 20,
+ ListenHost: func(string) string { return "" },
+ UploadRateLimiter: unlimited,
+ DownloadRateLimiter: unlimited,
+ DisableAcceptRateLimiting: true,
+ DropMutuallyCompletePeers: true,
+ HeaderObfuscationPolicy: HeaderObfuscationPolicy{
+ Preferred: true,
+ RequirePreferred: false,
+ },
+ CryptoSelector: mse.DefaultCryptoSelector,
+ CryptoProvides: mse.AllSupportedCrypto,
+ ListenPort: 42069,
+ Extensions: defaultPeerExtensionBytes(),
+ AcceptPeerConnections: true,
+ MaxUnverifiedBytes: 64 << 20,
+ DialRateLimiter: rate.NewLimiter(10, 10),
+ PieceHashersPerTorrent: 2,