cmds/swarm: now speaks ipfsaddr (.../ipfs...)
Juan Batiz-Benet committed
Feb 1, 2015 at 06:36 UTC
3cd3424900397d9d0a4ff0833696b67519b0088d
1 file changed
+15
-24
core/commands/swarm.go
+15
-24
@@ -4,15 +4,14 @@ import (
4
"bytes"
5
"fmt"
6
"io"
7
- "path"
7
"sort"
8
9
cmds "github.com/jbenet/go-ipfs/commands"
10
peer "github.com/jbenet/go-ipfs/p2p/peer"
11
errors "github.com/jbenet/go-ipfs/util/debugerror"
12
+ iaddr "github.com/jbenet/go-ipfs/util/ipfsaddr"
13
14
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
15
- ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
15
)
16
17
type stringList struct {
@@ -64,7 +63,7 @@ ipfs swarm peers lists the set of peers this node is connected to.
63
for i, c := range conns {
64
pid := c.RemotePeer()
65
addr := c.RemoteMultiaddr()
67
- addrs[i] = fmt.Sprintf("%s/%s", addr, pid.Pretty())
66
+ addrs[i] = fmt.Sprintf("%s/ipfs/%s", addr, pid.Pretty())
67
}
68
69
sort.Sort(sort.StringSlice(addrs))
@@ -78,12 +77,12 @@ ipfs swarm peers lists the set of peers this node is connected to.
77
78
var swarmConnectCmd = &cmds.Command{
79
Helptext: cmds.HelpText{
81
- Tagline: "Open connection to a given peer",
80
+ Tagline: "Open connection to a given address",
81
ShortDescription: `
82
'ipfs swarm connect' opens a connection to a peer address. The address format
83
is an ipfs multiaddr:
84
86
-ipfs swarm connect /ip4/104.131.131.82/tcp/4001/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
85
+ipfs swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
86
`,
87
},
88
Arguments: []cmds.Argument{
@@ -92,7 +91,6 @@ ipfs swarm connect /ip4/104.131.131.82/tcp/4001/QmaCpDMGvV2BGHeYERUEnRQAwe3N8Szb
91
Run: func(req cmds.Request, res cmds.Response) {
92
ctx := context.TODO()
93
95
- log.Debug("ipfs swarm connect")
94
n, err := req.Context().GetNode()
95
if err != nil {
96
res.SetError(err, cmds.ErrNormal)
@@ -146,37 +144,30 @@ func stringListMarshaler(res cmds.Response) (io.Reader, error) {
144
return &buf, nil
145
}
146
149
-// splitAddresses is a function that takes in a slice of string peer addresses
147
+// parseAddresses is a function that takes in a slice of string peer addresses
148
// (multiaddr + peerid) and returns slices of multiaddrs and peerids.
151
-func splitAddresses(addrs []string) (maddrs []ma.Multiaddr, pids []peer.ID, err error) {
152
-
153
- maddrs = make([]ma.Multiaddr, len(addrs))
154
- pids = make([]peer.ID, len(addrs))
155
- for i, addr := range addrs {
156
- a, err := ma.NewMultiaddr(path.Dir(addr))
157
- if err != nil {
158
- return nil, nil, cmds.ClientError("invalid peer address: " + err.Error())
159
- }
160
- id, err := peer.IDB58Decode(path.Base(addr))
149
+func parseAddresses(addrs []string) (iaddrs []iaddr.IPFSAddr, err error) {
150
+ iaddrs = make([]iaddr.IPFSAddr, len(addrs))
151
+ for i, saddr := range addrs {
152
+ iaddrs[i], err = iaddr.ParseString(saddr)
153
if err != nil {
162
- return nil, nil, err
154
+ return nil, cmds.ClientError("invalid peer address: " + err.Error())
155
}
164
- pids[i] = id
165
- maddrs[i] = a
156
}
157
return
158
}
159
160
// peersWithAddresses is a function that takes in a slice of string peer addresses
161
// (multiaddr + peerid) and returns a slice of properly constructed peers
172
-func peersWithAddresses(ps peer.Peerstore, addrs []string) ([]peer.ID, error) {
173
- maddrs, pids, err := splitAddresses(addrs)
162
+func peersWithAddresses(ps peer.Peerstore, addrs []string) (pids []peer.ID, err error) {
163
+ iaddrs, err := parseAddresses(addrs)
164
if err != nil {
165
return nil, err
166
}
167
178
- for i, p := range pids {
179
- ps.AddAddress(p, maddrs[i])
168
+ for _, iaddr := range iaddrs {
169
+ pids = append(pids, iaddr.ID())
170
+ ps.AddAddress(iaddr.ID(), iaddr.Multiaddr())
171
}
172
return pids, nil
173
}