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
+}