void get_bindings(Flow&, Stuff&, const char* service = nullptr);
void apply(Flow&, Stuff&);
void apply_assistant(Flow&, Stuff&, const char*);
- Inspector* find_gadget(Flow&);
+ Inspector* find_gadget(Flow&, Inspector*& data);
private:
std::vector<Binding> bindings;
Profile profile(bindPerfStats);
Inspector* ins = nullptr;
+ Inspector* data = nullptr;
if (flow.service)
{
- ins = find_gadget(flow);
+ ins = find_gadget(flow, data);
if (flow.gadget != ins)
{
if (flow.gadget)
{
flow.set_gadget(ins);
flow.ssn_state.snort_protocol_id = ins->get_service();
+ if (data and data != flow.data)
+ {
+ if (flow.data)
+ flow.clear_data();
+
+ flow.set_data(data);
+ }
DataBus::publish(SERVICE_INSPECTOR_CHANGE_EVENT, DetectionEngine::get_current_packet());
}
else
bstats.no_match++;
}
-Inspector* Binder::find_gadget(Flow& flow)
+Inspector* Binder::find_gadget(Flow& flow, Inspector*& data)
{
Stuff stuff;
get_bindings(flow, stuff, flow.service);
+ data = stuff.data;
return stuff.gadget;
}