mirror of
https://github.com/waku-org/go-multiaddr.git
synced 2025-02-23 19:48:18 +00:00
refactor to use AddressSpec objects
This commit is contained in:
parent
1263064416
commit
48f060edf7
35
convert.go
35
convert.go
@ -101,6 +101,13 @@ func DialArgs(m ma.Multiaddr) (string, string, error) {
|
|||||||
return network, host, nil
|
return network, host, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tcpAddrSpec = &AddressSpec{
|
||||||
|
Key: "tcp",
|
||||||
|
NetNames: []string{"tcp", "tcp4", "tcp6"},
|
||||||
|
ParseNetAddr: parseTcpNetAddr,
|
||||||
|
ConvertMultiaddr: parseBasicNetMaddr,
|
||||||
|
}
|
||||||
|
|
||||||
func parseTcpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
func parseTcpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
||||||
ac, ok := a.(*net.TCPAddr)
|
ac, ok := a.(*net.TCPAddr)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -123,6 +130,13 @@ func parseTcpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
|||||||
return ipm.Encapsulate(tcpm), nil
|
return ipm.Encapsulate(tcpm), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var udpAddrSpec = &AddressSpec{
|
||||||
|
Key: "udp",
|
||||||
|
NetNames: []string{"udp", "udp4", "udp6"},
|
||||||
|
ParseNetAddr: parseUdpNetAddr,
|
||||||
|
ConvertMultiaddr: parseBasicNetMaddr,
|
||||||
|
}
|
||||||
|
|
||||||
func parseUdpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
func parseUdpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
||||||
ac, ok := a.(*net.UDPAddr)
|
ac, ok := a.(*net.UDPAddr)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -145,6 +159,13 @@ func parseUdpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
|||||||
return ipm.Encapsulate(udpm), nil
|
return ipm.Encapsulate(udpm), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var utpAddrSpec = &AddressSpec{
|
||||||
|
Key: "utp",
|
||||||
|
NetNames: []string{"utp", "utp4", "utp6"},
|
||||||
|
ParseNetAddr: parseUtpNetAddr,
|
||||||
|
ConvertMultiaddr: parseBasicNetMaddr,
|
||||||
|
}
|
||||||
|
|
||||||
func parseUtpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
func parseUtpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
||||||
acc, ok := a.(*utp.Addr)
|
acc, ok := a.(*utp.Addr)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -173,6 +194,20 @@ func parseUtpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
|||||||
return ipm.Encapsulate(utpm), nil
|
return ipm.Encapsulate(utpm), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ip4AddrSpec = &AddressSpec{
|
||||||
|
Key: "ip4",
|
||||||
|
NetNames: []string{"ip4"},
|
||||||
|
ParseNetAddr: parseIpNetAddr,
|
||||||
|
ConvertMultiaddr: parseBasicNetMaddr,
|
||||||
|
}
|
||||||
|
|
||||||
|
var ip6AddrSpec = &AddressSpec{
|
||||||
|
Key: "ip6",
|
||||||
|
NetNames: []string{"ip6"},
|
||||||
|
ParseNetAddr: parseIpNetAddr,
|
||||||
|
ConvertMultiaddr: parseBasicNetMaddr,
|
||||||
|
}
|
||||||
|
|
||||||
func parseIpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
func parseIpNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
||||||
ac, ok := a.(*net.IPAddr)
|
ac, ok := a.(*net.IPAddr)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
47
registry.go
47
registry.go
@ -15,32 +15,43 @@ var maddrParsers map[string]MaddrParser
|
|||||||
var addrParsers map[string]AddrParser
|
var addrParsers map[string]AddrParser
|
||||||
var addrParsersLock sync.Mutex
|
var addrParsersLock sync.Mutex
|
||||||
|
|
||||||
func RegisterAddressType(netname, maname string, ap AddrParser, mp MaddrParser) {
|
type AddressSpec struct {
|
||||||
|
// NetNames is an array of strings that may be returned
|
||||||
|
// by net.Addr.Network() calls on addresses belonging to this type
|
||||||
|
NetNames []string
|
||||||
|
|
||||||
|
// Key is the string value for Multiaddr address keys
|
||||||
|
Key string
|
||||||
|
|
||||||
|
// ParseNetAddr parses a net.Addr belonging to this type into a multiaddr
|
||||||
|
ParseNetAddr AddrParser
|
||||||
|
|
||||||
|
// ConvertMultiaddr converts a multiaddr of this type back into a net.Addr
|
||||||
|
ConvertMultiaddr MaddrParser
|
||||||
|
|
||||||
|
// Protocol returns the multiaddr protocol struct for this type
|
||||||
|
Protocol ma.Protocol
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterAddressType(a *AddressSpec) {
|
||||||
addrParsersLock.Lock()
|
addrParsersLock.Lock()
|
||||||
defer addrParsersLock.Unlock()
|
defer addrParsersLock.Unlock()
|
||||||
addrParsers[netname] = ap
|
for _, n := range a.NetNames {
|
||||||
maddrParsers[maname] = mp
|
addrParsers[n] = a.ParseNetAddr
|
||||||
|
}
|
||||||
|
|
||||||
|
maddrParsers[a.Key] = a.ConvertMultiaddr
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
addrParsers = make(map[string]AddrParser)
|
addrParsers = make(map[string]AddrParser)
|
||||||
maddrParsers = make(map[string]MaddrParser)
|
maddrParsers = make(map[string]MaddrParser)
|
||||||
|
|
||||||
funcs := map[string]AddrParser{
|
RegisterAddressType(tcpAddrSpec)
|
||||||
"tcp": parseTcpNetAddr,
|
RegisterAddressType(udpAddrSpec)
|
||||||
"udp": parseUdpNetAddr,
|
RegisterAddressType(utpAddrSpec)
|
||||||
"utp": parseUtpNetAddr,
|
RegisterAddressType(ip4AddrSpec)
|
||||||
}
|
RegisterAddressType(ip6AddrSpec)
|
||||||
|
|
||||||
for k, v := range funcs {
|
|
||||||
RegisterAddressType(k, k, v, parseBasicNetMaddr)
|
|
||||||
RegisterAddressType(k+"4", k, v, parseBasicNetMaddr)
|
|
||||||
RegisterAddressType(k+"6", k, v, parseBasicNetMaddr)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, i := range []string{"ip", "ip4", "ip6"} {
|
|
||||||
RegisterAddressType(i, i, parseIpNetAddr, parseBasicNetMaddr)
|
|
||||||
}
|
|
||||||
|
|
||||||
addrParsers["ip+net"] = parseIpPlusNetAddr
|
addrParsers["ip+net"] = parseIpPlusNetAddr
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user