class QPSAction : public DNSAction
{
public:
- QPSAction(int limit) : d_qps(limit, limit)
+ QPSAction(int limit) : d_qps(QPSLimiter(limit, limit))
{
}
DNSAction::Action operator()(DNSQuestion* dq, std::string* ruleresult) const override
{
- std::lock_guard<decltype(d_lock)> guard(d_lock);
- if (d_qps.check()) {
+ if (d_qps.lock()->check()) {
return Action::None;
}
else {
}
std::string toString() const override
{
- return "qps limit to "+std::to_string(d_qps.getRate());
+ return "qps limit to "+std::to_string(d_qps.lock()->getRate());
}
private:
- mutable std::mutex d_lock;
- QPSLimiter d_qps;
+ mutable LockGuarded<QPSLimiter> d_qps;
};
class DelayAction : public DNSAction
class QPSPoolAction : public DNSAction
{
public:
- QPSPoolAction(unsigned int limit, const std::string& pool) : d_qps(limit, limit), d_pool(pool) {}
+ QPSPoolAction(unsigned int limit, const std::string& pool) : d_qps(QPSLimiter(limit, limit)), d_pool(pool) {}
DNSAction::Action operator()(DNSQuestion* dq, std::string* ruleresult) const override
{
- std::lock_guard<decltype(d_lock)> guard(d_lock);
- if (d_qps.check()) {
+ if (d_qps.lock()->check()) {
*ruleresult = d_pool;
return Action::Pool;
}
}
std::string toString() const override
{
- return "max " +std::to_string(d_qps.getRate())+" to pool "+d_pool;
+ return "max " +std::to_string(d_qps.lock()->getRate())+" to pool "+d_pool;
}
private:
- mutable std::mutex d_lock;
- QPSLimiter d_qps;
- std::string d_pool;
+ mutable LockGuarded<QPSLimiter> d_qps;
+ const std::string d_pool;
};
class RCodeAction : public DNSAction