]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2166] Update RRset::toWire() so it will render RRSIGs too
authorMukund Sivaraman <muks@isc.org>
Mon, 13 Aug 2012 17:17:22 +0000 (22:47 +0530)
committerMukund Sivaraman <muks@isc.org>
Wed, 15 Aug 2012 16:02:54 +0000 (21:32 +0530)
src/lib/dns/rrset.cc
src/lib/dns/rrset.h

index 2bdb71f419bbf6104078992a52bf0a6315d8ffd3..97b813fecfcdf27073f0cd7b6bd4efd0d123ea4c 100644 (file)
@@ -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:
index 6c73d60f19b9ecc5d7bf490f57c25833b2a16d31..7019f93dc7ebd78a42ec6c9239025de0bf803943 100644 (file)
@@ -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);