From 76ea093a0448c6aff76e2723e602e5cf82b3a039 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Tue, 4 Nov 2014 23:51:11 -0800 Subject: [PATCH 1/3] multiaddr conversion tool --- multiaddr.go | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 multiaddr.go diff --git a/multiaddr.go b/multiaddr.go new file mode 100644 index 0000000..3fb6137 --- /dev/null +++ b/multiaddr.go @@ -0,0 +1,65 @@ +package main + +import ( + "encoding/hex" + "flag" + "fmt" + "os" + + ma "github.com/jbenet/go-multiaddr" +) + +var usage = `multiaddr conversion +usage: multiaddr [fmt] <>` + +var formats = []string{"string", "bytes", "hex", "raw"} +var format string + +func init() { + flag.Usage = func() { + fmt.Fprintf(os.Stderr, "usage: %s \n\nFlags:\n", os.Args[0]) + flag.PrintDefaults() + } + + usage := fmt.Sprintf("output format, one of: %v", formats) + flag.StringVar(&format, "format", "string", usage) + flag.StringVar(&format, "f", "string", usage+" (shorthand)") +} + +func main() { + flag.Parse() + args := flag.Args() + if len(args) != 1 { + die("error: can only take one argument") + } + + m, err := ma.NewMultiaddr(args[0]) + if err != nil { + die(err) + } + + fmt.Println(outfmt(m)) +} + +func outfmt(m ma.Multiaddr) string { + switch format { + case "string": + return m.String() + case "bytes": + return fmt.Sprintf("%v", m.Bytes()) + case "raw": + return string(m.Bytes()) + case "hex": + return "0x" + hex.EncodeToString(m.Bytes()) + } + + die("error: invalid format", format) + return "" +} + +func die(v ...interface{}) { + fmt.Fprint(os.Stderr, v...) + fmt.Fprint(os.Stderr, "\n") + flag.Usage() + os.Exit(-1) +} From 29a9c6f145ce22a3d36d0f163520f9e76acdb331 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Wed, 5 Nov 2014 00:38:21 -0800 Subject: [PATCH 2/3] net: added InterfaceMultiaddrs --- multiaddr.go | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/multiaddr.go b/multiaddr.go index 3fb6137..df57238 100644 --- a/multiaddr.go +++ b/multiaddr.go @@ -7,17 +7,15 @@ import ( "os" ma "github.com/jbenet/go-multiaddr" + manet "github.com/jbenet/go-multiaddr/net" ) -var usage = `multiaddr conversion -usage: multiaddr [fmt] <>` - -var formats = []string{"string", "bytes", "hex", "raw"} +var formats = []string{"string", "bytes", "hex", "slice"} var format string func init() { flag.Usage = func() { - fmt.Fprintf(os.Stderr, "usage: %s \n\nFlags:\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "usage: %s []\n\nFlags:\n", os.Args[0]) flag.PrintDefaults() } @@ -29,8 +27,14 @@ func init() { func main() { flag.Parse() args := flag.Args() - if len(args) != 1 { - die("error: can only take one argument") + if len(args) == 0 { + maddrs, err := manet.InterfaceMultiaddrs() + if err != nil { + die(err) + } + + output(maddrs...) + return } m, err := ma.NewMultiaddr(args[0]) @@ -38,16 +42,22 @@ func main() { die(err) } - fmt.Println(outfmt(m)) + output(m) +} + +func output(ms ...ma.Multiaddr) { + for _, m := range ms { + fmt.Println(outfmt(m)) + } } func outfmt(m ma.Multiaddr) string { switch format { case "string": return m.String() - case "bytes": + case "slice": return fmt.Sprintf("%v", m.Bytes()) - case "raw": + case "bytes": return string(m.Bytes()) case "hex": return "0x" + hex.EncodeToString(m.Bytes()) From c1210ef56d22270e0393179b91c21c27ef598b3a Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Wed, 5 Nov 2014 01:47:13 -0800 Subject: [PATCH 3/3] hide-loopback in tool --- multiaddr.go | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/multiaddr.go b/multiaddr.go index df57238..3262ad5 100644 --- a/multiaddr.go +++ b/multiaddr.go @@ -10,8 +10,10 @@ import ( manet "github.com/jbenet/go-multiaddr/net" ) +// flags var formats = []string{"string", "bytes", "hex", "slice"} var format string +var hideLoopback bool func init() { flag.Usage = func() { @@ -22,27 +24,46 @@ func init() { usage := fmt.Sprintf("output format, one of: %v", formats) flag.StringVar(&format, "format", "string", usage) flag.StringVar(&format, "f", "string", usage+" (shorthand)") + flag.BoolVar(&hideLoopback, "hide-loopback", false, "do not display loopback addresses") } func main() { flag.Parse() args := flag.Args() if len(args) == 0 { - maddrs, err := manet.InterfaceMultiaddrs() - if err != nil { - die(err) - } - - output(maddrs...) - return + output(localAddresses()...) + } else { + output(address(args[0])) } +} - m, err := ma.NewMultiaddr(args[0]) +func localAddresses() []ma.Multiaddr { + maddrs, err := manet.InterfaceMultiaddrs() if err != nil { die(err) } - output(m) + if !hideLoopback { + return maddrs + } + + var maddrs2 []ma.Multiaddr + for _, a := range maddrs { + if !manet.IsIPLoopback(a) { + maddrs2 = append(maddrs2, a) + } + } + + return maddrs2 +} + +func address(addr string) ma.Multiaddr { + m, err := ma.NewMultiaddr(addr) + if err != nil { + die(err) + } + + return m } func output(ms ...ma.Multiaddr) {