From: Mukund Sivaraman Date: Mon, 13 Aug 2012 17:17:22 +0000 (+0530) Subject: [2166] Update RRset::toWire() so it will render RRSIGs too X-Git-Tag: trac2351_base~110^2~30 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c4500a6a000f2ae6903f26675f88c8680ee74ad8;p=thirdparty%2Fkea.git [2166] Update RRset::toWire() so it will render RRSIGs too --- diff --git a/src/lib/dns/rrset.cc b/src/lib/dns/rrset.cc index 2bdb71f419..97b813fecf 100644 --- a/src/lib/dns/rrset.cc +++ b/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(*this, buffer, 0); + if (rrsig_) { + rrs_written += rrsetToWire(*(rrsig_.get()), buffer, 0); + } + + return (rrs_written); +} + +unsigned int +RRset::toWire(AbstractMessageRenderer& renderer) const { + unsigned int rrs_written; + + rrs_written = + rrsetToWire(*this, renderer, + renderer.getLengthLimit()); + if (rrsig_) { + rrs_written += + rrsetToWire(*(rrsig_.get()), renderer, + renderer.getLengthLimit()); + } + + if (getRdataCount() + getRRsigDataCount() > rrs_written) { + renderer.setTruncated(); + } + + return (rrs_written); +} + namespace { class BasicRdataIterator : public RdataIterator { private: diff --git a/src/lib/dns/rrset.h b/src/lib/dns/rrset.h index 6c73d60f19..7019f93dc7 100644 --- a/src/lib/dns/rrset.h +++ b/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);