Browse Source

[2157] use std::bitset, add notes

Yoshitaka Aharen 12 years ago
parent
commit
a44025da79
1 changed files with 41 additions and 32 deletions
  1. 41 32
      src/bin/auth/statistics.h

+ 41 - 32
src/bin/auth/statistics.h

@@ -25,7 +25,7 @@
 
 #include <boost/noncopyable.hpp>
 
-#include <string>
+#include <bitset>
 
 #include <stdint.h>
 
@@ -43,14 +43,17 @@ private:
     int req_ip_version_;            // IP version
     int req_transport_protocol_;    // Transport layer protocol
     int req_opcode_;                // OpCode
-    bool req_is_edns_0_;            // EDNS ver.0
-    bool req_is_edns_badver_;       // other EDNS version
-    bool req_is_dnssec_ok_;         // DO bit
-    bool req_is_tsig_;              // signed with valid TSIG
-    bool req_is_sig0_;              // signed with valid SIG(0)
-    bool req_is_badsig_;            // signed but bad signature
-    // response attributes
-    bool res_is_truncated_;         // DNS message is truncated
+    enum BitAttributes {
+        REQ_IS_EDNS_0,              // EDNS ver.0
+        REQ_IS_EDNS_BADVER,         // EDNS version other than 0
+        REQ_IS_DNSSEC_OK,           // DNSSEC OK (DO) bit is set
+        REQ_IS_TSIG,                // signed with valid TSIG
+        REQ_IS_SIG0,                // signed with valid SIG(0)
+        REQ_IS_BADSIG,              // signed but bad signature,
+        RES_IS_TRUNCATED,           // DNS message is truncated
+        BIT_ATTRIBUTES_TYPES
+    };
+    std::bitset<BIT_ATTRIBUTES_TYPES> bit_attributes_;
 public:
     /// \brief The constructor.
     ///
@@ -75,13 +78,14 @@ public:
     };
 
     /// \brief Get IP version carrying a request.
-    /// \return IP version carrying a request
+    /// \return IP version carrying a request (AF_INET or AF_INET6)
     /// \throw None
     int getRequestIPVersion() const {
         return (req_ip_version_);
     };
 
     /// \brief Set IP version carrying a request.
+    /// \param ip_version AF_INET or AF_INET6
     /// \throw None
     void setRequestIPVersion(const int ip_version) {
         req_ip_version_ = ip_version;
@@ -89,12 +93,14 @@ public:
 
     /// \brief Get transport protocol carrying a request.
     /// \return Transport protocol carrying a request
+    ///         (IPPROTO_UDP or IPPROTO_TCP)
     /// \throw None
     int getRequestTransportProtocol() const {
         return (req_transport_protocol_);
     };
 
     /// \brief Set transport protocol carrying a request.
+    /// \param transport_protocol IPPROTO_UDP or IPPROTO_TCP
     /// \throw None
     void setRequestTransportProtocol(const int transport_protocol) {
         req_transport_protocol_ = transport_protocol;
@@ -104,78 +110,87 @@ public:
     /// \return true if EDNS version 0
     /// \throw None
     bool getRequestEDNS0() const {
-        return (req_is_edns_0_);
+        return (bit_attributes_[REQ_IS_EDNS_0]);
     };
 
     /// \brief Get request is EDNS version other than 0.
     /// \return true if EDNS version other than 0
     /// \throw None
     bool getRequestEDNSBadVer() const {
-        return (req_is_edns_badver_);
+        return (bit_attributes_[REQ_IS_EDNS_BADVER]);
     };
 
     /// \brief Set request EDNS attributes.
+    /// \param is_edns_0 true if request is EDNS version 0
+    /// \param is_edns_badver true if request is EDNS version other than 0
     /// \throw None
     void setRequestEDNS(const bool is_edns_0, const bool is_edns_badver) {
-        req_is_edns_0_ = is_edns_0;
-        req_is_edns_badver_ = is_edns_badver;
+        assert(!(is_edns_0 && is_edns_badver));
+        bit_attributes_[REQ_IS_EDNS_0] = is_edns_0;
+        bit_attributes_[REQ_IS_EDNS_BADVER] = is_edns_badver;
     };
 
     /// \brief Get request DNSSEC OK (DO) bit.
-    /// \return true if DNSSEC OK bit is set
+    /// \return true if DNSSEC OK (DO) bit is set
     /// \throw None
     bool getRequestDO() const {
-        return (req_is_dnssec_ok_);
+        return (bit_attributes_[REQ_IS_DNSSEC_OK]);
     };
 
     /// \brief Set request DNSSEC OK (DO) bit.
+    /// \param is_dnssec_ok true if DNSSEC OK (DO) bit is set
     /// \throw None
     void setRequestDO(const bool is_dnssec_ok) {
-        req_is_dnssec_ok_ = is_dnssec_ok;
+        bit_attributes_[REQ_IS_DNSSEC_OK] = is_dnssec_ok;
     };
 
     /// \brief Get request TSIG signed and verified.
     /// \return true if request is TSIG signed and verified
     /// \throw None
     bool getRequestSigTSIG() const {
-        return (req_is_tsig_);
+        return (bit_attributes_[REQ_IS_TSIG]);
     };
 
     /// \brief Get request SIG(0) signed and verified.
     /// \return true if request is SIG(0) signed and verified
     /// \throw None
     bool getRequestSigSIG0() const {
-        return (req_is_sig0_);
+        return (bit_attributes_[REQ_IS_SIG0]);
     };
 
     /// \brief Get request signature is bad.
     /// \return true if request signature is bad
     /// \throw None
     bool getRequestSigBadSig() const {
-        return (req_is_badsig_);
+        return (bit_attributes_[REQ_IS_BADSIG]);
     };
 
     /// \brief Set request TSIG attributes.
+    /// \param is_tsig true if request is TSIG signed
+    /// \param is_sig0 true if request is SIG(0) signed
+    /// \param is_badsig true if request signature is bad
     /// \throw None
     void setRequestSig(const bool is_tsig, const bool is_sig0,
                        const bool is_badsig)
     {
-        req_is_tsig_ = is_tsig;
-        req_is_sig0_ = is_sig0;
-        req_is_badsig_ = is_badsig;
+        assert(!(is_tsig && is_sig0));
+        bit_attributes_[REQ_IS_TSIG] = is_tsig;
+        bit_attributes_[REQ_IS_SIG0] = is_sig0;
+        bit_attributes_[REQ_IS_BADSIG] = is_badsig;
     };
 
     /// \brief Get if the response is truncated.
     /// \return true if the response is truncated
     /// \throw None
     bool getResponseTruncated() const {
-        return (res_is_truncated_);
+        return (bit_attributes_[RES_IS_TRUNCATED]);
     };
 
     /// \brief Set if the response is truncated.
+    /// \param is_truncated true if the response is truncated
     /// \throw None
     void setResponseTruncated(const bool is_truncated) {
-        res_is_truncated_ = is_truncated;
+        bit_attributes_[RES_IS_TRUNCATED] = is_truncated;
     };
 
     /// \brief Reset attributes.
@@ -184,13 +199,7 @@ public:
         req_ip_version_ = 0;
         req_transport_protocol_ = 0;
         req_opcode_ = 0;
-        req_is_edns_0_ = false;
-        req_is_edns_badver_ = false;
-        req_is_dnssec_ok_ = false;
-        req_is_tsig_ = false;
-        req_is_sig0_ = false;
-        req_is_badsig_ = false;
-        res_is_truncated_ = false;
+        bit_attributes_.reset();
     };
 };