ipld-eth-server/vendor/github.com/multiformats/go-multiaddr-dns/dns.go

70 lines
1.5 KiB
Go

package madns
import (
"bytes"
"fmt"
ma "github.com/multiformats/go-multiaddr"
)
// Extracted from source of truth for multicodec codes: https://github.com/multiformats/multicodec
const (
P_DNS4 = 0x0036
P_DNS6 = 0x0037
P_DNSADDR = 0x0038
)
var Dns4Protocol = ma.Protocol{
Code: P_DNS4,
Size: ma.LengthPrefixedVarSize,
Name: "dns4",
VCode: ma.CodeToVarint(P_DNS4),
Transcoder: DnsTranscoder,
}
var Dns6Protocol = ma.Protocol{
Code: P_DNS6,
Size: ma.LengthPrefixedVarSize,
Name: "dns6",
VCode: ma.CodeToVarint(P_DNS6),
Transcoder: DnsTranscoder,
}
var DnsaddrProtocol = ma.Protocol{
Code: P_DNSADDR,
Size: ma.LengthPrefixedVarSize,
Name: "dnsaddr",
VCode: ma.CodeToVarint(P_DNSADDR),
Transcoder: DnsTranscoder,
}
func init() {
err := ma.AddProtocol(Dns4Protocol)
if err != nil {
panic(fmt.Errorf("error registering dns4 protocol: %s", err))
}
err = ma.AddProtocol(Dns6Protocol)
if err != nil {
panic(fmt.Errorf("error registering dns6 protocol: %s", err))
}
err = ma.AddProtocol(DnsaddrProtocol)
if err != nil {
panic(fmt.Errorf("error registering dnsaddr protocol: %s", err))
}
}
var DnsTranscoder = ma.NewTranscoderFromFunctions(dnsStB, dnsBtS, dnsVal)
func dnsVal(b []byte) error {
if bytes.IndexByte(b, '/') >= 0 {
return fmt.Errorf("domain name %q contains a slash", string(b))
}
return nil
}
func dnsStB(s string) ([]byte, error) {
return []byte(s), nil
}
func dnsBtS(b []byte) (string, error) {
return string(b), nil
}