}
}
-void Rule::set_rule_old_action(const std::string &action)
+void Rule::set_rule_old_action(const std::string& action)
{
old_action = action;
}
return out;
}
+void Rule::resolve_pcre_buffer_options()
+{
+ std::vector<RuleOption*>::iterator iter;
+ std::string curr_sticky_buffer = "";
+ bool is_sip = false;
+ std::string name;
+ const std::string service = get_option("service");
+ std::string new_buffer;
+
+ if (service == "sip")
+ is_sip = true;
+
+ iter = options.begin();
+
+ while (iter != options.end())
+ {
+ name = (*iter)->get_name();
+
+ if (name == "pcre_P_option_body" || name == "pcre_H_option_header")
+ {
+ delete(*iter);
+ iter = options.erase(iter);
+
+ if (is_sip)
+ {
+ if (name == "pcre_P_option_body")
+ {
+ new_buffer = "sip_body";
+ }
+ else
+ {
+ new_buffer = "sip_header";
+ }
+ }
+ else
+ {
+ if (name == "pcre_P_option_body")
+ {
+ new_buffer = "http_client_body";
+ }
+ else
+ {
+ new_buffer = "http_header";
+ }
+ }
+
+ if (curr_sticky_buffer != new_buffer)
+ {
+ curr_sticky_buffer = new_buffer;
+ RuleOption* new_opt = new RuleOption(new_buffer);
+ options.insert(iter, new_opt);
+ ++iter;
+ }
+ }
+ else if (name == "pkt_data")
+ {
+ curr_sticky_buffer = name;
+ ++iter;
+ }
+ else if (name == "http_uri" ||
+ name == "http_raw_uri" ||
+ name == "http_cookie" ||
+ name == "http_raw_cookie" ||
+ name == "http_method" ||
+ name == "http_stat_code" ||
+ name == "http_stat_msg" ||
+ name == "http_header" ||
+ name == "http_client_body" ||
+ name == "sip_header" ||
+ name == "sip_body")
+ {
+ if (curr_sticky_buffer == name)
+ {
+ delete(*iter);
+ iter = options.erase(iter);
+ }
+ else
+ {
+ curr_sticky_buffer = name;
+ ++iter;
+ }
+ }
+ else
+ {
+ ++iter;
+ }
+ }
+}
+
{
case 'B': sticky_buffer = "pkt_data"; break;
case 'U': sticky_buffer = "http_uri"; break;
- case 'P': sticky_buffer = "http_client_body"; break;
- case 'H': sticky_buffer = "http_header"; break;
+ case 'P': sticky_buffer = "pcre_P_option_body"; break;
+ case 'H': sticky_buffer = "pcre_H_option_header"; break;
case 'M': sticky_buffer = "http_method"; break;
case 'C': sticky_buffer = "http_cookie"; break;
case 'I': sticky_buffer = "http_raw_uri"; break;