+namespace metaproxy_1 {
+ namespace filter {
+ class HttpRewrite::RuleScope {
+ public:
+ std::vector<std::string> tags;
+ std::vector<std::string> attrs;
+ std::string content_type;
+ };
+ class HttpRewrite::Rule {
+ public:
+ enum Section { METHOD, HEADER, BODY };
+ std::string regex;
+ std::string recipe;
+ std::map<int, std::string> group_index;
+ std::vector<RuleScope> scopes;
+ Section section;
+ const std::string search_replace(
+ std::map<std::string, std::string> & vars,
+ const std::string & txt) const;
+ std::string sub_vars (
+ const std::map<std::string, std::string> & vars) const;
+ void parse_groups();
+ };
+ class HttpRewrite::Rules {
+ public:
+ std::vector<Rule> rules;
+ void rewrite_reqline (mp::odr & o, Z_HTTP_Request *hreq,
+ std::map<std::string, std::string> & vars) const;
+ void rewrite_headers(mp::odr & o, Z_HTTP_Header *headers,
+ std::map<std::string, std::string> & vars) const;
+ void rewrite_body (mp::odr & o,
+ char **content_buf, int *content_len,
+ std::map<std::string, std::string> & vars) const;
+ const std::string test_patterns(
+ std::map<std::string, std::string> & vars,
+ const std::string & txt) const;
+ };
+ }
+}
+
+yf::HttpRewrite::HttpRewrite() : req_rules(new Rules), res_rules(new Rules)