diff --git a/peer/peer.go b/peer/peer.go index e69de29bb..68297dafe 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -0,0 +1,31 @@ +package peer + +import ( + ma "github.com/jbenet/go-multiaddr" + mh "github.com/jbenet/go-multihash" +) + +type Peer struct { + Id mh.Multihash + Addresses []*ma.Multiaddr +} + +func (p *Peer) AddAddress(a *ma.Multiaddr) { + p.Addresses = append(p.Addresses, a) +} + +func (p *Peer) NetAddress(n string) *ma.Multiaddr { + for _, a := range p.Addresses { + ps, err := a.Protocols() + if err != nil { + continue // invalid addr + } + + for _, p := range ps { + if p.Name == n { + return a + } + } + } + return nil +} diff --git a/peer/peer_test.go b/peer/peer_test.go new file mode 100644 index 000000000..c42713cb3 --- /dev/null +++ b/peer/peer_test.go @@ -0,0 +1,42 @@ +package peer + +import ( + ma "github.com/jbenet/go-multiaddr" + mh "github.com/jbenet/go-multihash" + "testing" +) + +func TestNetAddress(t *testing.T) { + + tcp, err := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/1234") + if err != nil { + t.Error(err) + return + } + + udp, err := ma.NewMultiaddr("/ip4/127.0.0.1/udp/2345") + if err != nil { + t.Error(err) + return + } + + mh, err := mh.FromHexString("11140beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33") + if err != nil { + t.Error(err) + return + } + + p := Peer{Id: mh} + p.AddAddress(tcp) + p.AddAddress(udp) + + tcp2 := p.NetAddress("tcp") + if tcp2 != tcp { + t.Error("NetAddress lookup failed", tcp, tcp2) + } + + udp2 := p.NetAddress("udp") + if udp2 != udp { + t.Error("NetAddress lookup failed", udp, udp2) + } +}