go-multiaddr/multiaddr/multiaddr.go

97 lines
1.7 KiB
Go
Raw Normal View History

2014-11-04 23:51:11 -08:00
package main
import (
"encoding/hex"
"flag"
"fmt"
"os"
2016-04-19 12:26:49 -07:00
ma "github.com/jbenet/go-multiaddr"
2014-11-19 13:51:41 -08:00
manet "github.com/jbenet/go-multiaddr-net"
2014-11-04 23:51:11 -08:00
)
2014-11-05 01:47:13 -08:00
// flags
2014-11-05 00:38:21 -08:00
var formats = []string{"string", "bytes", "hex", "slice"}
2014-11-04 23:51:11 -08:00
var format string
2014-11-05 01:47:13 -08:00
var hideLoopback bool
2014-11-04 23:51:11 -08:00
func init() {
flag.Usage = func() {
2014-11-05 00:38:21 -08:00
fmt.Fprintf(os.Stderr, "usage: %s [<multiaddr>]\n\nFlags:\n", os.Args[0])
2014-11-04 23:51:11 -08:00
flag.PrintDefaults()
}
usage := fmt.Sprintf("output format, one of: %v", formats)
flag.StringVar(&format, "format", "string", usage)
flag.StringVar(&format, "f", "string", usage+" (shorthand)")
2014-11-05 01:47:13 -08:00
flag.BoolVar(&hideLoopback, "hide-loopback", false, "do not display loopback addresses")
2014-11-04 23:51:11 -08:00
}
func main() {
flag.Parse()
args := flag.Args()
2014-11-05 00:38:21 -08:00
if len(args) == 0 {
2014-11-05 01:47:13 -08:00
output(localAddresses()...)
} else {
output(address(args[0]))
}
}
func localAddresses() []ma.Multiaddr {
maddrs, err := manet.InterfaceMultiaddrs()
if err != nil {
die(err)
}
if !hideLoopback {
return maddrs
}
2014-11-05 00:38:21 -08:00
2014-11-05 01:47:13 -08:00
var maddrs2 []ma.Multiaddr
for _, a := range maddrs {
if !manet.IsIPLoopback(a) {
maddrs2 = append(maddrs2, a)
}
2014-11-04 23:51:11 -08:00
}
2014-11-05 01:47:13 -08:00
return maddrs2
}
func address(addr string) ma.Multiaddr {
m, err := ma.NewMultiaddr(addr)
2014-11-04 23:51:11 -08:00
if err != nil {
die(err)
}
2014-11-05 01:47:13 -08:00
return m
2014-11-05 00:38:21 -08:00
}
func output(ms ...ma.Multiaddr) {
for _, m := range ms {
fmt.Println(outfmt(m))
}
2014-11-04 23:51:11 -08:00
}
func outfmt(m ma.Multiaddr) string {
switch format {
case "string":
return m.String()
2014-11-05 00:38:21 -08:00
case "slice":
2014-11-04 23:51:11 -08:00
return fmt.Sprintf("%v", m.Bytes())
2014-11-05 00:38:21 -08:00
case "bytes":
2014-11-04 23:51:11 -08:00
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)
}