package dns
import "strings"
type PrivateRdata interface {
String () string
Parse ([]string ) error
Pack ([]byte ) (int , error )
Unpack ([]byte ) (int , error )
Copy (PrivateRdata ) error
Len () int
}
type PrivateRR struct {
Hdr RR_Header
Data PrivateRdata
generator func () PrivateRdata
}
func (r *PrivateRR ) Header () *RR_Header { return &r .Hdr }
func (r *PrivateRR ) String () string { return r .Hdr .String () + r .Data .String () }
func (r *PrivateRR ) len (off int , compression map [string ]struct {}) int {
l := r .Hdr .len (off , compression )
l += r .Data .Len ()
return l
}
func (r *PrivateRR ) copy () RR {
rr := &PrivateRR {r .Hdr , r .generator (), r .generator }
if err := r .Data .Copy (rr .Data ); err != nil {
panic ("dns: got value that could not be used to copy Private rdata: " + err .Error())
}
return rr
}
func (r *PrivateRR ) pack (msg []byte , off int , compression compressionMap , compress bool ) (int , error ) {
n , err := r .Data .Pack (msg [off :])
if err != nil {
return len (msg ), err
}
off += n
return off , nil
}
func (r *PrivateRR ) unpack (msg []byte , off int ) (int , error ) {
off1 , err := r .Data .Unpack (msg [off :])
off += off1
return off , err
}
func (r *PrivateRR ) parse (c *zlexer , origin string ) *ParseError {
var l lex
text := make ([]string , 0 , 2 )
Fetch :
for {
switch l , _ = c .Next (); l .value {
case zNewline , zEOF :
break Fetch
case zString :
text = append (text , l .token )
}
}
err := r .Data .Parse (text )
if err != nil {
return &ParseError {wrappedErr : err , lex : l }
}
return nil
}
func (r *PrivateRR ) isDuplicate (r2 RR ) bool { return false }
func PrivateHandle (rtypestr string , rtype uint16 , generator func () PrivateRdata ) {
rtypestr = strings .ToUpper (rtypestr )
TypeToRR [rtype ] = func () RR { return &PrivateRR {RR_Header {}, generator (), generator } }
TypeToString [rtype ] = rtypestr
StringToType [rtypestr ] = rtype
}
func PrivateHandleRemove (rtype uint16 ) {
rtypestr , ok := TypeToString [rtype ]
if ok {
delete (TypeToRR , rtype )
delete (TypeToString , rtype )
delete (StringToType , rtypestr )
}
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .