/* * ModSecurity, http://www.modsecurity.org/ * Copyright (c) 2015 - 2020 Trustwave Holdings, Inc. (http://www.trustwave.com/) * * You may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * If any of the files related to licensing are missing or if you have any * other questions related to licensing please contact Trustwave Holdings, Inc. * directly using the email address security@modsecurity.org. * */ #include #include #ifdef __cplusplus #include #include #include #include #include #include #endif #include "modsecurity/rule.h" #ifndef HEADERS_MODSECURITY_RULES_H_ #define HEADERS_MODSECURITY_RULES_H_ #ifdef __cplusplus namespace modsecurity { namespace actions { namespace transformations { class Transformation; } } class Rules { public: using container=std::vector>; using iterator=typename container::iterator; using const_iterator=typename container::const_iterator; Rules() : m_rules() { }; Rules(const Rules&) = delete; virtual ~Rules() { m_rules.clear(); } int append(Rules *from); bool insert(const std::shared_ptr &rule); size_t size() const; std::shared_ptr operator[](int index) const; std::shared_ptr at(int index) const; void fixDefaultActions(RulesWarnings *warnings, RulesErrors *errors); std::vector > m_defaultActions; std::vector > m_defaultTransformations; virtual void dump() { std::stringstream ss; dump(ss); std::cout << ss.str(); }; virtual void dump(std::stringstream &out); inline iterator begin() noexcept { return m_rules.begin(); } inline const_iterator cbegin() const noexcept { return m_rules.cbegin(); } inline iterator end() noexcept { return m_rules.end(); } inline const_iterator cend() const noexcept { return m_rules.cend(); } private: container m_rules; }; } // namespace modsecurity #endif #endif // HEADERS_MODSECURITY_RULES_H_