client.go | 10 +++++++--- config.go | 11 +++++++---- diff --git a/client.go b/client.go index a8d93319def3ff36a07efd1ac6db926a02cbba9f..dc2448076a14fa95783cbef253639e882d3b7c01 100644 --- a/client.go +++ b/client.go @@ -248,7 +248,9 @@ cl.onClose = append(cl.onClose, func() { s.Close() }) if peerNetworkEnabled(parseNetworkString(s.Addr().Network()), cl.config) { cl.dialers = append(cl.dialers, s) cl.listeners = append(cl.listeners, s) - go cl.acceptConnections(s) + if cl.config.AcceptPeerConnections { + go cl.acceptConnections(s) + } } } @@ -322,12 +324,14 @@ // Registers a Listener, and starts Accepting on it. You must Close Listeners provided this way // yourself. func (cl *Client) AddListener(l Listener) { cl.listeners = append(cl.listeners, l) - go cl.acceptConnections(l) + if cl.config.AcceptPeerConnections { + go cl.acceptConnections(l) + } } func (cl *Client) firewallCallback(net.Addr) bool { cl.rLock() - block := !cl.wantConns() + block := !cl.wantConns() || !cl.config.AcceptPeerConnections cl.rUnlock() if block { torrent.Add("connections firewalled", 1) diff --git a/config.go b/config.go index b687f05de5426d064167fd528cc04a6093ec3214..b952ca95c5eb138570c208a49a3c0d5c83f04b79 100644 --- a/config.go +++ b/config.go @@ -133,6 +133,8 @@ // Drop peers that are complete if we are also complete and have no use for the peer. This is a // bit of a special case, since a peer could also be useless if they're just not interested, or // we don't intend to obtain all of a torrent's data. DropMutuallyCompletePeers bool + // Whether to accept peer connections at all. + AcceptPeerConnections bool // OnQuery hook func DHTOnQuery func(query *krpc.Msg, source net.Addr) (propagate bool) @@ -180,10 +182,11 @@ HeaderObfuscationPolicy: HeaderObfuscationPolicy{ Preferred: true, RequirePreferred: false, }, - CryptoSelector: mse.DefaultCryptoSelector, - CryptoProvides: mse.AllSupportedCrypto, - ListenPort: 42069, - Extensions: defaultPeerExtensionBytes(), + CryptoSelector: mse.DefaultCryptoSelector, + CryptoProvides: mse.AllSupportedCrypto, + ListenPort: 42069, + Extensions: defaultPeerExtensionBytes(), + AcceptPeerConnections: true, } //cc.ConnTracker.SetNoMaxEntries() //cc.ConnTracker.Timeout = func(conntrack.Entry) time.Duration { return 0 }