]> Sergey Matveev's repositories - btrtrc.git/blobdiff - client.go
Use the new firewall callback support in go-libutp
[btrtrc.git] / client.go
index 09226f5452e611ecdee716b96a0e362b2844b053..105d4419b9471adbbaeb413d2bf35f2fe2a46ca4 100644 (file)
--- a/client.go
+++ b/client.go
@@ -220,7 +220,7 @@ func NewClient(cfg *ClientConfig) (cl *Client, err error) {
                }
        }
 
-       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
        }
@@ -249,6 +249,18 @@ func NewClient(cfg *ClientConfig) (cl *Client, err error) {
        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) {
@@ -340,16 +352,23 @@ func (cl *Client) ipIsBlocked(ip net.IP) bool {
        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()
        }
 }