--- /dev/null
+package madns
+
+import (
+ "bytes"
+ "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, 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
+}