From 19f8d266b56fd55736719da96c8f81b541d7c705 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Sat, 28 Jan 2012 01:14:07 +0100 Subject: [PATCH] Remove the RRset type - only add obvious stuff --- README.markdown | 5 ++-- dns.go | 68 ------------------------------------------------- dnssec.go | 6 ++--- 3 files changed, 6 insertions(+), 73 deletions(-) diff --git a/README.markdown b/README.markdown index 60922385..59f7f13d 100644 --- a/README.markdown +++ b/README.markdown @@ -16,8 +16,9 @@ Features: * UDP/TCP queries, IPv4 and IPv6; * RFC 1035 zone file parsing; * Fast: - * reply speed around 30K qps (Faster hardware -> more qps); - * Parsing RRs (zone files) with 30K RR/s; + * reply speed around 35K qps (Faster hardware -> more qps); + * Parsing RRs (zone files) with 30K RR/s, that 5M records + in about 170 seconds; * This is expected to be optimized further. * Client and server side programming (mimicking the http package); * Asynchronous queries for client and server; diff --git a/dns.go b/dns.go index 1b0b17a3..4bd3b252 100644 --- a/dns.go +++ b/dns.go @@ -99,74 +99,6 @@ type RR interface { Len() int } -// An RRset is a slice of RRs. -type RRset []RR - -func NewRRset() RRset { - s := make([]RR, 0) - return s -} - -func (s RRset) String() string { - str := "" - for _, r := range s { - str += r.String() + "\n" - } - return str -} - -// Pop removes the last pushed RR from the RRset. Returns nil -// when there is nothing to remove. -func (s *RRset) Pop() RR { - if len(*s) == 0 { - return nil - } - // Pop and remove the entry - r := (*s)[len(*s)-1] - *s = (*s)[:len(*s)-1] - return r -} - -// Push pushes the RR r to the RRset. -func (s *RRset) Push(r RR) bool { - if len(*s) == 0 { - *s = append(*s, r) - return true - } - // For RRSIGs this is not true (RFC???) - // Don't make it a failure if this happens - // if (*s)[0].Header().Ttl != r.Header().Ttl { - // return false - // } - if (*s)[0].Header().Name != r.Header().Name { - return false - } - if (*s)[0].Header().Class != r.Header().Class { - return false - } - *s = append(*s, r) - return true -} - -// Ok checks if the RRSet is RFC 2181 compliant. -func (s RRset) Ok() bool { - ttl := s[0].Header().Ttl - name := s[0].Header().Name - class := s[0].Header().Class - for _, rr := range s[1:] { - if rr.Header().Ttl != ttl { - return false - } - if rr.Header().Name != name { - return false - } - if rr.Header().Class != class { - return false - } - } - return true -} - // Exchange is used in communicating with the resolver. type Exchange struct { Request *Msg // The question sent. diff --git a/dnssec.go b/dnssec.go index 5195c5af..234e84d1 100644 --- a/dnssec.go +++ b/dnssec.go @@ -186,7 +186,7 @@ func (k *RR_DNSKEY) ToDS(h int) *RR_DS { // otherwise false. // The signature data in the RRSIG is filled by this method. // There is no check if RRSet is a proper (RFC 2181) RRSet. -func (s *RR_RRSIG) Sign(k PrivateKey, rrset RRset) error { +func (s *RR_RRSIG) Sign(k PrivateKey, rrset []RR) error { if k == nil { return ErrPrivKey } @@ -278,7 +278,7 @@ func (s *RR_RRSIG) Sign(k PrivateKey, rrset RRset) error { // Verify validates an RRSet with the signature and key. This is only the // cryptographic test, the signature validity period most be checked separately. -func (s *RR_RRSIG) Verify(k *RR_DNSKEY, rrset RRset) error { +func (s *RR_RRSIG) Verify(k *RR_DNSKEY, rrset []RR) error { // Frist the easy checks if s.KeyTag != k.KeyTag() { return ErrKey @@ -483,7 +483,7 @@ func (p wireSlice) Less(i, j int) bool { func (p wireSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } // Return the raw signature data. -func rawSignatureData(rrset RRset, s *RR_RRSIG) (buf []byte) { +func rawSignatureData(rrset []RR, s *RR_RRSIG) (buf []byte) { wires := make(wireSlice, len(rrset)) for i, r := range rrset { h := r.Header()