Browse Source

[2166] Update RRset::toWire() so it will render RRSIGs too

Mukund Sivaraman 12 years ago
parent
commit
c4500a6a00
2 changed files with 43 additions and 0 deletions
  1. 32 0
      src/lib/dns/rrset.cc
  2. 11 0
      src/lib/dns/rrset.h

+ 32 - 0
src/lib/dns/rrset.cc

@@ -258,6 +258,38 @@ RRset::getRRsigDataCount() const {
     }
 }
 
+unsigned int
+RRset::toWire(OutputBuffer& buffer) const {
+    unsigned int rrs_written;
+
+    rrs_written = rrsetToWire<OutputBuffer>(*this, buffer, 0);
+    if (rrsig_) {
+        rrs_written += rrsetToWire<OutputBuffer>(*(rrsig_.get()), buffer, 0);
+    }
+
+    return (rrs_written);
+}
+
+unsigned int
+RRset::toWire(AbstractMessageRenderer& renderer) const {
+    unsigned int rrs_written;
+
+    rrs_written =
+        rrsetToWire<AbstractMessageRenderer>(*this, renderer,
+                                             renderer.getLengthLimit());
+    if (rrsig_) {
+        rrs_written +=
+            rrsetToWire<AbstractMessageRenderer>(*(rrsig_.get()), renderer,
+                                                 renderer.getLengthLimit());
+    }
+
+    if (getRdataCount() + getRRsigDataCount() > rrs_written) {
+        renderer.setTruncated();
+    }
+
+    return (rrs_written);
+}
+
 namespace {
 class BasicRdataIterator : public RdataIterator {
 private:

+ 11 - 0
src/lib/dns/rrset.h

@@ -828,6 +828,17 @@ public:
 
     virtual ~RRset();
 
+    /// \brief Render the RRset in the wire format with name compression and
+    /// truncation handling.
+    ///
+    /// See \c AbstractRRset::toWire(MessageRenderer&)const.
+    virtual unsigned int toWire(AbstractMessageRenderer& renderer) const;
+
+    /// \brief Render the RRset in the wire format without any compression.
+    ///
+    /// See \c AbstractRRset::toWire(OutputBuffer&)const.
+    virtual unsigned int toWire(isc::util::OutputBuffer& buffer) const;
+
     /// \brief Updates the owner name of the \c RRset, including RRSIGs if any
     virtual void setName(const Name& n) {
         BasicRRset::setName(n);