+namespace metaproxy_1 {
+ namespace filter {
+ class HttpRewrite::Replace {
+ public:
+ std::string regex;
+ std::string recipe;
+ std::map<int, std::string> group_index;
+ 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::Rule {
+ public:
+ std::list<Replace> replace_list;
+ const std::string test_patterns(
+ std::map<std::string, std::string> & vars,
+ const std::string & txt) const;
+ };
+ class HttpRewrite::Within {
+ public:
+ std::string header;
+ std::string attr;
+ std::string tag;
+ bool reqline;
+ RulePtr rule;
+ };
+
+ class HttpRewrite::Phase {
+ public:
+ Phase();
+ std::list<Within> within_list;
+ int m_verbose;
+ 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;
+ };
+ class HttpRewrite::Event : public HTMLParserEvent {
+ void openTagStart(const char *tag, int tag_len);
+ void anyTagEnd(const char *tag, int tag_len, int close_it);
+ void attribute(const char *tag, int tag_len,
+ const char *attr, int attr_len,
+ const char *value, int val_len);
+ void closeTag(const char *tag, int tag_len);
+ void text(const char *value, int len);
+ const Phase *m_phase;
+ WRBUF m_w;
+ std::stack<std::list<Within>::const_iterator> s_within;
+ std::map<std::string, std::string> &m_vars;
+ public:
+ Event(const Phase *p, std::map<std::string, std::string> &vars);
+ ~Event();
+ const char *result();
+ };
+ }
+}
+
+yf::HttpRewrite::HttpRewrite() :
+ req_phase(new Phase), res_phase(new Phase)