github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/p2p/net/swarm/swarm_addr.go (about)

     1  package swarm
     2  
     3  import (
     4  	conn "github.com/ipfs/go-ipfs/p2p/net/conn"
     5  	addrutil "github.com/ipfs/go-ipfs/p2p/net/swarm/addr"
     6  
     7  	ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
     8  )
     9  
    10  // ListenAddresses returns a list of addresses at which this swarm listens.
    11  func (s *Swarm) ListenAddresses() []ma.Multiaddr {
    12  	listeners := s.swarm.Listeners()
    13  	addrs := make([]ma.Multiaddr, 0, len(listeners))
    14  	for _, l := range listeners {
    15  		if l2, ok := l.NetListener().(conn.Listener); ok {
    16  			addrs = append(addrs, l2.Multiaddr())
    17  		}
    18  	}
    19  	return addrs
    20  }
    21  
    22  // InterfaceListenAddresses returns a list of addresses at which this swarm
    23  // listens. It expands "any interface" addresses (/ip4/0.0.0.0, /ip6/::) to
    24  // use the known local interfaces.
    25  func (s *Swarm) InterfaceListenAddresses() ([]ma.Multiaddr, error) {
    26  	return addrutil.ResolveUnspecifiedAddresses(s.ListenAddresses(), nil)
    27  }
    28  
    29  // checkNATWarning checks if our observed addresses differ. if so,
    30  // informs the user that certain things might not work yet
    31  func checkNATWarning(s *Swarm, observed ma.Multiaddr, expected ma.Multiaddr) {
    32  	listen, err := s.InterfaceListenAddresses()
    33  	if err != nil {
    34  		log.Debugf("Error retrieving swarm.InterfaceListenAddresses: %s", err)
    35  		return
    36  	}
    37  
    38  	addrutil.CheckNATWarning(observed, expected, listen)
    39  }