}
}
- cl.conns, err = listenAll(cl.enabledPeerNetworks(), cl.config.ListenHost, cl.config.ListenPort, cl.config.ProxyURL)
+ cl.conns, err = listenAll(cl.enabledPeerNetworks(), cl.config.ListenHost, cl.config.ListenPort, cl.config.ProxyURL, cl.firewallCallback)
if err != nil {
return
}
return
}
+func (cl *Client) firewallCallback(net.Addr) bool {
+ cl.rLock()
+ block := !cl.wantConns()
+ cl.rUnlock()
+ if block {
+ torrent.Add("connections firewalled", 1)
+ } else {
+ torrent.Add("connections not firewalled", 1)
+ }
+ return block
+}
+
func (cl *Client) enabledPeerNetworks() (ns []string) {
for _, n := range allPeerNetworks {
if peerNetworkEnabled(n, cl.config) {
return blocked
}
+func (cl *Client) wantConns() bool {
+ for _, t := range cl.torrents {
+ if t.wantConns() {
+ return true
+ }
+ }
+ return false
+}
+
func (cl *Client) waitAccept() {
for {
- for _, t := range cl.torrents {
- if t.wantConns() {
- return
- }
- }
if cl.closed.IsSet() {
return
}
+ if cl.wantConns() {
+ return
+ }
cl.event.Wait()
}
}