提交 30d42f45 作者: Łukasz Magiera

swarm cmd: port to new cmd lib

License: MIT
Signed-off-by: 's avatarŁukasz Magiera <magik6k@gmail.com>
上级 44bab585
package commands package commands
import ( import (
"bytes"
"fmt" "fmt"
"io" "io"
cmds "github.com/ipfs/go-ipfs/commands" cmds "github.com/ipfs/go-ipfs/commands"
e "github.com/ipfs/go-ipfs/core/commands/e"
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit" "gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
logging "gx/ipfs/QmZChCsSt8DctjceaL56Eibc29CVQq4dGKRXC5JRZ6Ppae/go-log" logging "gx/ipfs/QmZChCsSt8DctjceaL56Eibc29CVQq4dGKRXC5JRZ6Ppae/go-log"
...@@ -110,3 +112,23 @@ Outputs event log messages (not other log messages) as they are generated. ...@@ -110,3 +112,23 @@ Outputs event log messages (not other log messages) as they are generated.
res.SetOutput(r) res.SetOutput(r)
}, },
} }
func stringListMarshaler(res cmds.Response) (io.Reader, error) {
v, err := unwrapOutput(res.Output())
if err != nil {
return nil, err
}
list, ok := v.(*stringList)
if !ok {
return nil, e.TypeErr(list, v)
}
buf := new(bytes.Buffer)
for _, s := range list.Strings {
buf.WriteString(s)
buf.WriteString("\n")
}
return buf, nil
}
...@@ -136,7 +136,7 @@ var rootSubcommands = map[string]*cmds.Command{ ...@@ -136,7 +136,7 @@ var rootSubcommands = map[string]*cmds.Command{
"p2p": lgc.NewCommand(P2PCmd), "p2p": lgc.NewCommand(P2PCmd),
"refs": lgc.NewCommand(RefsCmd), "refs": lgc.NewCommand(RefsCmd),
"resolve": ResolveCmd, "resolve": ResolveCmd,
"swarm": lgc.NewCommand(SwarmCmd), "swarm": SwarmCmd,
"tar": lgc.NewCommand(TarCmd), "tar": lgc.NewCommand(TarCmd),
"file": lgc.NewCommand(unixfs.UnixFSCmd), "file": lgc.NewCommand(unixfs.UnixFSCmd),
"update": lgc.NewCommand(ExternalBinary()), "update": lgc.NewCommand(ExternalBinary()),
......
package commands package commands
import ( import (
"bytes"
"errors" "errors"
"fmt" "fmt"
"io" "io"
...@@ -9,18 +8,20 @@ import ( ...@@ -9,18 +8,20 @@ import (
"sort" "sort"
"strings" "strings"
cmds "github.com/ipfs/go-ipfs/commands" "github.com/ipfs/go-ipfs/commands"
e "github.com/ipfs/go-ipfs/core/commands/e" "github.com/ipfs/go-ipfs/core/commands/cmdenv"
repo "github.com/ipfs/go-ipfs/repo" "github.com/ipfs/go-ipfs/core/commands/e"
"github.com/ipfs/go-ipfs/repo"
"github.com/ipfs/go-ipfs/repo/fsrepo" "github.com/ipfs/go-ipfs/repo/fsrepo"
swarm "gx/ipfs/QmPQoCVRHaGD25VffyB7DFV5qP65hFSQJdSDy75P1vYBKe/go-libp2p-swarm" "gx/ipfs/QmPQoCVRHaGD25VffyB7DFV5qP65hFSQJdSDy75P1vYBKe/go-libp2p-swarm"
mafilter "gx/ipfs/QmSMZwvs3n4GBikZ7hKzT17c3bk65FmyZo2JqtJ16swqCv/multiaddr-filter" mafilter "gx/ipfs/QmSMZwvs3n4GBikZ7hKzT17c3bk65FmyZo2JqtJ16swqCv/multiaddr-filter"
cmdkit "gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit" "gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
iaddr "gx/ipfs/QmSzdvo9aPzLj4HXWTcgGAp8N84tZc8LbLmFZFwUb1dpWk/go-ipfs-addr" iaddr "gx/ipfs/QmSzdvo9aPzLj4HXWTcgGAp8N84tZc8LbLmFZFwUb1dpWk/go-ipfs-addr"
config "gx/ipfs/QmVBUpxsHh53rNcufqxMpLAmz37eGyLJUaexDy1W9YkiNk/go-ipfs-config" "gx/ipfs/QmVBUpxsHh53rNcufqxMpLAmz37eGyLJUaexDy1W9YkiNk/go-ipfs-config"
"gx/ipfs/QmXTmUCBtDUrzDYVzASogLiNph7EBuYqEgPL7QoHNMzUnz/go-ipfs-cmds"
ma "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr" ma "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr"
peer "gx/ipfs/QmbNepETomvmXfz1X5pHNFD2QuPqnqi47dTd94QJWSorQ3/go-libp2p-peer" "gx/ipfs/QmbNepETomvmXfz1X5pHNFD2QuPqnqi47dTd94QJWSorQ3/go-libp2p-peer"
pstore "gx/ipfs/QmfAQMFpgDU2U4BXG64qVr8HSiictfWvkSBz7Y2oDj65st/go-libp2p-peerstore" pstore "gx/ipfs/QmfAQMFpgDU2U4BXG64qVr8HSiictfWvkSBz7Y2oDj65st/go-libp2p-peerstore"
inet "gx/ipfs/QmfDPh144WGBqRxZb1TGDHerbMnZATrHZggAPw7putNnBq/go-libp2p-net" inet "gx/ipfs/QmfDPh144WGBqRxZb1TGDHerbMnZATrHZggAPw7putNnBq/go-libp2p-net"
) )
...@@ -64,23 +65,20 @@ var swarmPeersCmd = &cmds.Command{ ...@@ -64,23 +65,20 @@ var swarmPeersCmd = &cmds.Command{
cmdkit.BoolOption("latency", "Also list information about latency to each peer"), cmdkit.BoolOption("latency", "Also list information about latency to each peer"),
cmdkit.BoolOption("direction", "Also list information about the direction of connection"), cmdkit.BoolOption("direction", "Also list information about the direction of connection"),
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
n, err := cmdenv.GetNode(env)
n, err := req.InvocContext().GetNode()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return err
return
} }
verbose, _, _ := req.Option("verbose").Bool() verbose, _ := req.Options["verbose"].(bool)
latency, _, _ := req.Option("latency").Bool() latency, _ := req.Options["latency"].(bool)
streams, _, _ := req.Option("streams").Bool() streams, _ := req.Options["streams"].(bool)
direction, _, _ := req.Option("direction").Bool() direction, _ := req.Options["direction"].(bool)
conns := n.PeerHost.Network().Conns() conns := n.PeerHost.Network().Conns()
var out connInfos var out connInfos
...@@ -125,50 +123,43 @@ var swarmPeersCmd = &cmds.Command{ ...@@ -125,50 +123,43 @@ var swarmPeersCmd = &cmds.Command{
} }
sort.Sort(&out) sort.Sort(&out)
res.SetOutput(&out) return cmds.EmitOnce(res, &out)
}, },
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) { cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error {
v, err := unwrapOutput(res.Output())
if err != nil {
return nil, err
}
ci, ok := v.(*connInfos) ci, ok := v.(*connInfos)
if !ok { if !ok {
return nil, e.TypeErr(ci, v) return e.TypeErr(ci, v)
} }
buf := new(bytes.Buffer)
pipfs := ma.ProtocolWithCode(ma.P_IPFS).Name pipfs := ma.ProtocolWithCode(ma.P_IPFS).Name
for _, info := range ci.Peers { for _, info := range ci.Peers {
ids := fmt.Sprintf("/%s/%s", pipfs, info.Peer) ids := fmt.Sprintf("/%s/%s", pipfs, info.Peer)
if strings.HasSuffix(info.Addr, ids) { if strings.HasSuffix(info.Addr, ids) {
fmt.Fprintf(buf, "%s", info.Addr) fmt.Fprintf(w, "%s", info.Addr)
} else { } else {
fmt.Fprintf(buf, "%s%s", info.Addr, ids) fmt.Fprintf(w, "%s%s", info.Addr, ids)
} }
if info.Latency != "" { if info.Latency != "" {
fmt.Fprintf(buf, " %s", info.Latency) fmt.Fprintf(w, " %s", info.Latency)
} }
if info.Direction != inet.DirUnknown { if info.Direction != inet.DirUnknown {
fmt.Fprintf(buf, " %s", directionString(info.Direction)) fmt.Fprintf(w, " %s", directionString(info.Direction))
} }
fmt.Fprintln(w)
fmt.Fprintln(buf)
for _, s := range info.Streams { for _, s := range info.Streams {
if s.Protocol == "" { if s.Protocol == "" {
s.Protocol = "<no protocol name>" s.Protocol = "<no protocol name>"
} }
fmt.Fprintf(buf, " %s\n", s.Protocol) fmt.Fprintf(w, " %s\n", s.Protocol)
} }
} }
return buf, nil return nil
}, }),
}, },
Type: connInfos{}, Type: connInfos{},
} }
...@@ -237,17 +228,14 @@ var swarmAddrsCmd = &cmds.Command{ ...@@ -237,17 +228,14 @@ var swarmAddrsCmd = &cmds.Command{
"local": swarmAddrsLocalCmd, "local": swarmAddrsLocalCmd,
"listen": swarmAddrsListenCmd, "listen": swarmAddrsListenCmd,
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
n, err := cmdenv.GetNode(env)
n, err := req.InvocContext().GetNode()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return err
return
} }
addrs := make(map[string][]string) addrs := make(map[string][]string)
...@@ -260,18 +248,13 @@ var swarmAddrsCmd = &cmds.Command{ ...@@ -260,18 +248,13 @@ var swarmAddrsCmd = &cmds.Command{
sort.Sort(sort.StringSlice(addrs[s])) sort.Sort(sort.StringSlice(addrs[s]))
} }
res.SetOutput(&addrMap{Addrs: addrs}) return cmds.EmitOnce(res, &addrMap{Addrs: addrs})
}, },
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) { cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error {
v, err := unwrapOutput(res.Output())
if err != nil {
return nil, err
}
m, ok := v.(*addrMap) m, ok := v.(*addrMap)
if !ok { if !ok {
return nil, e.TypeErr(m, v) return e.TypeErr(m, v)
} }
// sort the ids first // sort the ids first
...@@ -281,16 +264,15 @@ var swarmAddrsCmd = &cmds.Command{ ...@@ -281,16 +264,15 @@ var swarmAddrsCmd = &cmds.Command{
} }
sort.Sort(sort.StringSlice(ids)) sort.Sort(sort.StringSlice(ids))
buf := new(bytes.Buffer)
for _, p := range ids { for _, p := range ids {
paddrs := m.Addrs[p] paddrs := m.Addrs[p]
buf.WriteString(fmt.Sprintf("%s (%d)\n", p, len(paddrs))) fmt.Fprintf(w, "%s (%d)\n", p, len(paddrs))
for _, addr := range paddrs { for _, addr := range paddrs {
buf.WriteString("\t" + addr + "\n") fmt.Fprintf(w, "\t"+addr+"\n")
} }
} }
return buf, nil return nil
}, }),
}, },
Type: addrMap{}, Type: addrMap{},
} }
...@@ -305,20 +287,17 @@ var swarmAddrsLocalCmd = &cmds.Command{ ...@@ -305,20 +287,17 @@ var swarmAddrsLocalCmd = &cmds.Command{
Options: []cmdkit.Option{ Options: []cmdkit.Option{
cmdkit.BoolOption("id", "Show peer ID in addresses."), cmdkit.BoolOption("id", "Show peer ID in addresses."),
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
iCtx := req.InvocContext() n, err := cmdenv.GetNode(env)
n, err := iCtx.GetNode()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return err
return
} }
showid, _, _ := req.Option("id").Bool() showid, _ := req.Options["id"].(bool)
id := n.Identity.Pretty() id := n.Identity.Pretty()
var addrs []string var addrs []string
...@@ -330,11 +309,11 @@ var swarmAddrsLocalCmd = &cmds.Command{ ...@@ -330,11 +309,11 @@ var swarmAddrsLocalCmd = &cmds.Command{
addrs = append(addrs, saddr) addrs = append(addrs, saddr)
} }
sort.Sort(sort.StringSlice(addrs)) sort.Sort(sort.StringSlice(addrs))
res.SetOutput(&stringList{addrs}) return cmds.EmitOnce(res, &stringList{addrs})
}, },
Type: stringList{}, Type: stringList{},
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: stringListMarshaler, cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
} }
...@@ -345,24 +324,20 @@ var swarmAddrsListenCmd = &cmds.Command{ ...@@ -345,24 +324,20 @@ var swarmAddrsListenCmd = &cmds.Command{
'ipfs swarm addrs listen' lists all interface addresses the node is listening on. 'ipfs swarm addrs listen' lists all interface addresses the node is listening on.
`, `,
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
n, err := cmdenv.GetNode(env)
n, err := req.InvocContext().GetNode()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return err
return
} }
var addrs []string var addrs []string
maddrs, err := n.PeerHost.Network().InterfaceListenAddresses() maddrs, err := n.PeerHost.Network().InterfaceListenAddresses()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
for _, addr := range maddrs { for _, addr := range maddrs {
...@@ -370,11 +345,11 @@ var swarmAddrsListenCmd = &cmds.Command{ ...@@ -370,11 +345,11 @@ var swarmAddrsListenCmd = &cmds.Command{
} }
sort.Sort(sort.StringSlice(addrs)) sort.Sort(sort.StringSlice(addrs))
res.SetOutput(&stringList{addrs}) return cmds.EmitOnce(res, &stringList{addrs})
}, },
Type: stringList{}, Type: stringList{},
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: stringListMarshaler, cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
} }
...@@ -392,33 +367,27 @@ ipfs swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3 ...@@ -392,33 +367,27 @@ ipfs swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3
Arguments: []cmdkit.Argument{ Arguments: []cmdkit.Argument{
cmdkit.StringArg("address", true, true, "Address of peer to connect to.").EnableStdin(), cmdkit.StringArg("address", true, true, "Address of peer to connect to.").EnableStdin(),
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
ctx := req.Context() n, err := cmdenv.GetNode(env)
n, err := req.InvocContext().GetNode()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
addrs := req.Arguments() addrs := req.Arguments
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return err
return
} }
// FIXME(steb): Nasty // FIXME(steb): Nasty
swrm, ok := n.PeerHost.Network().(*swarm.Swarm) swrm, ok := n.PeerHost.Network().(*swarm.Swarm)
if !ok { if !ok {
res.SetError(fmt.Errorf("peerhost network was not swarm"), cmdkit.ErrNormal) return fmt.Errorf("peerhost network was not swarm")
return
} }
pis, err := peersWithAddresses(addrs) pis, err := peersWithAddresses(addrs)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
output := make([]string, len(pis)) output := make([]string, len(pis))
...@@ -427,18 +396,17 @@ ipfs swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3 ...@@ -427,18 +396,17 @@ ipfs swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3
output[i] = "connect " + pi.ID.Pretty() output[i] = "connect " + pi.ID.Pretty()
err := n.PeerHost.Connect(ctx, pi) err := n.PeerHost.Connect(req.Context, pi)
if err != nil { if err != nil {
res.SetError(fmt.Errorf("%s failure: %s", output[i], err), cmdkit.ErrNormal) return fmt.Errorf("%s failure: %s", output[i], err)
return
} }
output[i] += " success" output[i] += " success"
} }
res.SetOutput(&stringList{output}) return cmds.EmitOnce(res, &stringList{addrs})
}, },
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: stringListMarshaler, cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
Type: stringList{}, Type: stringList{},
} }
...@@ -459,24 +427,21 @@ it will reconnect. ...@@ -459,24 +427,21 @@ it will reconnect.
Arguments: []cmdkit.Argument{ Arguments: []cmdkit.Argument{
cmdkit.StringArg("address", true, true, "Address of peer to disconnect from.").EnableStdin(), cmdkit.StringArg("address", true, true, "Address of peer to disconnect from.").EnableStdin(),
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
n, err := req.InvocContext().GetNode() n, err := cmdenv.GetNode(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
addrs := req.Arguments() addrs := req.Arguments
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return ErrNotOnline
return
} }
iaddrs, err := parseAddresses(addrs) iaddrs, err := parseAddresses(addrs)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
output := make([]string, len(iaddrs)) output := make([]string, len(iaddrs))
...@@ -516,34 +481,14 @@ it will reconnect. ...@@ -516,34 +481,14 @@ it will reconnect.
} }
} }
} }
res.SetOutput(&stringList{output}) return cmds.EmitOnce(res, &stringList{output})
}, },
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: stringListMarshaler, cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
Type: stringList{}, Type: stringList{},
} }
func stringListMarshaler(res cmds.Response) (io.Reader, error) {
v, err := unwrapOutput(res.Output())
if err != nil {
return nil, err
}
list, ok := v.(*stringList)
if !ok {
return nil, e.TypeErr(list, v)
}
buf := new(bytes.Buffer)
for _, s := range list.Strings {
buf.WriteString(s)
buf.WriteString("\n")
}
return buf, nil
}
// parseAddresses is a function that takes in a slice of string peer addresses // parseAddresses is a function that takes in a slice of string peer addresses
// (multiaddr + peerid) and returns slices of multiaddrs and peerids. // (multiaddr + peerid) and returns slices of multiaddrs and peerids.
func parseAddresses(addrs []string) (iaddrs []iaddr.IPFSAddr, err error) { func parseAddresses(addrs []string) (iaddrs []iaddr.IPFSAddr, err error) {
...@@ -608,38 +553,34 @@ Filters default to those specified under the "Swarm.AddrFilters" config key. ...@@ -608,38 +553,34 @@ Filters default to those specified under the "Swarm.AddrFilters" config key.
"add": swarmFiltersAddCmd, "add": swarmFiltersAddCmd,
"rm": swarmFiltersRmCmd, "rm": swarmFiltersRmCmd,
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
n, err := req.InvocContext().GetNode() n, err := cmdenv.GetNode(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrNormal) return ErrNotOnline
return
} }
// FIXME(steb) // FIXME(steb)
swrm, ok := n.PeerHost.Network().(*swarm.Swarm) swrm, ok := n.PeerHost.Network().(*swarm.Swarm)
if !ok { if !ok {
res.SetError(errors.New("failed to cast network to swarm network"), cmdkit.ErrNormal) return errors.New("failed to cast network to swarm network")
return
} }
var output []string var output []string
for _, f := range swrm.Filters.Filters() { for _, f := range swrm.Filters.Filters() {
s, err := mafilter.ConvertIPNet(f) s, err := mafilter.ConvertIPNet(f)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
output = append(output, s) output = append(output, s)
} }
res.SetOutput(&stringList{output}) return cmds.EmitOnce(res, &stringList{output})
}, },
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: stringListMarshaler, cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
Type: stringList{}, Type: stringList{},
} }
...@@ -656,63 +597,54 @@ add your filters to the ipfs config file. ...@@ -656,63 +597,54 @@ add your filters to the ipfs config file.
Arguments: []cmdkit.Argument{ Arguments: []cmdkit.Argument{
cmdkit.StringArg("address", true, true, "Multiaddr to filter.").EnableStdin(), cmdkit.StringArg("address", true, true, "Multiaddr to filter.").EnableStdin(),
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
n, err := req.InvocContext().GetNode() n, err := cmdenv.GetNode(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrNormal) return ErrNotOnline
return
} }
// FIXME(steb) // FIXME(steb)
swrm, ok := n.PeerHost.Network().(*swarm.Swarm) swrm, ok := n.PeerHost.Network().(*swarm.Swarm)
if !ok { if !ok {
res.SetError(errors.New("failed to cast network to swarm network"), cmdkit.ErrNormal) return errors.New("failed to cast network to swarm network")
return
} }
if len(req.Arguments()) == 0 { if len(req.Arguments) == 0 {
res.SetError(errors.New("no filters to add"), cmdkit.ErrClient) return errors.New("no filters to add")
return
} }
r, err := fsrepo.Open(req.InvocContext().ConfigRoot) r, err := fsrepo.Open(env.(*commands.Context).ConfigRoot)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
defer r.Close() defer r.Close()
cfg, err := r.Config() cfg, err := r.Config()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
for _, arg := range req.Arguments() { for _, arg := range req.Arguments {
mask, err := mafilter.NewMask(arg) mask, err := mafilter.NewMask(arg)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
swrm.Filters.AddDialFilter(mask) swrm.Filters.AddDialFilter(mask)
} }
added, err := filtersAdd(r, cfg, req.Arguments()) added, err := filtersAdd(r, cfg, req.Arguments)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(&stringList{added}) return cmds.EmitOnce(res, &stringList{added})
}, },
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: stringListMarshaler, cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
Type: stringList{}, Type: stringList{},
} }
...@@ -729,37 +661,32 @@ remove your filters from the ipfs config file. ...@@ -729,37 +661,32 @@ remove your filters from the ipfs config file.
Arguments: []cmdkit.Argument{ Arguments: []cmdkit.Argument{
cmdkit.StringArg("address", true, true, "Multiaddr filter to remove.").EnableStdin(), cmdkit.StringArg("address", true, true, "Multiaddr filter to remove.").EnableStdin(),
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
n, err := req.InvocContext().GetNode() n, err := cmdenv.GetNode(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if n.PeerHost == nil { if n.PeerHost == nil {
res.SetError(ErrNotOnline, cmdkit.ErrNormal) return ErrNotOnline
return
} }
swrm, ok := n.PeerHost.Network().(*swarm.Swarm) swrm, ok := n.PeerHost.Network().(*swarm.Swarm)
if !ok { if !ok {
res.SetError(errors.New("failed to cast network to swarm network"), cmdkit.ErrNormal) return errors.New("failed to cast network to swarm network")
return
} }
r, err := fsrepo.Open(req.InvocContext().ConfigRoot) r, err := fsrepo.Open(env.(*commands.Context).ConfigRoot)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
defer r.Close() defer r.Close()
cfg, err := r.Config() cfg, err := r.Config()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if req.Arguments()[0] == "all" || req.Arguments()[0] == "*" { if req.Arguments[0] == "all" || req.Arguments[0] == "*" {
fs := swrm.Filters.Filters() fs := swrm.Filters.Filters()
for _, f := range fs { for _, f := range fs {
swrm.Filters.Remove(f) swrm.Filters.Remove(f)
...@@ -767,35 +694,30 @@ remove your filters from the ipfs config file. ...@@ -767,35 +694,30 @@ remove your filters from the ipfs config file.
removed, err := filtersRemoveAll(r, cfg) removed, err := filtersRemoveAll(r, cfg)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(&stringList{removed}) return cmds.EmitOnce(res, &stringList{removed})
return
} }
for _, arg := range req.Arguments() { for _, arg := range req.Arguments {
mask, err := mafilter.NewMask(arg) mask, err := mafilter.NewMask(arg)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
swrm.Filters.Remove(mask) swrm.Filters.Remove(mask)
} }
removed, err := filtersRemove(r, cfg, req.Arguments()) removed, err := filtersRemove(r, cfg, req.Arguments)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(&stringList{removed}) return cmds.EmitOnce(res, &stringList{removed})
}, },
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: stringListMarshaler, cmds.Text: cmds.MakeEncoder(stringListEncoder),
}, },
Type: stringList{}, Type: stringList{},
} }
......
...@@ -4,8 +4,8 @@ import ( ...@@ -4,8 +4,8 @@ import (
"context" "context"
"time" "time"
peer "gx/ipfs/QmQsErDt8Qgw1XrsXf2BpEzDgGWtB1YLsTAARBup5b6B9W/go-libp2p-peer"
ma "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr" ma "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr"
peer "gx/ipfs/QmbNepETomvmXfz1X5pHNFD2QuPqnqi47dTd94QJWSorQ3/go-libp2p-peer"
) )
// PeerInfo contains information about a peer // PeerInfo contains information about a peer
......
...@@ -8,12 +8,12 @@ import ( ...@@ -8,12 +8,12 @@ import (
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface" coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
peer "gx/ipfs/QmQsErDt8Qgw1XrsXf2BpEzDgGWtB1YLsTAARBup5b6B9W/go-libp2p-peer" swarm "gx/ipfs/QmPQoCVRHaGD25VffyB7DFV5qP65hFSQJdSDy75P1vYBKe/go-libp2p-swarm"
iaddr "gx/ipfs/QmSzdvo9aPzLj4HXWTcgGAp8N84tZc8LbLmFZFwUb1dpWk/go-ipfs-addr"
ma "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr" ma "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr"
net "gx/ipfs/QmZNJyx9GGCX4GeuHnLB8fxaxMLs4MjTjHokxfQcCd6Nve/go-libp2p-net" peer "gx/ipfs/QmbNepETomvmXfz1X5pHNFD2QuPqnqi47dTd94QJWSorQ3/go-libp2p-peer"
pstore "gx/ipfs/Qmda4cPRvSRyox3SqgJN6DfSZGU5TtHufPTp9uXjFj71X6/go-libp2p-peerstore" pstore "gx/ipfs/QmfAQMFpgDU2U4BXG64qVr8HSiictfWvkSBz7Y2oDj65st/go-libp2p-peerstore"
swarm "gx/ipfs/QmeDpqUwwdye8ABKVMPXKuWwPVURFdqTqssbTUB39E2Nwd/go-libp2p-swarm" net "gx/ipfs/QmfDPh144WGBqRxZb1TGDHerbMnZATrHZggAPw7putNnBq/go-libp2p-net"
iaddr "gx/ipfs/QmePSRaGafvmURQwQkHPDBJsaGwKXC1WpBBHVCQxdr8FPn/go-ipfs-addr"
) )
type SwarmAPI struct { type SwarmAPI struct {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论