BaseSocketSessionForwarder& ddns_forwarder);
~AuthSrvImpl();
- bool processNormalQuery(const IOMessage& io_message, Message& message,
+ bool processNormalQuery(const IOMessage& io_message,
+ ConstEDNSPtr remote_edns, Message& message,
OutputBuffer& buffer,
auto_ptr<TSIGContext> tsig_context);
bool processXfrQuery(const IOMessage& io_message, Message& message,
try {
// statistics: check EDNS
// note: This can only be reliable after TSIG check succeeds.
- {
- ConstEDNSPtr edns = message.getEDNS();
- if (edns != NULL) {
- impl_->stats_attrs_.setQueryEDNS(true,
- edns->getVersion() != 0);
- impl_->stats_attrs_.setQueryDO(edns->getDNSSECAwareness());
- }
+ ConstEDNSPtr edns = message.getEDNS();
+ if (edns) {
+ impl_->stats_attrs_.setQueryEDNS(true,
+ edns->getVersion() != 0);
+ impl_->stats_attrs_.setQueryDO(edns->getDNSSECAwareness());
}
// statistics: check OpCode
send_answer = impl_->processXfrQuery(io_message, message,
buffer, tsig_context);
} else {
- send_answer = impl_->processNormalQuery(io_message, message,
- buffer, tsig_context);
+ send_answer = impl_->processNormalQuery(io_message, edns,
+ message, buffer,
+ tsig_context);
}
}
} catch (const std::exception& ex) {
}
bool
-AuthSrvImpl::processNormalQuery(const IOMessage& io_message, Message& message,
+AuthSrvImpl::processNormalQuery(const IOMessage& io_message,
+ ConstEDNSPtr remote_edns, Message& message,
OutputBuffer& buffer,
auto_ptr<TSIGContext> tsig_context)
{
- ConstEDNSPtr remote_edns = message.getEDNS();
const bool dnssec_ok = remote_edns && remote_edns->getDNSSECAwareness();
const uint16_t remote_bufsize = remote_edns ? remote_edns->getUDPSize() :
Message::DEFAULT_MAX_UDPSIZE;
AuthSrvImpl::resumeServer(DNSServer* server, Message& message,
const bool done) {
if (done) {
- stats_attrs_.answerWasSent();
// isTruncated from MessageRenderer
stats_attrs_.setResponseTruncated(renderer_.isTruncated());
}
- counters_.inc(stats_attrs_, message);
+ counters_.inc(stats_attrs_, message, done);
stats_attrs_.reset();
server->resume(done);
}
/// \throw None
inline void setOrigin(const std::string& origin);
- /// \brief Set if the answer has sent.
- /// \throw None
- inline void answerWasSent();
-
/// \brief Set if the response is truncated.
/// \throw None
inline void setResponseTruncated(const bool is_truncated);
req_is_badsig_ = is_badsig;
}
-inline void
-QRAttributes::answerWasSent() {
- answer_sent_ = true;
-}
-
inline void
QRAttributes::setResponseTruncated(const bool is_truncated) {
res_is_truncated_ = is_truncated;
///
/// \param qrattrs Query/Response attributes.
/// \param response DNS response message.
+ /// \param done DNS response was sent to the client.
///
/// \throw std::bad_alloc Internal resource allocation fails
///
- void inc(const QRAttributes& qrattrs, const isc::dns::Message& response);
+ void inc(const QRAttributes& qrattrs, const isc::dns::Message& response,
+ const bool done);
/// \brief Get statistics counters.
///
qrattrs.setQueryOpCode(Opcode::QUERY_CODE);
qrattrs.setQueryEDNS(true, false);
qrattrs.setQueryDO(true);
- qrattrs.answerWasSent();
response.setRcode(Rcode::REFUSED());
response.addQuestion(Question(Name("example.com"),
RRClass::IN(), RRType::AAAA()));
- counters.inc(qrattrs, response);
+ counters.inc(qrattrs, response, true);
expect_nonzero.clear();
expect_nonzero.insert("opcode.query");