@cryptotaxi247 / kubo / commits / a321d8867

added peer with multihash multiaddrs

Juan Batiz-Benet committed Jul 4, 2014 at 12:22 UTC a321d8867e56a7c3a16a9922c01d12b2f46e3393
2 files changed +73
peer/peer.go
+31
@@ -0,0 +1,31 @@
1 +package peer
2 +
3 +import (
4 + ma "github.com/jbenet/go-multiaddr"
5 + mh "github.com/jbenet/go-multihash"
6 +)
7 +
8 +type Peer struct {
9 + Id mh.Multihash
10 + Addresses []*ma.Multiaddr
11 +}
12 +
13 +func (p *Peer) AddAddress(a *ma.Multiaddr) {
14 + p.Addresses = append(p.Addresses, a)
15 +}
16 +
17 +func (p *Peer) NetAddress(n string) *ma.Multiaddr {
18 + for _, a := range p.Addresses {
19 + ps, err := a.Protocols()
20 + if err != nil {
21 + continue // invalid addr
22 + }
23 +
24 + for _, p := range ps {
25 + if p.Name == n {
26 + return a
27 + }
28 + }
29 + }
30 + return nil
31 +}
peer/peer_test.go new
+42
@@ -0,0 +1,42 @@
1 +package peer
2 +
3 +import (
4 + ma "github.com/jbenet/go-multiaddr"
5 + mh "github.com/jbenet/go-multihash"
6 + "testing"
7 +)
8 +
9 +func TestNetAddress(t *testing.T) {
10 +
11 + tcp, err := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/1234")
12 + if err != nil {
13 + t.Error(err)
14 + return
15 + }
16 +
17 + udp, err := ma.NewMultiaddr("/ip4/127.0.0.1/udp/2345")
18 + if err != nil {
19 + t.Error(err)
20 + return
21 + }
22 +
23 + mh, err := mh.FromHexString("11140beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33")
24 + if err != nil {
25 + t.Error(err)
26 + return
27 + }
28 +
29 + p := Peer{Id: mh}
30 + p.AddAddress(tcp)
31 + p.AddAddress(udp)
32 +
33 + tcp2 := p.NetAddress("tcp")
34 + if tcp2 != tcp {
35 + t.Error("NetAddress lookup failed", tcp, tcp2)
36 + }
37 +
38 + udp2 := p.NetAddress("udp")
39 + if udp2 != udp {
40 + t.Error("NetAddress lookup failed", udp, udp2)
41 + }
42 +}