status-go/vendor/github.com/multiformats/go-multiaddr-dns/dns.go

67 lines
1.4 KiB
Go
Raw Normal View History

package madns
import (
"errors"
"fmt"
ma "github.com/multiformats/go-multiaddr"
)
var Dns4Protocol = ma.Protocol{
Code: 54,
Size: ma.LengthPrefixedVarSize,
Name: "dns4",
VCode: ma.CodeToVarint(54),
Transcoder: DnsTranscoder,
}
var Dns6Protocol = ma.Protocol{
Code: 55,
Size: ma.LengthPrefixedVarSize,
Name: "dns6",
VCode: ma.CodeToVarint(55),
Transcoder: DnsTranscoder,
}
var DnsaddrProtocol = ma.Protocol{
Code: 56,
Size: ma.LengthPrefixedVarSize,
Name: "dnsaddr",
VCode: ma.CodeToVarint(56),
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)
func dnsStB(s string) ([]byte, error) {
size := ma.CodeToVarint(len(s))
b := append(size, []byte(s)...)
return b, nil
}
func dnsBtS(b []byte) (string, error) {
size, n, err := ma.ReadVarintCode(b)
if err != nil {
return "", err
}
b = b[n:]
if len(b) != size {
return "", errors.New("inconsistent lengths")
}
return string(b), nil
}