// IsIPLoopback returns whether a Multiaddr is a "Loopback" IP address // This means either /ip4/127.0.0.1 or /ip6/::1 func IsIPLoopback(m ma.Multiaddr) bool { b := m.Bytes() // /ip4/127 prefix (_entire_ /8 is loopback...) if bytes.HasPrefix(b, []byte{4, 127}) { return true } // /ip6/::1 if IP6Loopback.Equal(m) || IP6LinkLocalLoopback.Equal(m) { return true } return false }
// Handshake3Msg constructs a Handshake3 msg. func Handshake3Msg(localPeer peer.Peer, remoteAddr ma.Multiaddr) *pb.Handshake3 { var msg pb.Handshake3 // don't need publicKey after secure channel. // msg.PublicKey = localPeer.PubKey().Bytes() // local listen addresses addrs := localPeer.Addresses() msg.ListenAddrs = make([][]byte, len(addrs)) for i, a := range addrs { msg.ListenAddrs[i] = a.Bytes() } // observed remote address msg.ObservedAddr = remoteAddr.Bytes() // services // srv := localPeer.Services() // msg.Services = make([]mux.ProtocolID, len(srv)) // for i, pid := range srv { // msg.Services[i] = pid // } return &msg }
func outfmt(m ma.Multiaddr) string { switch format { case "string": return m.String() case "slice": return fmt.Sprintf("%v", m.Bytes()) case "bytes": return string(m.Bytes()) case "hex": return "0x" + hex.EncodeToString(m.Bytes()) } die("error: invalid format", format) return "" }